Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Страница 1 из 1 |
[ Сообщений: 5 ] |
|
Автор | Сообщение | |
---|---|---|
rog892775 |
|
|
formula1.m function dy=formula1(t,y) dy=zeros(1,1); dy(1)=-196323,98*10^(-18)*y(1)*t; formula3.m function dy=formula3(t,y) sigmaa5=678,5*10^(-24); fi0=578,7*10^6; epsilon1=0,5; dy=zeros(1,1); dy(1)=-sigmaa5*y(1)*fi0*epsilon1*t; Вызываю с помощью formula2.m y0=[1]; tspan=[0:20:365]; [t,y]=ode45('formula3',tspan,y0); plot(t,y); grid on; Соответственно 'formula3' заменяется на 'formula1' по необходимости. |
||
Вернуться к началу | ||
Xmas |
|
|
Похоже на проблемы с потерей точности. DY отличается от Y на 13 порядков, а число double в машинном представлении хранит 16 порядков. То есть, у Вас при численном интегрировании в сложение попадают только 3 десятичных разряда с погрешностью до 0,01 на каждом шаге. Это слишком мало для численного интегрирования, результат может оказываться вообще в стороне.
У меня, например, для Вашего примера получается вообще ровный график, y[0]=1 и всё тут. |
||
Вернуться к началу | ||
rog892775 |
|
|
Благодарю за ответ. Видимо, стоит отказаться от переменных. В оригинале у меня система из 5 дифференциальных уравнений, в которых почти все константы заданы переменными. Придется заранее подставлять конечные числовые значения.
[math]\frac{ x }{ t }[/math]=-sigmaa5*x*fi(t); [math]\frac{ y }{ t }[/math]=-sigmaa8*y*fi(t)-mu(1-fi)(nuf5*sigmaf5*x+nuf9*sigmaf9*z+nuf1*sigmaf1*p); [math]\frac{ z }{ t }[/math]=mu(1-fi)(nuf5*sigmaf5*x+nuf9*sigmaf9*z+nuf1*sigmaf1*p)+sigmaa8*y*fi(t)-sigmaa9*z*fi(t); [math]\frac{ q }{ t }[/math]=sigmac9*z*fi(t)-sigmaa0*q*fi(t); [math]\frac{ p }{ t }[/math]=sigmac0*q*fi(t)-sigmaa1*p*fi(t). Константы: sigmaa0=289,6*10^(-24); sigmaa1=1378*10^(-24); sigmaa5=678,5*10^(-24); sigmaa8=275*10^(-24); sigmaa9=1012,9*10^(-24); sigmac0=289,5*10^(-24); sigmac9=267,2*10^(-24); sigmaf1=1007,3*10^(-24); sigmaf5=580*10^(-24); sigmaf9=741,6*10^(-24); nuf1=2,15; nuf5=2,07; nuf9=2,11; mu=1,01; fi=0,8. Начальные условия: x(0)=1; y(0)=50; z(0)=0; q(0)=0; p(0)=0. fi0=578703703,70; e1=0,5; e2=1,5; e3=1. После подстановки окончательных числовых выражений для периода e1 получается следующие графики: function dy=formula1(t,y) dy=zeros(5,1); dy(1)=-196323,98*10^(-18)*y(1)*t; dy(2)=-79571,25*10^(-18)*y(2)*t-242,52*10^(-24)*y(1)-316,08*10^(-24)*y(3)-437,47*10^(-24)*y(5); dy(3)=242,52*10^(-24)*y(1)+316,08*10^(-24)*y(3)+437,47*10^(-24)*y(5)+79571,25*10^(-18)*y(2)*t-293082,62*10^(-18)*y(3)*t; dy(4)=77314,32*10^(-18)*y(3)*t-83795,76*10^(-18)*y(4)*t; dy(5)=83766,83*10^(-18)*y(4)*t-398724,30*10^(-18)*y(5)*t); Имеется алгоритм действий для любого количества промежутков dt с различными e, задаваемыми через консоль: 1). Ввести значение tk, обозначающее конечное время; 2). Ввод tk1, tk1+tk2, tk1+tk2+tk3, ..., [math]\sum\limits_{1}^{n}[/math]tkn, обозначающих конечные значения времени для промежутков функции fi(t), на которых функция ведет себя неизменно; 3). Ввод e1, e2, e3, ..., en, соответствующих промежуткам времени [0,tk1), [tk1,tk1+tk2), [tk1+tk2,tk1+tk2+tk3),...,[...,[math]\sum\limits_{1}^{n}[/math]tkn); 4). Последовательное сравнение tk и tk1, tk и tk1+tk2, tk и tk1+tk2+tk3 и т. д. до тех пор, пока не будет найден tki<=[math]\sum\limits_{1}^{i}[/math]tki; 5). Вычисление fi(t)=fi0*(tk1*e1+(tk1+tk2)*e2+(tk1+tk2+tk3)*e3+...+(tk-[math]\sum\limits_{1}^{i}[/math]tkn)*e'i+1'). Прошу помочь реализовать данный алгоритм в MatLab или подсказать более простой способ решения. Условие: система ДУ должна решаться методом Рунге-Кутта 4 порядка. |
||
Вернуться к началу | ||
Xmas |
|
|
В коэффициентах точно нет опечатки? Очень уж нетипичная степень, "минус 24". Даже атом углерода (0,3 нм) по сравнению с расстоянием от Земли до Солнца (150 млн. км) - это разница в 20 степеней, а тут - 24. Обычные наши процессоры (32/64 разряда) не могут складывать числа с такой разницей.
Можете выложить исходное задание? |
||
Вернуться к началу | ||
rog892775 |
|
|
Степень правильная: 1 барн = [math]10^{-24}[/math], на втором рисунке приведены значения коэффициентов. Само задание: Разработать программную систему для исследования процесса изменения изотопного состава ядерного реактора. В качестве численного метода решения системы уравнений использовать метод Рунге-Кутта. На Рис. 9.3.3 представлена система из 4-х уравнений, в моем случае добавлено уравнение для U238. В результате должен получиться график, представленный на Рис. 9.4.
[url=http://forumimage.ru/show/105673749][img] |
||
Вернуться к началу | ||
[ Сообщений: 5 ] |
Похожие темы | Автор | Ответы | Просмотры | Последнее сообщение |
---|---|---|---|---|
Решение дифференциального уравнения в Matlab
в форуме MATLAB |
2 |
600 |
14 апр 2017, 17:09 |
|
Решение уравнения теплопроводности в matlab-е
в форуме Специальные разделы |
0 |
1014 |
03 мар 2016, 15:06 |
|
Частное решение дифференциального уравнения\общее решение | 5 |
762 |
06 май 2014, 19:13 |
|
Решение дифференциального уравнения | 3 |
257 |
17 янв 2022, 19:35 |
|
Решение дифференциального уравнения | 2 |
479 |
08 фев 2017, 15:32 |
|
Решение Дифференциального уравнения | 7 |
371 |
28 дек 2022, 22:49 |
|
Решение дифференциального уравнения | 0 |
252 |
07 июн 2015, 12:25 |
|
Решение дифференциального уравнения | 1 |
372 |
07 июн 2015, 12:24 |
|
Решение дифференциального уравнения | 1 |
397 |
07 июн 2015, 12:27 |
|
Найти решение дифференциального уравнения | 12 |
368 |
09 июн 2020, 19:03 |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |