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

Метод Рунге-Кутта 4 порядка - C++

Восстановить пароль Регистрация
 
fleshk1n
0 / 0 / 0
Регистрация: 17.03.2011
Сообщений: 8
06.12.2013, 19:04     Метод Рунге-Кутта 4 порядка #1
Всем добра!
Ребята есть вот:
задача: Решить краевую задачу для обыкновенного дифференциального уравнения с точностью е=1*е-4. Проверить полученную точность. Результаты представить с шагом h=0.06. y’’ - y’/x2 – 3xy = -3/x – 3.2
y(2)=-2.6
y(2.6)=1

Метод Рунге-Кутта
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<stdio.h>
#include<math.h>
#define P(x) (-1/(x)/(x))
#define Q(x) (-3*(x))
#define F(x) (-3/(x)-3.2)
#define M 10
 
void fn(int fl);
double a=2,b=2.6,A=-2.6,B=1;
double v[M+1],h;
int i,n=M;
 
int main(){
double u[M+1],epss[M],y[M+1][2];
double c,eps=0.0001,norm=1;
int flag=0;epss[0]=0;epss[10]=0;
 
do{
h=(b-a)/n;
v[0]=0;fn(0);
for(i=0;i<=M+1;i++)u[i]=v[i];
v[0]=A;fn(1);
c=(B-v[M])/u[M];
for(i=0;i<=M;i++)
y[i][flag]=c*u[i]+v[i];
if(flag==0)flag=1;
else{
norm=0;
for(i=1;i<M;i++){epss[i]=fabs(y[i][0]-y[i][1]);if(epss[i]>norm)norm=epss[i];}
for(i=0;i<=M;i++){y[i][0]=y[i][1];}}
n=n*2;
}while (norm>eps);
 
printf("\nh/%d=%f \n| N |    X     |    Y    |   Eps    |\n",n/(2*M),h);
for(i=0;i<=M;i++) printf("| %2d | %.2f | %f |  %.5e  |\n",i,i*(b-a)/M+a, y[i][0], epss[i]);}
 
void fn(int fl){
double z[M+1],x,ku1,ku2,ku3,ku4,kz1,kz2,kz3,kz4;
int j;z[0]=1-fl;
 
for(i=0;i<n;i++){
x=i*h+a;j=i*M/n;if((i*M)%n!=0)j++;
ku1=z[j];
kz1=-P(x)*z[j]-Q(x)*v[j]+fl*F(x);
ku2=z[j]+kz1*h/2;
kz2=-P(x+h/2)*(z[j]+kz1*h/2)-Q(x+h/2)*(v[j]+ku1*h/2)+fl*F(x+h/2);
ku3=z[j]+kz2*h/2;
kz3=-P(x+h/2)*(z[j]+kz2*h/2)-Q(x+h/2)*(v[j]+ku2*h/2)+fl*F(x+h/2);
ku4=z[j]+kz3*h;
kz4=-P(x+h)*(z[j]+kz3*h)-Q(x+h)*(v[j]+ku3*h)+fl*F(x+h);
v[i*M/n+1]=v[j]+h/6*(ku1+ku2*2+ku3*2+ku4);
z[i*M/n+1]=z[j]+h/6*(kz1+kz2*2+kz3*2+kz4);}}
Все работает как часы, есть одна проблемка, нужны комментарии к программе.(я в этом не силен совсем) Если есть добрые люди, которые могут написать их, буду очень благодарен.(Суть в том, что надо комментарии почти по каждой строчке, типо: #include <math.h> // открывает библиотеку математики и т.д. ) Причуд моего препода не понять, он так сказать из "Нарнии".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 19:04     Метод Рунге-Кутта 4 порядка
Посмотрите здесь:

метод Рунге-Кутта C++
C++ Метод Рунге-Кутта пятого порядка, модификация Мерсона
C++ Метод Рунге-Кутта 4-го порядка
C++ Метод Рунге-Кутта 3 порядка
C++ Метод Рунге-Кутта 4 порядка (исправить код)
Метод рунге-кутта 3 порядка C++
Метод Рунге-Кутта 2-го порядка C++
C++ Метод Рунге-Кутта четвертого порядка

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

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

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