Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 28

Ошибка при решении системы дифференциальных уравнений через ode23

09.06.2017, 10:01. Показов 1823. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу разобраться с ошибкой при решении системы дифф. уравнений через оператор ode23.
Есть система:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{dM}{d\xi}=\frac{{R}_{M}}{\xi nR}\\<br />
\frac{d\delta }{d\xi }=\frac{\delta {R}_{\delta }}{n\xi (M-\xi )R}\\<br />
\frac{d\Pi }{d\xi }=\frac{\delta (\xi -M){R}_{\Pi }}{n\xi R}\\
Где:
https://www.cyberforum.ru/cgi-bin/latex.cgi?R=\gamma \Pi -\delta {(M-\xi )}^{2}\\<br />
{R}_{M}=-2(n-1)\xi \Pi -2\gamma nM\Pi +(n-1)\xi \delta M(M-\xi )\\<br />
{R}_{\delta }={R}_{M}-2nMR\\<br />
{R}_{\Pi }={R}_{M}-\frac{(n-1)\xi MR}{M-\xi }\\
При:https://www.cyberforum.ru/cgi-bin/latex.cgi?\gamma =\frac{5}{3}\\<br />
n=0.688377\\<br />
\xi=1\leq \xi \lt \infty\\
Ошибка из-за переменных https://www.cyberforum.ru/cgi-bin/latex.cgi?{R}_{M},{R}_{\delta },{R}_{\Pi }, R\\, которые не определены.
Попытался задать их как:https://www.cyberforum.ru/cgi-bin/latex.cgi?y0(1)=R, y0(2)={R}_{M}, y0(3)={R}_{\delta }, y0(4)={R}_{p}\\, но не помогло.
Не очень понятно как их вписать в программу.

Matlab M
1
2
3
4
5
6
7
8
9
function dy=fun(t,y)
dy = zeros(3,1);    % вектор колонка с нулевыми элементами
ksi=[1 10];
n=0.688377;
gam=5./3;
% далее запишем систем ДУ
dy(1) =(y0(2)./(ksi.*n.*y0(1)));
dy(2) =(y(2).*y0(3))./(n.*ksi.*(y(1)-ksi).*y0(1));
dy(3)=(y(2).*(ksi-y(1)).*y0(4))./(n.*ksi.*y0(1));
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clear all; clc;
ksi=[1 10];
n=0.688377;
gam=5./3;
y0(1)=((gam.*y(3))-y(2).*((y(1)-ksi).^2));
y0(2)=-2.*(n-1).*ksi.*y(3)-2.*gam.*n.*y(1).*y(3)+(n-1).*ksi.*y(2).*y(1).*(y(1)-ksi);
y0(3)=y0(2)-2.*n.*y(1).*y0(1);
y0(4)=y0(2)-((n-1).*ksi.*y(1).*y0(1)./(y(1)-ksi));
[T,Y]=ode23(@fun,ksi,n,gam,y0);
figure
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'--')
grid on
title('График искомых функций');
legend('M','P','Del');
xlabel('ksi');
disp('Вывод значений функций')
[Y(:,1),Y(:,2),Y(:,3)]
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2017, 10:01
Ответы с готовыми решениями:

Коррекция переменных при решении системы дифференциальных уравнений
Уважаемые форумчане. Попробую пояснить на примере то, что хотелось бы получить. Есть программа решения ДУ: y0=100; tspan=; ...

Ошибка при решении дифференциальных уравнений
Есть система дифуров, она решается, всё вроде как нормально. Но вот с начальными условиями что-то не так: G=\frac{5c*\exp...

Ошибка при решении системы уравнений
clc clear L=8; R=15;...

6
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
09.06.2017, 10:56
Лучший ответ Сообщение было отмечено Jack Frost как решение

Решение

Полная каша.
С точки зрения постановки задачи, нет определения начальных условий. Тоесть M(1)=? дельта(1)=? П(1)=?
Дальше гамма и n. Если Вы их определяете внутри функции расчета производных (стр.4-5), то оставте их только там и больше нигде ненадо. Есть другой вариант передача их через параметры, но судя по написанному Вами коду, этот вариант надо оставить до будущих времен.
Стр. 3 ksi=[1 10]; из функции выкинуть, ksi поставить в определение функции
Matlab M
1
function dy=fun(ksi,y)
Четко определиться, что у(1) это M, y(2) это дельта, y(3) это П
Используя значения y(1), y(2), y(3) после 5 строки вычислить значения R, RM, RD, RP по приведенным Вами формулам
Далее используя полученные значения R, RM, RD, RP вычислить dy(1), dy(2), dy(3)

Теперь основная функция
1-2 строки правильно
3-4 выкидываем
с 5 и далее надо определить начальные значения в y0(1), y0(2), y0(3) (которых нет в описании задачи)
Далее собственно решение, для начала допустим так
Matlab M
1
[T,Y]=ode23(@fun,ksi,y0);
Отрисовка более менее нормально
1
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 28
09.06.2017, 11:53  [ТС]
Спасибо за ответ!
с 5 и далее надо определить начальные значения в y0(1), y0(2), y0(3) (которых нет в описании задачи)
Как я понял в первой части мы определили R, RM, RD, RP с помощью y(1), y(2), y(3).

Во второй части мы получается задаем R, RM, RD, RP с помощью y0(1), y0(2) , y0(3) , y0(4) т.е. y0(1)=R, y0(2)=RM,y0(3)=RD,y0(4)=RP ??
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
09.06.2017, 12:38
Цитата Сообщение от Jack Frost Посмотреть сообщение
Во второй части мы получается задаем R, RM, RD, RP с помощью y0(1), y0(2) , y0(3) , y0(4) т.е. y0(1)=R, y0(2)=RM,y0(3)=RD,y0(4)=RP ??
Неправильно. y0(4) не должно быть

Добавлено через 18 минут
В y0 должны быть начальные значения по переменным M дельта и П при кси равном 1, а не вспомогательным переменным для определения производных
1
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 28
09.06.2017, 12:48  [ТС]
Но нам же нужно определить RP.
А RP определяется
Upd.
Не увидел дополнение

Добавлено через 6 минут
Т.е. y0(1)=M, y0(2)=Delta, y0(3)=P?
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
09.06.2017, 13:33
Цитата Сообщение от Jack Frost Посмотреть сообщение
Т.е. y0(1)=M, y0(2)=Delta, y0(3)=P?
Да, должны быть начальные условия.
Это например как в задаче моделирования движения автомобиля, есть уравнения для нахождения производных по расстоянию и скорости. Но в начальный момент моделирования автомобиль должен где-то быть (координата по расстоянию), и иметь какую-то скорость. И тогда от этой точки можно решать.
1
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 28
14.06.2017, 21:00  [ТС]
Собственно, вы были абсолютно правы.
В статье нашел начальные данные: y0(1)=M=0.75, y0(2)=Delta=4, y0(3)=P=0.75.
Спасибо за помощь!

Выкладываю окончательное решение, вдруг кому пригодится.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
function dy=fun(ksi,y)
dy = zeros(3,1);   % вектор колонка с нулевыми элементами
n=0.688377;
gam=5./3;
R=((gam.*y(3))-y(2).*((y(1)-ksi).^2));
Rm=-2.*(n-1).*ksi.*y(3)-2.*gam.*n.*y(1).*y(3)+(n-1).*ksi.*y(2).*y(1).*(y(1)-ksi);
Rdel=Rm-2.*n.*y(1).*R;
Rp=Rm-((n-1).*ksi.*y(1).*R./(y(1)-ksi));
%Запишем систему ДУ
dy(1) =(Rm./(ksi.*n.*R));
dy(2) =(y(2).*Rdel)./(n.*ksi.*(y(1)-ksi).*R);
dy(3)=(y(2).*(ksi-y(1)).*Rp)./(n.*ksi.*R);
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear all; clc;
ksi=[1 10];
y0(1)=0.75;
y0(2)=4;
y0(3)=0.75;
[T,Y]=ode23(@fun,ksi,y0);
figure
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'--')
grid on
title('График искомых функций');
legend('M','Del','P');
xlabel('ksi');
disp('Вывод значений функций')
[Y(:,1),Y(:,2),Y(:,3)]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2017, 21:00
Помогаю со студенческими работами здесь

Ошибка при решении системы дифференциальных уравнений
Решаю систему диффуров первого порядка с помощью Odesolve. получил ошибку: Encountered too many integrator steps ...

Ошибка при решении системы дифференциальных уравнений
Помогите, пожалуйста! Выдает следующую ошибку:Error, (in dsolve) invalid arguments to coeffs Необходимо решить данную систему...

Ошибка при решении системы дифференциальных уравнений
Добрый день! При решении системы диф. уравнений в Mathcad Prime 4.0 было получено следующее сообщение об ошибке &quot;Неизвестная...

Ошибка при решении системы дифференциальных уравнений
Здравствуйте! Пытаюсь решить такую систему и выдает ошибку. При этом одно из слагаемых (Pdn(t)) задано в виде кусочно-линейной функции....

Ошибка при решении системы дифференциальных уравнений в маткаде
Здравствуйте, необходимо решить систему из двух дифференциальных уравнений. Аргумент является комплексно сопряженным ζ и η....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru