Разное

Ode45 matlab пример: 404 — страница не найдена

Содержание

Решение ОДУ в Matlab — CodeTown.ru

Доброго времени суток! Сегодня мы поговорим о решении ОДУ (обыкновенных дифференциальных уравнений) в Matlab. Перед тем как мы начнём обсуждать данную тему, советую вам ознакомиться с темой: Численное дифференцирование в Matlab, чтобы лучше понимать теоретическую составляющую решения ОДУ.

Обыкновенные дифференциальные уравнения

С помощью дифференциальных уравнений можно описать разные задачи: движения системы, взаимодействующих материальных точек, химической кинетики и т.д. Различают три типа задач для систем диф. уравнений:

  • Задача Коши
  • Краевая задача
  • Задача на собственные значения

Кратко расскажу о их сути:

Задача Коши предполагает дополнительные условия в виде значения функции в определённой точке.
Краевая задача подразумевает поиск решения на заданном отрезке с краевыми (граничными) условиями в концах интервала или на границе области.
Задача на собственные значения — помимо искомых функций и их производных, в уравнение входят дополнительное несколько неизвестных параметров, которые являются собственными значениями.

Методы решения дифференциальных уравнений

Решение ОДУ в Matlab и не только, в первую очередь, сводится к выбору порядка численного метода решения. Порядок численного метода не связан с порядком дифференциального уравнения. Высокий порядок у численного метода означает его скорость сходимости.

В случае большого интервала, с помощью алгоритмов с низким порядком сжимают интервал с решениями и находят приблизительные корни, а затем уже уточняют корни с помощью методов с высоким порядком.

Решение обыкновенных дифференциальных уравнений в Matlab можно реализовать «своими ручками», прописав алгоритм по разным схемам. Но также в Matlab есть встроенные функции, выполняющие все стандартные задачи.

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

yi+1 = yi + h*f(xi, yi)

Методы Рунге-Кутта представляют собой разложения в ряд Тейлора и от количества использованных элементов ряда зависит порядок этого метода. Следовательно, помимо Рунге-Кутта первого порядка, вы сможете увидеть методы других порядков. Иногда их называют другими именами.

Например, Метод Рунге-Кутта первого порядка, также известен как Метод Эйлера или Метод ломаных. Информацию о его математическом и графическом представлении советую поискать в гугл. Мы же поговорим о том, как Метод Рунге-Кутта первого порядка реализуется в Matlab для решения ОДУ. Например:

Решить и привести график ошибки уравнения y' = y*x методом Рунге-Кутта первого порядка (Методом Эйлера, Методом ломаных).

Setka=10:10:10000;
for k=1:length(Setka)
    %определяем параметры сетки
    N=Setka(k); h=1.0/(N-1);
    %задаем начальное условие
    y(1)=1;
    %применяем алгоритм метода ломаных/Эйлера
    for n=1:(N-1)
        y(n+1)=y(n)+ h*((n-1)*h*y(n)); %где (n-1)*h -> x
    end
    %вычисляем величину M(1) в оценке
    %погрешности численного решения
    M(k)=abs(y(N)-exp(0.5))/h;
    step(k)=h;
end
%рисуем зависимость величины M(1) от шага
plot(step,M);


На данном графике показана зависимость величины ошибки от шага.

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

yi+1 = yi + (h/2)*f(xi, yi) + (h/2)*f(xi+1, yi+1)

Также известен как Метод Эйлера-Коши. Как видите, во второй части уравнения происходит обращения к следующему шагу. Но как тогда быть, если нам ещё не известен следующий шаг? Всё просто. Метод Рунге-Кутта второго порядка — это всё тот же метод первого порядка, однако, на половине шага происходит нахождение «первичного» решения, а затем происходит его уточнение. Это позволяет поднять порядок скорости сходимости до двух.

Решить и привести график ошибки уравнения u' = u*x методом Рунге-Кутта второго порядка.

f=@(x,u)x*u;
%задаем набор сеток
Setka=10:50:10000;
%организуем цикл расчетов с разными сетками
for k=1:length(Setka)
    N=Setka(k); h=1.0/(N-1);
    %задаем начальное условие
    y(1)=1;
    %вычисляем приближенные значения решения
    %дифференциального уравнения
    for n=1:(N-1)
        x(n)=(n-1)*h;
        y(n+1)=y(n)+h*(0. 2;
    step(k)=h;
end
%рисуем зависимость константы M от шага сетки h
plot(step,M);


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

Мы не будем говорить о третьем порядке, потому что задачи на третий порядок встречаются редко, но если будет необходимо, пишите в комментариях, выложу.

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

T1 = h*f(xi, yi)
T2 = h*f(xi + h/2, yi + T1/2)
T3 = h*f(xi + h/2, yi + T2/2)
T4 = h*f(xi + h/2, yi + T3)
yi+1 = yi + (T1 + 2*T2 + 2*T3 + T4)/6

Метод Рунге-Кутта четвёртого порядка считается самым распространённым. Тем не менее, работает он аналогично второму и третьему порядку.

Решить и привести график ошибки уравнения u' = u*x методом Рунге-Кутта четвёртого порядка. 4; step(k)=h; end %рисуем зависимость константы M от шага сетки h loglog(step,M);


Как видите, на последней картинке размерность ошибки на столько мала, что пришлось воспользоваться

loglog() для лучшей видимости.

Решение ОДУ в Matlab стандартными средствами

Стоит отметить, что мы с вами разобрали только один самый известный метод решения ОДУ с разными порядками. Однако, методов очень много.

Для решения дифференциальных уравнений и систем в MATLAB предусмотрены следующие функции:

ode45 (f, interval, X0, [options])
ode23 (f, interval, X0, [options])
ode113 (f, interval, X0, [options])
ode15s (f, interval, X0, [options])
ode23s (f, interval, X0, [options])
ode23t (f, interval, X0, [options])
ode23tb (f, interval, X0, [options])

Входными параметрами этих функций являются:

  • массив Т — координаты узлов сетки, в которых ищется решение;
  • матрицу X, i-й столбец которой является значением вектор-функции решения в узле Тi.

В функции ode45 реализован метод Рунге-Кутта 4-5 порядка точности, в функции ode23 также реализован метод Рунге-Кутта, но 2-3 порядка, а функция ode113 реализует метод Адамса.

Для решения жёстких систем предназначены функция ode15s, в которой реализован метод Гира, и функция ode23s, реализующая метод Розенброка. Для получения более точного решения жёсткой системы лучше использовать функцию ode15s. Для решения системы с небольшим числом жёсткости можно использовать функцию ode23t, а для грубой оценки подобных систем служит функция ode23tb.

Символьное решение обыкновенных дифференциальных уравнений произвольного порядка осуществляет функция dsolve r = dsolve(‘eq1,eq2,…’, ‘cond1,cond2,…‘, ‘v’)
Пример использования:

% в отдельном М-файле с именем pr10
function f=pr10(x,y)
f=sin(x+y)+(3/2)*(x-y);
end)

%в основном М-файле
ode113(@pr10,[0 20],0) %Метод Адамса: @pr10 – ссылка на М-функцию,
% [0 20]- интервал, 0 - условие: y(0)=0
%пример (u'=u^2)
expl=dsolve('Du=u^2','x')

На этом мы закончим. Если остались вопросы, задавайте их в комментариях. Также вы можете скачать исходники чтобы лучше понять тему: «Решение ОДУ в Matlab».

Скачать исходник Рунге-Кутт первого порядка
Скачать исходник Рунге-Кутт второго порядка
Скачать исходник Рунге-Кутт четвёртого порядка

Поделиться ссылкой:

Похожее

MATLAB: ode45 уменьшить шаг по времени : Околонаучный софт

0.0000000000
0.0000000000

0.0000000000                    0.0000000000                    0.0000000000

0.0000000000
0.0000401902
0.0000602853
0.0001607607
0.0001786230
0.0002009509
0.0002009509

0.0000003305                    0.0000003305                    0.0002009509

0.0004019018
0.0005023773
0.0010047545
0.0010940660
0.0012057054
0.0012057054

0.0000016523                    0.0000019827                    0.0010047545

0.0022104598
0.0027128369
0.0052247222
0. 0056712795
0.0062294760
0.0062294760

0.0000082613                    0.0000102440                    0.0050237706

0.0112532452
0.0137651264
0.0263245287
0.0285573093
0.0313482843
0.0313482843

0.0000413063                    0.0000515503                    0.0251188083

0.0564670551
0.0690263562
0.1318227680
0.1429865255
0.1569412016
0.1569412016

0.0002065316                    0.0002580819                    0.1255929173

0.2825331822
0.3453270649
0.6592941379
0.7151092815
0.7848776896
0.7848776884

0.0010326581                    0.0012907400                    0.6279364868

1.4127907600
1.7266946137
3.2961554568
3.5751401876
3.9238579529
3.9238578044

0.0051632905                    0.0064540305                    3.1389801160

7.0622527934
8.6301340106
16.4680913511
17.8607542621
19.6012403545
19.6012217905

0. 0258164525                    0.0322704830                    15.6773639861

35.2639891437
43.0625625881
82.0206864811
88.9292188069
97.5545949924
97.5522751215

0.1290822623                    0.1613527453                    77.9510533310

175.1423083732
213.1289720223
402.3717078532
435.7580649269
477.0209721727
476.7316431629

0.6454113115                    0.8067640568                    379.1793680413

847.3446280930
1013.8225832057
1847.6555148882
2009.8802476503
2176.5793323451
2141.4535728529

3.2270565576                    4.0338206144                    1664.7219296900

2800.9538199422
3063.0756903989
4433.3697267978
4799.0971723915
5038.6189409162
4804.0802582112

7.1200673757                    11.1538879901                   2662.6266853583

5434.9652711803
5656.6559107268
6832.0213636691
7193.5531320163
7364. 2190028135
7061.6869136330
5295.9609793593
5484.9112810373
6448.5703071120
6682.8819885856
6840.8816961647
6702.6134058340

8.2608543401                    19.4147423302                   1898.5331476228

6981.7597032552
7080.3121895578
7566.2383797687
7672.2836422551
7742.9281311347
7682.0878984657

8.2608543401                    27.6755966703                   979.4744926317

7859.1445930339
7879.4256427592
7932.6963416713
7937.3234266962
7880.1698679553
7828.8031721915

12.1255376422                   39.8011343125                   146.7152737258

-4.8257370574                   34.9753972551                   116.8605562235

-0.0284745594                   34.9469226957                   0.0041439110

-0.0008657073                   34.9460569884                   0.0000003031

0.0004261226                    34.9464831110                   0.0000007777

-0. 0000000001                   34.9464831109                   0.0000000000

-0.0002130613                   34.9462700497                   -0.0000001642

0.0001065306                    34.9463765803                   0.0000001383

0.0001065306                    34.9464831109                   0.0000000260

0.0000000000                    34.9464831109                   0.0000000000

0.0000000000                    34.9464831109                   0.0000000000

7683.1111477324
7507.0688789013
6480.3829575771
6209.2792932885
5872.0576715831
5910.2155184975

19.9475191301                   54.8940022410                   -2035.4523549093

5326.1495763571
4920.5504879568
2478.4563320469
1707.2055390496
1029.9047716445
1384.2599919859

13.7570499716                   68.6510522126                   -4525.9555265115

-2.6032333465
864.1862824863
Error using get_env (line 28)
Текущая высота -38073 м выходит за границы диапазона -2:15 км

python — Вызов ODE45 Матлаба из питона

Я хотел бы вызвать функцию Matlab ode45 из Python точно так же, как в следующем коде Python вызывается функция isprime () MATLAB.

import matlab.engine
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)

Но я не знаю, как реализовать код на Python. я пробовал

import matlab.engine

def  dydt(t,y):
              dydt= 2*y
              return dydt
          
eng = matlab.engine.start_matlab()
T,Y=eng.ode45(dydt,[0, 20],[2, 0])

И он вернулся:

строка 73, в вызове out = _stdout, err = _stderr)

Ошибка типа: неподдерживаемый тип данных Python: функция.

Я уже установил MATLAB Engine API для Python по следующей ссылке https: //www.mathworks. com / help / matlab / matlab_external / install-the-matlab-engine-for-python.html и успешно протестировал его, используя примеры по следующей ссылке https://www.mathworks.com/ help / matlab / matlab_external / call-matlab-functions-from-python.html.

Я нашел следующую ветку, которая может быть актуальной Имитировать функцию ode45 из MATLAB в Python но из того, что я вижу, они просто использовали библиотеки python для решения ODE и не вызывают ODE45 MATLAB из python. Может я просто не правильно это понимаю.

Может ли кто-нибудь помочь мне добиться прогресса в этом вопросе? Спасибо!

1

FinX 17 Окт 2019 в 11:55

2 ответа

Лучший ответ

Воспроизведение примера из doc:

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval('tspan = [0 5];',nargout = 0)
eng.eval('y0 = 0;',nargout = 0)
t,y=eng.eval('ode45(@(t,y) 2*t, tspan, y0)',nargout = 2)

Теперь вы можете также представить результаты:

eng.plot(t,y,'-o')

0

Paolo 17 Окт 2019 в 15:28

Вы можете использовать {{ X0}} или, возможно, предпочтительно, scipy. integrate.solve_ivp():

from scipy.integrate import solve_ivp
def exponential_decay(t, y): return -0.5 * y
sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8])
print(sol.t)
# [  0.           0.11487653   1.26364188   3.06061781   4.85759374
#    6.65456967   8.4515456   10.        ]
print(sol.y)
# [[2.         1.88836035 1.06327177 0.43319312 0.17648948 0.0719045
#   0.02929499 0.01350938]
#  [4.         3.7767207  2.12654355 0.86638624 0.35297895 0.143809
#   0.05858998 0.02701876]
#  [8.         7.5534414  4.25308709 1.73277247 0.7059579  0.287618
#   0.11717996 0.05403753]]

(пример из официального документа.)

0

norok2 17 Окт 2019 в 09:19

Численное решение уравнений биокинетики в курсах «Общая экология» и «Моделирование биологических процессов»


Численное решение уравнений биокинетики в курсах «Общая экология» и «Моделирование биологических процессов»  Том I. Обыкновенные дифференциальные уравнения: учебное пособие, электронное издание сетевого распространения / коллектив авторов. — М.: «КДУ», «Добросвет», 2018.

ISBN  978-5-7913-1079-8

Описаны алгоритмы решения различных задач биологической кинетики в программной среде MATLAB. Рассмотрены общие алгоритмы решения обыкновенных дифференциальных уравнений, описан имеющийся набор средств для их решения в среде MATLAB в зависимости от типа задачи. Детально рассмотрено явление жёсткости систем уравнений решае-
мых задач, способное существенно затруднить правильное решение задач. Даны реальные примеры возникающих в научной практике задач биологической кинетики и их решение в виде кода на языке MATLAB. Учебное пособие ориентировано на широкий круг читателей-биологов, от студентов начальных курсов до научных сотрудников, решивших привлечь математический аппарат к решению своих задач.

Авторы: М.В. Глаголев, Е.В. Фаустова, А.Ф. Сабреков, И.Е. Терентьева

Рецензенты: Мамихин Сергей Витальевич – ведущий научный сотрудник, доктор биологических наук;  Шеин Евгений Викторович – доктор биологических наук, профессор

Рекомендовано Учебно-методической комиссией факультета почвоведения МГУ имени М. В. Ломоносова в качестве учебно-методического пособия для студентов, обучающихся по стандартам МГУ, по направлениям подготовки «Почвоведение», «Экология и природопользование»

УДК    519.62 (075.8)
ББК    22.193я73

© Коллектив авторов, 2018
© Издательство «КДУ», 2018

Электронная интерактивная on-line книга

Копирование и использование материалов сетевого электронного издания без указания ссылки на источник категорически запрещено.

Формат ссылки:
Численное решение уравнений биокинетики в курсах «общая экология» и «моделирование биологических процессов»  Том I. Обыкновенные дифференциальные уравнения / коллектив авторов: учебное пособие, электронное издание сетевого распространения. – М.: «КДУ», «Добросвет», 2018. – 978-5-7913-1079-8.
URL: https://bookonlime.ru/node/2368/

НОУ ИНТУИТ | Лекция | Моделирование многофазных систем массового обслуживания

Аннотация: Цель работы: практически освоить методы моделирования двухфазных и трехфазных систем массового обслуживания с нулевой вместимостью блоков ожидания в программных средах MATLAB и GPSS/PC с целью получения операционных характеристик.

Теоретическая часть

Анализ многофазных систем массового обслуживания основан на теоретическом материале, взятом из [20].

Система массового обслуживания может представляться в виде много-фазной модели, когда каждое требование в ней последовательно обслуживается во всех фазах (приборах обслуживания). При этом если очереди перед каждой фазой не допускаются, то система будет называться системой с нулевой вместимостью блоков ожидания [20].

Работа двухфазной системы обслуживания состоит в следующем. Каждая фаза может быть занята на обслуживание либо свободна. Поскольку перед фазой очередь не допускается, то принимается, что первая фаза обслуживания заблокирована, если обслуживание требования в данной (первой) фазе завершено, а вторая фаза не готова к приему требования по той причине, что в ней не закончено обслуживание. Принимается также, что если первая фаза занята, то очередное входящее требование получает отказ. В системе могут быть следующие состояния: «фаза свободна», «фаза занята», «фаза заблокирована», которые обозначают как , , соответственно.

1. Двухфазная система обслуживания

Схема двухфазной системы обслуживания показана на рис. 1.1.


Рис. 1.1. Модель двухфазной системы обслуживания

Если состояние первой фазы обозначить символом , а состояние второй фазы — символом , то множество состояний двухфазной системы обслуживания будет следующим:

( 1.1)

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

( 1.2)

Система (1.2) — это система однородных обыкновенных дифференциальных уравнений с постоянными коэффициентами. Ее можно представить в матричном виде:

где:

— вектор размера с элементами , , , , ;

— матрица коэффициентов размера , которая имеет следующий вид:

Для интегрирования системы (1.2) будем задавать естественные начальные условия, т. е. такие, когда в начальный момент времени, равный нулю, вероятность отсутствия требований в системе равна единице, а остальные вероятности в начальный момент времени равны нулю:

( 1.3)
2. Трехфазная система обслуживания

В трехфазной системе каждая из фаз может быть свободной (символ ) либо занятой (символ ), а фазы 1 и 2 могут быть к тому же заблокированы (символ ). Если состояние первой фазы обозначить символом , состояние второй фазы — символом , а состояние третьей фазы — символом , то возможные состояния трехфазной системы будут следующими:

( 1. 4)

В соответствии с возможными состояниями (1.4) трехфазной системы можно получить следующую систему дифференциальных уравнений 13-го порядка относительно вероятностей состояний :

( 1.5)

Система (1.5) — это система обыкновенных однородных дифференциальных уравнений с постоянными коэффициентами. Ее также можно представить в матричном виде:

где:

— вектор состояний системы 13-го порядка;

— матрица постоянных коэффициентов размера .

intuit.ru/2010/edi»>Для решения системы (1.5) будем использовать естественные начальные условия, т. е.

( 1.6)

Отметим также, что система линейных дифференциальных уравнений будет иметь нетривиальное решение, если ее характеристический определитель будет равен нулю. В матричном виде получаем так называемое характеристическое уравнение

( 1.7)

где:

— единичная матрица того же размера, что и матрица коэффициентов ;

intuit.ru/2010/edi»> — скалярная в общем случае комплексная переменная, относительно которой решается характеристическое уравнение.

Если действительная часть корней характеристического уравнения (1.7) будет отрицательной, то решение системы дифференциальных уравнений (1.5) с начальными условиями (1.6) будет устойчивым, т. е. будет стремиться к установившимся значениям.

Таким образом, система дифференциальных уравнений (1.5) с начальными условиями (1.6) представляет собой математическую модель трехфазной системы массового обслуживания с нулевой вместимостью блоков ожидания.

Схема трехфазной системы обслуживания показана на рис. 1.2.


Рис. 1.2. Модель трехфазной системы обслуживания

Моделирование электрической сети

Вау, 3 года спустя … Я должен был ответить раньше. У меня было множество заблуждений, когда я искал эту информацию, и я проясню их здесь на случай, если другая бедная душа будет искать такие же ответы:

1) Как правильно моделировать электрическую сеть?

Есть много подходящих способов моделирования любой системы. Есть специальные программы перетаскивания, которые могут сделать это для нас (ETAP, CYME), есть модели, построенные в Simulink и PSCAD, чтобы сделать это. Однако мне нужно было моделировать энергосистему для запуска алгоритмов оценки состояния, и поэтому мне нужно было нечто, называемое моделью состояния.

Состояние системы просто таково — каково это состояние? Проще говоря — стабильно ли, простаивает ли, произошла ошибка?

Состояние системы представлено ее переменными состояния, и каждая переменная состояния имеет свое собственное дифференциальное уравнение. Дифференциальные уравнения описывают поведение системы относительно времени. Следовательно, мы можем смоделировать электрическую сеть, собрав дифференциальные уравнения для всех переменных состояния, собрав их вместе и решив. Мы можем выбрать линейный / нелинейный ODE-решатель из MATLAB (или любой другой решатель, который используется в используемой вами программе), или мы можем дискретизировать дифференциальные уравнения и решить их таким образом. Помните, что вывод в дискретное время (k) зависит от индекса времени (k-1), поэтому убедитесь, что вы храните последние значения значений состояния в памяти, которые будут использоваться в последующей итерации цикла.

Для электрической сети — если мы знаем все напряжения и углы шины, мы знаем, что у нас достаточно информации, чтобы узнать состояние электрической сети. Поэтому, когда вы моделируете сетку, убедитесь, что эти два находятся в вашей модели состояния.

2) Можно ли моделировать нелинейную модель в MATLAB? Или нам нужен Симулинк.

Вы можете смоделировать что угодно в любой из этих программ. Нелинейность моделирования зависит от математических уравнений, которые его регулируют. Если у вас есть линейные уравнения, у вас есть линейная система. Если у вас есть нелинейные уравнения, и вы линеаризуете свою модель (приближение под малым углом, разложение в ряд Тейлора), у вас есть линейная модель. В моем случае я сохранил нелинейные уравнения как есть и дискретизировал с фиксированным шагом по времени.

3) Я путаю моделирование системы с решением дифференциальных уравнений? Есть ли разница?

Системная модель предназначена для предоставления структуры, которая описывает поведение системы с течением времени. Решение этой модели — это реализация, которая даст вам такое поведение. Решение уравнений дает нам поведение модели во времени.

Решение ODE в MATLAB, 6: ODE45 — Видео

Наиболее часто используемым решателем ODE в MATLAB и Simulink является ODE45. Он основан на методе, опубликованном британскими математиками Дж. Р. Дормандом и П. Дж. Принсом в 1980 году. Базовый метод — пятого порядка. Для исправления ошибок используется метод четвертого порядка попутчиков.

Наклон tn, первый такой же, как последний, оставшийся от предыдущего успешного шага. Затем есть еще пять наклонов от значений функции при 1/5 ч, 3/10 час, 4/5 час, 8/9 час, а затем при tn плюс 1.Эти шесть наклонов, их линейные комбинации, используются для получения yn плюс 1.

Функция оценивается при tn плюс 1 и yn плюс 1, чтобы получить седьмой наклон. Затем для оценки ошибки используются их линейные комбинации.

Опять же, если оценка ошибки меньше заданных требований к точности, шаг считается успешным. Затем эта оценка ошибки используется для получения следующего размера шага. Если ошибка слишком велика, шаг неудачный, и эта оценка ошибки используется для получения размера шага для повторного выполнения шага.

Если мы хотим увидеть фактические используемые коэффициенты, вы можете перейти к коду ODE45. Есть таблица с коэффициентами. Или вы переходите на страницу Википедии, посвященную методу Дорманда-Принса, и там те же коэффициенты.

Кстати, вот интересный факт о методах Рунге-Кутты более высокого порядка. Классический метод Рунге-Кутты требовал четырех функциональных оценок на шаг, чтобы получить четвёртый порядок. Дорман-Принс требует шести функциональных оценок на шаг, чтобы получить пятый порядок.Вы не можете получить пятый порядок только с пятью оценками функций. А затем, если бы мы попытались достичь более высокого порядка, для каждого шага потребовалось бы еще больше вычислений функций.

Давайте воспользуемся ODE45, чтобы вычислить e и t. y простое число равно y. Мы можем запросить вывод, указав аргумент tspan. Ноль и шаги от 0,1 до 1. Если мы предоставим это в качестве входного аргумента для решения этого дифференциального уравнения и получения выходных данных в этих точках, мы получим их обратно в качестве выходных данных. А теперь вот приближения к решению этого дифференциального уравнения в этих точках.

Если мы построим график, вот решение в этих точках. И чтобы увидеть, насколько он точен, мы видим, что фактически получаем этот результат до девяти цифр. ODE45 очень точен.

Давайте посмотрим на выбор размера шага в нашей задаче с почти сингулярностью, равной четверти. y0 близко к 16. В дифференциальном уравнении y простое число равно 2 (a-t) y в квадрате. Мы позволяем ODE45 выбирать собственный размер шага, указывая, что мы просто хотим интегрировать от 0 до 1. Мы фиксируем вывод в t и y и строим его график.

Здесь есть много моментов, но это вводит в заблуждение, потому что ODE45 по умолчанию использует опцию уточнения.Он фактически оценивает функцию только в каждой четвертой из этих точек, а затем использует интерполянт для заполнения между ними. Так что нам действительно нужен немного другой сюжет.

Этот график немного лучше показывает, что происходит. Большие точки — это точки, которые ODE45 выбрал для оценки дифференциального уравнения. И маленькие точки заполняются интерполянтом. Итак, большие точки — это каждая четвертая точка. И опция уточнения говорит, что большие точки слишком далеко друг от друга, и нам нужно заполнить их интерполянтом.Итак, это непрерывный интерполянт в действии.

Большие точки сконцентрированы более близко, поскольку нам приходится двигаться по кривой. А затем по мере удаления от сингулярности размер шага увеличивается. Это показывает высокую точность ODE45 и автоматический выбор размера шага в действии.

Вот упражнение. Сравните ODE23 и ODE45, используя каждый из них для вычисления числа Пи. Интеграл 4 от 1 плюс t в квадрате от 0 до 1 равен пи. Вы можете выразить это как дифференциальное уравнение, использовать каждую из подпрограмм для интегрирования этого дифференциального уравнения и посмотреть, насколько они близки к вычислению числа пи.

Страница не найдена | MIT

Перейти к содержанию ↓
  • Образование
  • Исследовать
  • Инновации
  • Прием + помощь
  • Студенческая жизнь
  • Новости
  • Выпускников
  • О Массачусетском технологическом институте
  • Подробнее ↓
    • Прием + помощь
    • Студенческая жизнь
    • Новости
    • Выпускников
    • О Массачусетском технологическом институте
Меню ↓ Поиск Меню Ой, похоже, мы не смогли найти то, что вы искали!
Попробуйте поискать что-нибудь еще! Что вы ищете? Увидеть больше результатов

Предложения или отзывы?

Краткое введение в использование ode45 в MATLAB / a-short-Introduction-to-using-ode45-in-matlab.

pdf / PDF4PRO

Нур Адила Фарук Сенан Кафедра машиностроения Калифорнийского университета в Беркли Краткое описание , введение с по с использованием ode45 в MATLAB . Стандартный решатель MATLAB для обыкновенных дифференциальных уравнений (ОДУ) — это функция ode45 . Эта функция реализует метод Рунге-Кутта с переменным шагом по времени для эффективных вычислений. ode45 предназначен для решения следующей общей задачи: dx = f (t, x), x (t0) = x0, (1).dt, где t — независимая переменная, x — вектор зависимых переменных, которые необходимо найти, а f (t, x) — функция t и x. Математическая проблема уточняется, когда вектор функций в правой части уравнения. Устанавливается (1) f (t, x) и задаются начальные условия x = x0 в момент времени t0. В ME175 решение часто бывает неполным, если вы решили проблему и получили оду, управляющую движением системы. Часто бывает полезно создать визуальное представление о том, как именно выглядят траектории частицы, представленные очень сложным на вид обыкновенным дифференциальным уравнением, и ниже приводится краткое объяснение того, как это сделать.

Нур Адила Фарук Сенан Кафедра машиностроения Калифорнийского университета в Беркли Краткое введение в использование ode45 в MATLAB Стандартный решатель MATLAB для обычных дифференциальных уравнений (ODE) — это функция

Теги: