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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 19:14     Метод рунге-кутта 3 порядка #1
дана функция d(y(x))/dx=e^x-2y(x)
Нач. условия y(0)=e

Код
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
#include<stdio.h>
#include<conio.h>
#include<math.h>
float fun(float x, float y)
{
return exp(x)-2*y;
}
int main()
{
int i,j,N;
float x0,y0,x,h,y,k[200][200],Y[200],n,p,a;
//clrscr();
printf("\n Enter the initial value of X0:");
scanf("%f",&x0);
printf("\n Enter the initial value of Y0:");
scanf("%f",&y0);
printf("\n Enter the given value of X:");
scanf("%f",&x);
printf("\n Enter the value of step size h:");
scanf("%f",&h);
n=(x-x0)/h;
N=(int)n;
printf("\nNumber of iterations is:%d\n",N);
for(i=1;i<=N;i++)
{
k[i][1]=h*fun(x0,y0);
k[i][2]=h*fun(x0+0.5*h,y0+0.5*k[i][1]);
k[i][3]=h*fun(x0+h,y0+2*k[i][2]+k[i][1]);
y = y0+(k[i][1] + 4 * k[i][2] + k[i][3])/6;
 
}printf("Y(%f)=%f",a,Y[i]);
printf("\n");
printf("\nk1\t\tk2\t\tk3\t\tY\n");
printf("\n");
 
for(i=1;i<=N;i++)
{
for(j=1;j<=5;j++)
{
printf("%f\t",k[i][j]);
}
a=x0+h;
 
printf("\n");
 
}
printf("\nThe final value of Y:\t%f",y);
getch();;
}
Что не так помогите
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,911
17.05.2014, 19:24     Метод рунге-кутта 3 порядка #2
MaikWazovski, выражение после return поставьте в скобки.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 19:32     Метод рунге-кутта 3 порядка #3
Цитата Сообщение от S_el Посмотреть сообщение
выражение после return поставьте в скобки.
Зачем?

Добавлено через 5 минут
Цитата Сообщение от MaikWazovski Посмотреть сообщение
for(j=1;j<=5;j++)
{
printf("%f\t",k[i][j]);
}
Значения присваивались k[i][1],k[i][2],k[i][3]
1.Откуда взялись k[i][4],k[i][5]?
2. Зачем память под k[i][0] и k[i][6]-k[i][199]?
3. Зачем вообще понадобилось k[i][j] заносить в массив?
Они ведь используются однократно
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 19:39  [ТС]     Метод рунге-кутта 3 порядка #4
надо что бы вывела прога таблицу со значениями, правда лучше бы сделать её без задания с клавы, но хочу так сделать)
а про массив не понял можно подробнее?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 19:40     Метод рунге-кутта 3 порядка #5
C++
1
2
3
4
5
6
7
8
9
10
11
Y[0]=y0;
for(i=1;i<=N;i++)
{
   printf("x=%f,Y=%f",x0,Y[i]);
   y0=y[i-1];
   double k1=h*fun(x0,y0);
   double k2=h*fun(x0+0.5*h,y0+0.5*k1);
   double k3=h*fun(x0+h,y0+2*k2+k1);
   Y[i] = Y[i-1]+(k1 + 4. * k2 + k3)/6.;
   x0+=n; 
}
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 19:43  [ТС]     Метод рунге-кутта 3 порядка #6
значения x and y
выводит она k1 k2 k3 y -выводит по какой то причине значения с минусом не понимаю по какой причине
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 19:59     Метод рунге-кутта 3 порядка #7
Значения k1-k3 Вас не должны беспокоить.
Это промежуточные вычисления.
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 20:01  [ТС]     Метод рунге-кутта 3 порядка #8
zss, Я исправил на что вы указали, но считает она не совсем так как надо
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
#include<stdio.h>
#include<conio.h>
#include<math.h>
float fun(float x, float y)
{
return exp(x)-2*y;
}
int main()
{
int i,j,N;
float x0,y0,x,h,y,k1,k2,k3,Y[200],n,p,a;
//clrscr();
printf("\n Enter the initial value of X0:");
scanf("%f",&x0);
printf("\n Enter the initial value of Y0:");
scanf("%f",&y0);
printf("\n Enter the given value of X:");
scanf("%f",&x);
printf("\n Enter the value of step size h:");
scanf("%f",&h);
n=(x-x0)/h;
N=(int)n;
printf("\nNumber of iterations is:%d\n",N);
Y[0]=y0;
for(i=1;i<=N;i++)
{
double k1=h*fun(x0,y0);
double k2=h*fun(x0+0.5*h,y0+0.5*k1);
double k3=h*fun(x0+h,y0+2*k2-k1);
Y[i] = Y[i-1]+(k1 + 4 * k2 + k3)/6;
printf("x=%f,Y=%f",x0,Y[i]);
x0+=n;
}
printf("\n");
printf("\tY\n");
printf("\n");
 
for(i=1;i<=N;i++)
{
for(j=1;j<=5;j++)
{
 
}
a=x0+h;
 
printf("\n");
 
}
printf("\nThe final value of Y:\t%f",y);
getch();;
}
Добавлено через 2 минуты
zss, я понимаю, мне необходимы были они для проверки в maple
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 20:02     Метод рунге-кутта 3 порядка #9
C++
1
printf("\nThe final value of Y:\t%f",Y[N]);
Строки 35-48 лишние
и еще опечатка в 32 строке
C++
1
x0+=h;
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 20:22  [ТС]     Метод рунге-кутта 3 порядка #10
zss, программа должна дать таблицу, что бы построить кривую, но значения которые получаются не совпадают c maple, max значение по x=2,max по y=2.4, а в результате выполнения программы выходит только первое значение более подходит так как там 2.3 следующие значения 100,2000...
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
#include<stdio.h>
#include<conio.h>
#include<math.h>
float fun(float x, float y)
{
return exp(x)-2*y;
}
int main()
{
int i,j,N;
float x0,y0,x,h,y,k1,k2,k3,Y[200],n,p,a;
//clrscr();
printf("\n Enter the initial value of X0:");
scanf("%f",&x0);
printf("\n Enter the initial value of Y0:");
scanf("%f",&y0);
printf("\n Enter the given value of X:");
scanf("%f",&x);
printf("\n Enter the value of step size h:");
scanf("%f",&h);
n=(x-x0)/h;
N=(int)n;
printf("\nNumber of iterations is:%d\n",N);
Y[0]=y0;
for(i=1;i<=N;i++)
{
double k1=h*fun(x0,y0);
double k2=h*fun(x0+0.5*h,y0+0.5*k1);
double k3=h*fun(x0+h,y0+2*k2-k1);
Y[i] = Y[i-1]+(k1 + 4 * k2 + k3)/6;
printf("x=%f,Y=%f",x0,Y[i]);
x0+=n;
}
printf("\n");
 
printf("\nThe final value of Y:\t%f",Y[N]);
getch();;
}
Добавлено через 6 минут
zss, да опечатка именно она)

Добавлено через 1 минуту
вот блин, всё хорошо, Y выводит отлично)
а вот с X проблема(
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 20:25     Метод рунге-кутта 3 порядка #11
Надо 31 строчку поставить перед 27-ой.
Т.е. сначала вывести значения, а потом делать пересчет.
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 20:35  [ТС]     Метод рунге-кутта 3 порядка #12
zss, не все Y положительные

Добавлено через 7 минут
x возрастает на 1, а в данной программе 0.1zss,

Добавлено через 1 минуту
zss, если менять строку то программа выдаёт 0 во всех значения
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 20:37     Метод рунге-кутта 3 порядка #13
А в исправили n на h в строке x0+=h?
MaikWazovski
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 7
17.05.2014, 20:45  [ТС]     Метод рунге-кутта 3 порядка #14
zss, да исправил, только по этому программа стала считать Y нормально, но X возрастает медленно
да и 3 последних Y с минусом, при вводе x0=0 y0=2.7 x=1 h=0.1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 21:17     Метод рунге-кутта 3 порядка
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.05.2014, 21:17     Метод рунге-кутта 3 порядка #15
Цитата Сообщение от MaikWazovski Посмотреть сообщение
но X возрастает медленно
x Обязаны быть 0, 0.1, 0.2 ... 1
Yandex
Объявления
17.05.2014, 21:17     Метод рунге-кутта 3 порядка
Ответ Создать тему
Опции темы

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