0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6

Решение дифференциального уравнения методом Эйлера и методом Рунге-кутта 4 порядка

11.06.2014, 00:21. Показов 23142. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить уравнение y''-4y'+5y=2x2ex , методом Эйлера и методом Рунге-кутта 4 порядка , буду очень благодари
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2014, 00:21
Ответы с готовыми решениями:

Решение дифференциального уравнения методом Эйлера и методом Рунге-кутта
Помогите пожалуйста решить уравнение у' = 1 + х sin y, y(π) = 2π , методом Эйлера и методом Рунге-кутта, буду очень благодарен

Решение дифференциального уравнения второго порядка методом Рунге-Кутта
Помогите наисать программу в матлабе для решения следующего уравнения: y''+0.6935y'=0 y0=0 y'0=0.6932 x∈ Надо решить через ode45

Решение дифференциального уравнения второго порядка методом Рунге-Кутта
Доброй ночи, форумчани! Помогите наисать программу в матлабе для решения следующего уравнения: x2y''-xy'=0 y(1)=0; y'(1)=1; X...

40
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
11.06.2014, 09:22
Вот, практически твое задание
Численное решение дифференциальных уравнений
0
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6
12.06.2014, 01:07  [ТС]
огромное спасибо , а то лазил по форуму , а это не заметил =)

Добавлено через 14 часов 40 минут
у меня вопрос : В методе Рунге-Кутта ты дал код

Matlab M
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
clear, clc
h = 0.05; % шаг
a = 0; % нижний предел
b = 0.5; % верхний предел
 
% функция системы:
dsys = @(x,y,dy) [dy;
        2*exp(-x)*cos(x)-2*dy-2*y];
 
T = a:h:b; % массив времени
% инициализируем массив значений:
Y = zeros(size(T)); 
dY = zeros(size(T));
% начальные условия:
Y(1) = 1; 
dY(1) = 0;
% начинаем Рунге-Куттить ;)
for j=1:length(T)-1
    k1=h*dsys(T(j), Y(j), dY(j));
    k2=h*dsys(T(j)+h/2, Y(j)+k1(1)/2, dY(j)+k1(2)/2 );
    k3=h*dsys(T(j)+h/2, Y(j)+k2(1)/2, dY(j)+k2(2)/2);
    k4=h*dsys(T(j)+h, Y(j)+k3(1), dY(j)+k3(2) );
    dU = (k1+2*k2+2*k3+k4)/6;
    Y(j+1)=Y(j) + dU(1);
    dY(j+1)=dY(j) + dU(2);
end 
plot(T,Y, T,dY)
legend('y(x)','dy/dx')
но мы же разбиваем на да уравнение , и разве нам не надо искать по 4 К для каждого из них (т.е. всего у нас разве не 8 к должно получиться)???
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
12.06.2014, 12:03
Zestokiu_Xarek, тут есть хитрость
дело в том, что в функция написана так, что рассчитываются и возвращаются сразу два результата, для каждого из уравнений! поэтому коэф-ты Ki и приращение dU содержат два значения для каждого из уравнений (потом к Y прибавляется первый элемент dU(1), а к dY прибавляется второй элемент dU(2) )
поэтому К четыре, а не восемь
0
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6
12.06.2014, 13:20  [ТС]
а зачем в этой строчке ты создаешь просто тьму нулей ?
Matlab M
1
2
Y = zeros(size(T)); 
dY = zeros(size(T));
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
12.06.2014, 14:39
Zestokiu_Xarek, это стандартный прием для увеличения быстродействия: инициализировать массив до того как. Иначе на каждом шаге цикла будет добавляться новый элемент, т.е. физически в памяти будет создаваться новая переменная и уничтожатся старая (это занимает время), а в моем случае под переменную уже выделен шмат памяти
0
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6
15.06.2014, 22:39  [ТС]
а как сделать в методе Рунге-кутта , чтобы для каждой функции были свои К и еще вопрос , не обязательно отдельной строчкой выводить функцию ,
Matlab M
1
2
dsys = @(x,y,dy) [dy;
        2*exp(-x)*cos(x)-2*dy-2*y];
, а можно написать в самой строчке программы ? здесь
Matlab M
1
 k1=h*dsys(T(j), Y(j), dY(j))
Добавлено через 11 минут
столько вопросов потому что преподаватель не понравилась прога =)
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.06.2014, 22:40
Цитата Сообщение от Zestokiu_Xarek Посмотреть сообщение
а как сделать в методе Рунге-кутта , чтобы для каждой функции были свои К
тогда нужно 8 раз считать К
Цитата Сообщение от Zestokiu_Xarek Посмотреть сообщение
не обязательно отдельной строчкой выводить функцию
хм, впринципе можно но опять же - ее придется переписывать 8 раз
0
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6
15.06.2014, 22:55  [ТС]
и получаеться ты оба уравнения занес сюда
Matlab M
1
2
dsys = @(x,y,dy) [dy;
        2*exp(-x)*cos(x)-2*dy-2*y];
и поэтому он так его легко считал ?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.06.2014, 22:56
да
1
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 6
15.06.2014, 22:59  [ТС]
спасибо очень помог и извини за тупые вопросы
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.06.2014, 23:03
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

та ничего
вот, гляди какая штука получается:
Matlab M
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
clear, clc
h = 0.05; % шаг
a = 0; % нижний предел
b = 0.5; % верхний предел
 
