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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
иван90
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 5
#1

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

23.02.2011, 18:30. Просмотров 413. Ответов 0
Метки нет (Все метки)

у меня следущая система уравнений 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод рунге кутта, подскажите где ошибка (C++):

Метод Рунге-Кутта - C++
Помогите написать метод Рунге Кутта для решение систем диф. уравнений из 4 уравнений. dx/dt=Px=f1(t,x,y,Px,Py) dy/dt=Py=f2(t,x,y,Px,Py)...

Метод Рунге-Кутта - C++
Всем добрый день! Задали практическую работу, в которой необходимо проинтегрировать функцию методом Рунге-Кутта 4го порядка. Решил...

Метод Рунге-Кутта - C++
как реализовать программу для уравнения вида dv/dt=const*dm/dt методом рунге-кутта. как именно заменить производную справа

метод Рунге-Кутта - C++
Помогите написать программу на хаотичное движение бильярдных шаров методом Рунге-Кутта. При столкновении шары должны отталкиваться, ну и...

метод Рунге-Кутта - C++
Всем доброго времени суток, меня интересует, пользуясь методом Рунге -Кута для диф уравнений, я получу в ответе точки, графика диф...

Метод Рунге-Кутта - C++
Нужно решить диффур второго порядка. При решении выводятся нуля. Где я оплошал? #include &lt;math.h&gt; using namespace std; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2011, 18:30
Привет! Вот еще темы с ответами:

Метод Рунге-Кутта. - C++
хотелось бы спросить знающих людей. Мне необходимо решить систему ДУ уравнений методом Рунге_кутта 4 порядка. А значит мне нужно в...

ДУ. Метод Рунге-Кутта. Погрешность. - C++
Сам Рунге-Кутта III порядка. - &quot;реализовано&quot;. Огорчает погрешность, не могу понять как улучшить точность (и не достаточно ли такой?). ...

Метод Рунге-Кутта 2-го порядка - C++
Написал код программы. С компиляцией вроде бы нет проблем. А цикл for воспринимать не хочет. Программа просто его пропускает. Помогите...

Цикл for. Метод Рунге-Кутта - C++
Программа считает, но неправильно из за цикла for. Он считает только начальное значение, а нужно чтобы считал предыдущее посчитанное. И еще...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru