Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Функция для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта

20.06.2012, 08:27. Показов 8703. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня есть вот такая задачка:

Разработать функцию для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта. Прототип функции:

C++
1
void runge_k(void f(double *y, double *ys, double t), double *y, int n, duble tn, double tk, int m, double delt);
где:

f - функция вычисления правых частей системы дифференциальных уравнений;
y - массив размера n значений зависимых переменных;
ys - массив размера n значений производных;
n - порядок системы дифференциальных уравнений;
t - независимая переменная;
tn - начальное значение интервала интегрирования;
tk - конечное значение интервала интегрирования;
m - начальное число разбиений отрезка интегрирования ;
delt - шаг интегрирования.

Шаг интегрирования для метода использовать 0,0001.


Очень нужна ваша помощь! Помогите решить, пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2012, 08:27
Ответы с готовыми решениями:

Численное интегрирование системы дифференциальных уравнений методом Рунге - Кутта
Доброго времени суток. Пытаюсь разработать функцию для численного интегрирования систем дифференциальных уравнений методом Рунге-Кутта. При...

Метод Рунге-Кутта 4 порядка для решения системы дифференциальных уравнений
Имеется код программы, но по не очевидным для меня причинам работает не корректно, во время отладки выдает сообщения типа : Run-Time...

Решение системы дифференциальных уравнений Методом Рунге-Кутта 4 порядка
В соседней теме я уже выкладывал решение системы дифф. уравнений через ode23. https://www.cyberforum.ru/matlab/thread2000372.html ...

19
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
20.06.2012, 10:52
Цитата Сообщение от DenProx Посмотреть сообщение
Доброго времени суток. У меня есть вот такая задачка:

Разработать функцию для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта. Прототип функции:

C++
1
void runge_k(void f(double *y, double *ys, double t), double *y, int n, duble tn, double tk, int m, double delt);
где:

f - функция вычисления правых частей системы дифференциальных уравнений;
y - массив размера n значений зависимых переменных;
ys - массив размера n значений производных;
n - порядок системы дифференциальных уравнений;
t - независимая переменная;
tn - начальное значение интервала интегрирования;
tk - конечное значение интервала интегрирования;
m - начальное число разбиений отрезка интегрирования ;
delt - шаг интегрирования.

Шаг интегрирования для метода использовать 0,0001.


Очень нужна ваша помощь! Помогите решить, пожалуйста!
тут много чего непонятно
например:
что делает функция void f(..) (вычисляет производную? ys)
куда результат записать?
для чего нужно интегрируемый отрезок разбивать (m)
как вычислить количество операций в методе если порядок больше 4?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
20.06.2012, 11:01  [ТС]
в задании еще написано применить эту функцию для интегрирования дифференциального уравнения 3-го порядка:

y^3 + 2y'' + 3y' + y = 5 + x^2

в интервале x [0,2] с шагом delta X = 0,1
и начальными условиями: x=0; y(0) =1; y'(0) = 0,1 ; y''(0) = 0

к сожалению это вся информация которая у меня есть...
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
20.06.2012, 13:58
Цитата Сообщение от DenProx Посмотреть сообщение
в задании еще написано применить эту функцию для интегрирования дифференциального уравнения 3-го порядка:

y^3 + 2y'' + 3y' + y = 5 + x^2

в интервале x [0,2] с шагом delta X = 0,1
и начальными условиями: x=0; y(0) =1; y'(0) = 0,1 ; y''(0) = 0

к сожалению это вся информация которая у меня есть...
а ну вроде теперь больше ясности

тогда y[] - это массив значений производных
а порядок метода тогда четвертый по умолчанию
щас подумаю как сделать

только все равно не понятно как возвращать значение

может представить y[] так: y={Y,y,y',y'',...}?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
20.06.2012, 14:03  [ТС]
vndtta, хм, я думаю так и нужно) хотя не уверен ...
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
20.06.2012, 14:19
Цитата Сообщение от DenProx Посмотреть сообщение
vndtta, хм, я думаю так и нужно) хотя не уверен ...
тогда способа как вернуть расчитанное значение я не знаю
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
20.06.2012, 14:45  [ТС]
а если представить в виде y={Y,y,y',y'',...}, тогда получится ?) я бы был рад любому решению данной задачи)
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
20.06.2012, 14:55
Цитата Сообщение от vndtta Посмотреть сообщение
тогда способа как вернуть расчитанное значение я не знаю
щас пытался функцию f определить

условие какое-то странное

выходит что 1^3 +2*0+3*0.1+1=5+0^2;

как-то не сходится
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
20.06.2012, 14:58  [ТС]
да мне тоже показалось оно странным ...
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
20.06.2012, 15:09
Цитата Сообщение от DenProx Посмотреть сообщение
а если представить в виде y={Y,y,y',y'',...}, тогда получится ?) я бы был рад любому решению данной задачи)
я вот ни как не могу подогнать под теорию такой формат

там либо функции f нужно как-то указать размерность, либо нужно задать массив функций f

это вообще окончательный вариант прототипа? или кое-что поменять можно?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
20.06.2012, 18:20  [ТС]
да я думаю можно поменять, преподу главное чтоб работало)
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
21.06.2012, 08:46
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
void runge_k(
    void f(double *y, double *ys, double t),
    double *y, int n,
    duble tn, double tk,
    int m, double delt)
{
    double k1[n],k2[n],k3[n],k4[n],Yh[n+1];
    double h=delt;
    double* ys=y+n+1;
    double X;
    for(X=tn;X<tk;X+=h){
        f(y,ys,X);
        
        for( int i=0;i<n;i++) k1[i]=h*y[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k1[i];         
        f(Yh,Yh+n+1,X+h*0.5);
        
        for( int i=0;i<n;i++) k2[i]=h*Yh[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k2[i];
        f(Yh,Yh+n+1,X+h*0.5);
        
        for( int i=0;i<n;i++) k3[i]=h*Yh[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+k3[i];
        f(Yh,Yh+n+1,X+h);
        
        for( int i=0;i<n;i++) k4[i]=h*Yh[i+1];
        
        for( int i=0;i<n;i++) y[i]+=1./6.*(k1[i]+2*k2[i]+2*k3[i]+k4[i]);
    }
    h=tk-X;
    f(y,ys,X);
    
    for( int i=0;i<n;i++) k1[i]=h*y[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k1[i];         
    f(Yh,Yh+n+1,X+h*0.5);
    
    for( int i=0;i<n;i++) k2[i]=h*Yh[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k2[i];
    f(Yh,Yh+n+1,X+h*0.5);
    
    for( int i=0;i<n;i++) k3[i]=h*Yh[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+k3[i];
    f(Yh,Yh+n+1,X+h);
    
    for( int i=0;i<n;i++) k4[i]=h*Yh[i+1];
    
    for( int i=0;i<n;i++) y[i]+=1./6.*(k1[i]+2*k2[i]+2*k3[i]+k4[i]);
}
код неахти конечно
тут мне кажется надо еще добавить количество k в зависимости от m

и еще надо подставить твою функцию
для начала перепишем уравнеие в таком виде
y''=-3/2y'-1/2y-1/2y^3+1/2x^2+5/2;

C++
1
2
3
4
5
void f(double *y,double *ys, x)
{
    //int n=(ys-y)/sizeof(double);
    *ys=2.5+0.5*x^2-0.5*y[1]-0.5*y[1]^3-1.5y[2];
}
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
21.06.2012, 08:59  [ТС]
Цитата Сообщение от vndtta Посмотреть сообщение
тут мне кажется надо еще добавить количество k в зависимости от m
а k - это что тут получается?
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
21.06.2012, 09:55
Цитата Сообщение от DenProx Посмотреть сообщение
а k - это что тут получается?
k это прирост на разбиении, типа y'(x)*delta
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
21.06.2012, 12:44  [ТС]
vndtta, хорошо) а данное решение можно считать конечным? или еще есть что то, что требует доработки ?
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
21.06.2012, 14:30
Цитата Сообщение от DenProx Посмотреть сообщение
vndtta, хорошо) а данное решение можно считать конечным? или еще есть что то, что требует доработки ?
нет, нельзя

тут еще надо инициализировать массив y заданными значениями(ну это уже в теле программы а не в функции)
y[0]=0 - это первообразная в точке tn, Y(n);
y[1]=y(tn);
y[2]=y'(tn);
...
y[n]=y'''''''''''''''''''''''''''''''''''''' '''''''''''''''(tn);( n-1 производная )
y[n+1] - считаем функцией f

тут метод рунге-кутты четвертого порядка, откуда порядок взять я не знаю
может вообще второго порядка достаточно
еще не понятно как использовать m
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
21.06.2012, 14:40  [ТС]
хм... а что делать?)
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
21.06.2012, 16:48
Цитата Сообщение от DenProx Посмотреть сообщение
хм... а что делать?)
уточни как-нибудь что за m

ты по-моему еще задание не правильно написал,
мне кажется там не y^3 а y'''
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
21.06.2012, 20:35  [ТС]
vndtta, написал как препод дал 1 в 1 хотя наверно он как раз таки и о печатался , или имел ввиду y'''.

p.s. только что наткнулся на подобную задачу, только решение методом Адамса рассматривается:

120366.rar
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
02.07.2012, 12:42  [ТС]
помогите кто ни будь доделать программку! пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2012, 12:42
Помогаю со студенческими работами здесь

Реализовать решение системы взаимосвязанных дифференциальных уравнений Т*dy/dt=k*x-y методом Рунге-Кутта
Здравствуйте! помогите пожалуйста! мне нужно в матлабе реализовать решение системы одинаковых взаимосвязанных дифференциальных уравнений...

Написать программу решения системы двух дифференциальных уравнений методом Рунге-Кутта
Помогите написать программу системы двух дифференциальных уравнений методом Рунге-Кутта по методике. Вот сам пример

Метод Рунге-Кутта 4-порядка для системы дифференциальных уравнений
Есть система дифференциальных уравнений \frac{dM}{d\xi}=\frac{{R}_{1}-2\xi nМ\Pi}{{R}_{2}}\\ \frac{d\Pi }{d\xi }=\frac{\delta \Pi...

Метод Рунге-Кутта 4-порядка для системы дифференциальных уравнений
Здравствуйте. Помогите мне, пожалуйста. Дана система дифференциальных уравнений и необходимо решить методом Рунге-Кутты 4-го порядка с...

Интегрирование дифференциальных уравнений методом Рунге-Кутта
Помогите, пожалуйста, сделать задание : Создайте М-файл метода численного интегрирования дифференциальных уравнений в соответствии с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru