Форум программистов, компьютерный форум CyberForum.ru

Метод рунге кутта, подскажите где ошибка - C++

Восстановить пароль Регистрация
 
иван90
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 5
23.02.2011, 18:30     Метод рунге кутта, подскажите где ошибка #1
у меня следущая система уравнений dz(t)/dt=f(t)^n df(t)/dt=u(t) du(t)/dt=-2z(t)u(t)+2bf(t)^(n+1) где n=1 и b=1 граничные условия z(0)=0 f(0)=1 u(0)=-sqrt(2). Я написал программу в Borland 3.1, график строит не правельный, подскажите пожалуйста где ошибка.
#include <math.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <graphics.h>
#include <dos.h>
#define N 50
#define n 1
#define b 1

double f1(double f)
{
return pow(f,n);
}
double f2(double u)
{
return u;
}
double f3(double f, double u,double z)
{
return -2*z*u+2*b*pow(f,n+1);
}

main()
{
clrscr();
double X[N], f[N], z[N], u[N];
double k1z, k2z, k3z, k4z;
double k1f, k2f, k3f, k4f;
double k1u, k2u, k3u, k4u;
double h=5./N;
z[0]=0;
f[0]=1;
u[0]=-sqrt(2);
int i;
for(i=0;i<N;i++)
{
X[i]=i*h;
}
for(i=0;i<N;i++)
{
k1z=f1(f[i]);
k2z=f1(f[i]+0.5*h*k1z);
k3z=f1(f[i]+0.5*h*k2z);
k4z=f1(f[i]+h*k3z);

k1f=f2(u[i]);
k2f=f2(u[i]+0.5*h*k1f);
k3f=f2(u[i]+0.5*h*k2f);
k4f=f2(u[i]+h*k3f);

k1u=f3(f[i],u[i],z[i]);
k2u=f3(f[i]+0.5*h*k1u,u[i]+0.5*h*k1u,z[i]+0.5*h*k1u);
k3u=f3(f[i]+0.5*h*k2u,u[i]+0.5*h*k2u,z[i]+0.5*h*k2u);
k4u=f3(f[i]+h*k3u,u[i]+h*k3u,z[i]+h*k3u);


z[i+1]=z[i]+(h/6)*(k1z+2*k2z+2*k3z+k4z);
f[i+1]=f[i]+(h/6)*(k1f+2*k2f+2*k3f+k4f);
u[i+1]=u[i]+(h/6)*(k1u+2*k2u+2*k3u+k4u);
}
double x;
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
/* terminate with an error code */
exit(1);
}
putpixel(10,10,9);
setcolor(2);
moveto(315, 0);
lineto(315,700);
moveto(315, 0);
lineto(320,20);
moveto(315,0 );
lineto(310,20);
moveto(800, 250);
lineto(800,150);
moveto(0,250);
lineto(800,250);
for( i=0; i<N; i++)
{
putpixel (315+30*h*i, 250-30*f[i],3);
putpixel (315+30*h*i, 250-30*z[i],2);
putpixel (315+30*h*i, 250-30*u[i],4);

}

getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 18:30     Метод рунге кутта, подскажите где ошибка
Посмотрите здесь:

Метод Рунге-Кутта. C++
метод Рунге-Кутта C++
C++ ДУ. Метод Рунге-Кутта. Погрешность.
метод Рунге-Кутта C++
Метод Рунге-Кутта C++
C++ Метод Рунге-Кутта
Метод рунге-кутта 3 порядка C++
Метод Рунге-Кутта C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru