Автор Тема: Помогите найти ошибку в программе на С++ (диффур второго порядка)  (Прочитано 5118 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн artecovez

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Всем привет!такой вопрос я решаю диффур второго порядка y"=f(x,y,y1) методом Рунге-Кутта
напислаа программу на С++
но она считает толкьо значение х,а значение у и производную считает не верно...подскажите пжл в чем ошибка
на кану стоит оценка за экзамен...очень срочно надо
#include "stdafx.h"


#include "stdio.h"
#include "math.h"
double f (double x,double y, double y1)
{return 2;}
void main ()
{
   int i=0;
   double x,y,y1,k1,k2,k3,k4,m1,m2,m3,m4,dy,dy1,dx,h,y0,a,b,e,y2,y3,p1,p2,p,x0;
printf ("\n y0=" );
 scanf ("%lf",& y0);
 printf ("\n y=") ;
 scanf("%f",&y);
 printf ("\n h=") ;
 scanf ("%lf",&h);
 printf ("\n a=") ;
 scanf ("%lf", &a);
 printf("\n b=") ;
 scanf ("%lf",&b);
 p=y0;
 x=a;
 y1=y0;
 y=y0;
 do
 {

k1=p*h;
 m1=h*f(x,y,p);
 k2=h*(p+k1/2);
 m2=h*f(x+h/2,y+m1/2,p+k1/2);
 k3=h*(p+k2/2);
 m3=h*f(x+h/2,y+m2/2,p+k2/2);
 k4=h*(p+k3);
 m4=h*f(x+h,y+m3,p+k3);
 p2=p+(h/6)*(k1+2*k2+2*k3+k4);
 y2=y+(h/6)*(m1+2*m2+2*m3+m4);
 x=x+h;
 p1=p2;
 y=y2;

  }
while (x<b);
printf ("x=%lf,y=%lf,p=%lf",x,y,p);
scanf("%lf", &e);
}

« Последнее редактирование: 26 Апреля 2010, 11:51:33 от Asix »

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
что именно не работает? еррор выкидывает или результаты не те?
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