T = a:h:b; % массив времени
% инициализируем массив значений:
Y = zeros(size(T)); 
dY = zeros(size(T));
% начальные условия:
Y(1) = 1; 
dY(1) = 0;
% начинаем Рунге-Куттить ;)
for j=1:length(T)-1
    % Y(j+1):
    K11 = dY(j);
    K12 = dY(j)+K11/2;
    K13 = dY(j)+K12/2;
    K14 = dY(j)+K13;
    Y(j+1) = Y(j) + h*(K11+2*K12+2*K13+K14)/6;
    % dY(j+1):
    K21 = 2*T(j)^2*exp(T(j))+4*dY(j)-5*Y(j);
    K22 = 2*(T(j)+h/2)^2*exp(T(j)+h/2)+4*(dY(j)+K21/2)-5*(Y(j)+K21/2);
    K23 = 2*(T(j)+h/2)^2*exp(T(j)+h/2)+4*(dY(j)+K22/2)-5*(Y(j)+K22/2);
    K24 = 2*(T(j)+h)^2*exp(T(j)+h)+4*(dY(j)+K23)-5*(Y(j)+K23); 
    dY(j+1) = dY(j) + h*(K21+2*K22+2*K23+K24)/6;
end 
plot(T,Y, T,dY)
legend('y(x)','dy/dx')
*а функцию я отдельно выписал не просто так, а чтобы можно было проверить с помощью встроенной решалки ode45
0
7 / 7 / 6
Регистрация: 11.04.2013
Сообщений: 30
22.06.2014, 00:12
Зосима, Здравствуйте, мне нужно написать программу в Matlab для решения ОДУ методом Рунге-Кутты четвертого порядка.
Я не совсем понимаю, в чем суть этого метода. И еще, я не силен в ДУ, хоть и учусь на математика
Вы, как знающий человек, не могли бы сделать краткий экскурс в эту тему
0
 Аватар для Krasme
7244 / 5097 / 2151
Регистрация: 02.02.2014
Сообщений: 13,455
22.06.2014, 08:16
Fleury29, краткий экскурс в эту тему
0
7 / 7 / 6
Регистрация: 11.04.2013
Сообщений: 30
22.06.2014, 09:00
Krasme, Если бы я все это понял, то я бы здесь не писал.
Т.е. в качестве начальной точки берем х0? А в кач-ве конечной любое число?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.06.2014, 14:27
Fleury29, конец интервала тоже должен быть задан.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
22.06.2014, 17:23
Fleury29, о-ля-ля! дружочек, я и сам-то не математик и даже не программист - в свои неполные 30 лет только метод Эйлера понял
Как я понял, заковырка этого метода заключается в расчете 4-х коэфф-тов (поэтому то и "4-го порядка") К1-К4, почему они считаются именно так я не знаю причем, что любопытно, расчеты ведутся еще и в середине интервала (T(j)+h/2) (спинным мозгом чувствую, что ноги растут из формулы численного дифференцирования по трем точкам) а затем усредняется (K1+2*K2+2*K3+K4)/6 (это как-бы значение производной) и как в методе Эйлера умножается на шаг h и прибавляется к предыдущему значению функции Y(j)
В данном методе, как и в методе Эйлера, задается интервал значений x: [x0, x1], и значение функции в начальной точке y(x0), от которого уже начинаем плясать
1
7 / 7 / 6
Регистрация: 11.04.2013
Сообщений: 30
22.06.2014, 19:39
А если так написать то правильно будет?

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clear, clc
h = 0.1; % шаг
a = -1; % нижний предел
b = 1; % верхний предел
 
x = a:h:b;
 
y = zeros(size(x));
for j=1:length(x)-1
    k1=h*(x(j)-y(j));
    k2=h*(x(j)+h/2-y(j)+k1(1)/2);
    k3=h*(x(j)+h/2-y(j)+k2(1)/2);
    k4=h*(x(j)+h-y(j)+k3(1));
    dU = (k1+2*k2+2*k3+k4)/6;
    y(j+1)=y(j) + dU;
end 
 
plot(x,y);
legend('y(x)');
У меня ДУ такое: dy/dx=x-y, h=0,1, начальные условия не даны

График:
0
 Аватар для Krasme
7244 / 5097 / 2151
Регистрация: 02.02.2014
Сообщений: 13,455
22.06.2014, 19:44
Fleury29, вы не хотите пользоваться готовым образцом?
0
7 / 7 / 6
Регистрация: 11.04.2013
Сообщений: 30
22.06.2014, 20:01
Krasme, мне вручную надо написать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2014, 20:01
Помогаю со студенческими работами здесь

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

Решение уравнения численно, методом Рунге-Кутта, или Эйлера
Подскажите пожалуйста, как решить задачу. Как я понял, нужно всего лишь получить численное решение уравнения методом Рунге-Кутта, или...

Решение дифференциального уравнения второго порядка методом Эйлера
Здравствуйте! Столкнулся с проблемой решения дифференциального уравнения второго порядка методом Эйлера. С решением первого порядка никаких...

Решение дифференциального уравнения методами Эйлера и Рунге-Кутты четвертого порядка
Суть задания такова: Решить методами Эйлера и Рунге – Кутты четвертого порядка на отрезке дифференциальное уравнение y'=x^2+y^2 при ...

Решение системы ДУ 4-го порядка методом Рунге-Кутта
Необходимо решить данную систему методом Рунге-Кутта. Шаг по времени 0.001. Помогите, пожалуйста, реализовать в matlab. Уже который день...


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

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

Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru