Страница 1 из 1

Надо найти ошибку в задачки С++

Добавлено: 19 мар 2009, 18:46
Promo-V
Задание
Проинтегрировать дифференциальное уравнение:
на отрезке 0<=x<=2 при y (0)=1.
Уравнение
y'=sqrt(y^2+y-1)
Он почему-то выдает при y(0) выдает 1.231 а не 1.000 как при условии помогите пожалуйста!!!
использовал метод решения уравнения Рунге-Кутта:

Наработка:

Код: Выделить всё

#include "stdio.h"
#include "conio.h"
#include "math.h"
void main()
{
float h,a = 0,b = 2;
int n = 10;
float dif(float b,float h);
clrscr();
printf("|  x   |  y    |\n");
printf("|------|-------|\n");
h = (b - a) / n;
dif(b,h);
getch();
}

float dif(float b, float h)
{
float y,x,k1,k2,k3,k4;
float f(float x, float y);
for (y=1, x <= 0; x <= 2.2; x += h)
{
k1 = h * f(x,y);
k2 = h * f((x + h / 2),(y + k1 / 2));
k3 = h * f((x + h / 2),(y + k2 / 2));
k4 = h * f((x + h),(y + k3));
y += (k1 + 2*k2 + 2*k3 + k4) / 6;
if (y < 10)
{
printf("| %5.3f| %5.3f |\n",x,y);
printf("|------|-------|\n");
}
else
{
printf("| %5.3f| %5.3f|\n",x,y);
printf("|------|-------|\n");
}
}
return y;
}
float f(float x, float y)
{
return sqrt(y*y+y-1);
}

Re: Надо найти ошибку в задачки С++

Добавлено: 19 мар 2009, 19:25
Albor
При у(0) sqrt работает с отрицательным числом - корень из -1, что должно быть? Видимо в sqrt нужно передавать абсолютную величину- sqrt(abs(y*y+y-1)).