Новости из мира ПК
40 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Ode45 matlab пример


Solve nonstiff differential equations — medium order method



[ t , y ] = ode45( odefun , tspan , y0 ) , where tspan = [t0 tf] , integrates the system of differential equations y ‘ = f ( t , y ) from t0 to tf with initial conditions y0 . Each row in the solution array y corresponds to a value returned in column vector t .

All MATLAB ® ODE solvers can solve systems of equations of the form y ‘ = f ( t , y ) , or problems that involve a mass matrix, M ( t , y ) y ‘ = f ( t , y ) . The solvers all use similar syntaxes. The ode23s solver only can solve problems with a mass matrix if the mass matrix is constant. ode15s and ode23t can solve problems with a mass matrix that is singular, known as differential-algebraic equations (DAEs). Specify the mass matrix using the Mass option of odeset .

ode45 is a versatile ODE solver and is the first solver you should try for most problems. However, if the problem is stiff or requires high accuracy, then there are other ODE solvers that might be better suited to the problem. See Choose an ODE Solver for more information.

[ t , y ] = ode45( odefun , tspan , y0 , options ) also uses the integration settings defined by options , which is an argument created using the odeset function. For example, use the AbsTol and RelTol options to specify absolute and relative error tolerances, or the Mass option to provide a mass matrix.

[ t , y , te , ye , ie ] = ode45( odefun , tspan , y0 , options ) additionally finds where functions of ( t, y) , called event functions, are zero. In the output, te is the time of the event, ye is the solution at the time of the event, and ie is the index of the triggered event.

For each event function, specify whether the integration is to terminate at a zero and whether the direction of the zero crossing matters. Do this by setting the ‘Events’ property to a function, such as myEventFcn or @myEventFcn , and creating a corresponding function: [ value , isterminal , direction ] = myEventFcn ( t , y ). For more information, see ODE Event Location.

sol = ode45( ___ ) returns a structure that you can use with deval to evaluate the solution at any point on the interval [t0 tf] . You can use any of the input argument combinations in previous syntaxes.


ODE with Single Solution Component

Simple ODEs that have a single solution component can be specified as an anonymous function in the call to the solver. The anonymous function must accept two inputs (t,y) even if one of the inputs is not used.

Use a time interval of [0,5] and the initial condition y0 = 0 .

Plot the solution.

Solve Nonstiff Equation

The van der Pol equation is a second order ODE

where 0$»> is a scalar parameter. Rewrite this equation as a system of first-order ODEs by making the substitution . The resulting system of first-order ODEs is

The function file vdp1.m represents the van der Pol equation using . The variables and are the entries y(1) and y(2) of a two-element vector, dydt .

Solve the ODE using the ode45 function on the time interval [0 20] with initial values [2 0] . The resulting output is a column vector of time points t and a solution array y . Each row in y corresponds to a time returned in the corresponding row of t . The first column of y corresponds to , and the second column to .

Plot the solutions for and against t .

Pass Extra Parameters to ODE Function

ode45 only works with functions that use two input arguments, t and y . However, you can pass in extra parameters by defining them outside the function and passing them in when you specify the function handle.

Rewriting the equation as a first-order system yields

odefcn.m represents this system of equations as a function that accepts four input arguments: t , y , A , and B .

Solve the ODE using ode45 . Specify the function handle such that it passes in the predefined values for A and B to odefcn .

Plot the results.

ODE with Time-Dependent Terms

Consider the following ODE with time-dependent parameters

The initial condition is . The function f(t) is defined by the n-by-1 vector f evaluated at times ft . The function g(t) is defined by the m-by-1 vector g evaluated at times gt .

Create the vectors f and g .

Write a function named myode that interpolates f and g to obtain the value of the time-dependent terms at the specified time. Save the function in your current folder to run the rest of the example.

The myode function accepts extra input arguments to evaluate the ODE at each time step, but ode45 only uses the first two input arguments t and y .

Solve the equation over the time interval [1 5] using ode45 . Specify the function using a function handle so that ode45 uses only the first two input arguments of myode . Also, loosen the error thresholds using odeset .

Plot the solution, y , as a function of the time points, t .

Evaluate and Extend Solution Structure

The van der Pol equation is a second order ODE

y 1 ′ ′ — μ ( 1 — y 1 2 ) y 1 ′ + y 1 = 0 .

Solve the van der Pol equation with μ = 1 using ode45 . The function vdp1.m ships with MATLAB® and encodes the equations. Specify a single output to return a structure containing information about the solution, such as the solver and evaluation points.

Use linspace to generate 250 points in the interval [0 20] . Evaluate the solution at these points using deval .

Plot the first component of the solution.

Extend the solution to t f = 3 5 using odextend and add the result to the original plot.

Input Arguments

odefun — Functions to solve
function handle

Functions to solve, specified as a function handle which defines the functions to be integrated.

The function dydt = odefun(t,y) , for a scalar t and a column vector y , must return a column vector dydt of data type single or double that corresponds to f ( t , y ) . odefun must accept both input arguments, t and y , even if one of the arguments is not used in the function.

Читать еще:  Не работает плей маркет ошибка сервера

For example, to solve y ‘ = 5 y − 3 , use the function:

For a system of equations, the output of odefun is a vector. Each element in the vector is the solution to one equation. For example, to solve

y ‘ 1 = y 1 + 2 y 2 y ‘ 2 = 3 y 1 + 2 y 2

use the function:

For information on how to prov >odefun , see Parameterizing Functions.

Example: @myFcn

Data Types: function_handle

tspan — Interval of integration

Interval of integration, specified as a vector. At minimum, tspan must be a two element vector [t0 tf] specifying the initial and final times. To obtain solutions at specific times between t0 and tf , use a longer vector of the form [t0,t1,t2. tf] . The elements in tspan must be all increasing or all decreasing.

The solver imposes the initial conditions given by y0 at the initial time tspan(1) , then integrates from tspan(1) to tspan(end) :

If tspan has two elements, [t0 tf] , then the solver returns the solution evaluated at each internal integration step within the interval.

If tspan has more than two elements [t0,t1,t2. tf] , then the solver returns the solution evaluated at the given points. However, the solver does not step precisely to each point specified in tspan . Instead, the solver uses its own internal steps to compute the solution, then evaluates the solution at the requested points in tspan . The solutions produced at the specified points are of the same order of accuracy as the solutions computed at each internal step.

Specifying several intermediate points has little effect on the efficiency of computation, but for large systems it can affect memory management.

The values of tspan are used by the solver to calculate suitable values for InitialStep and MaxStep :

If tspan contains several intermediate points [t0,t1,t2. tf] , then the specified points give an indication of the scale for the problem, which can affect the value of InitialStep used by the solver. Therefore, the solution obtained by the solver might be different depending on whether you specify tspan as a two-element vector or as a vector with intermediate points.

The initial and final values in tspan are used to calculate the maximum step size MaxStep . Therefore, changing the initial or final values in tspan could lead to the solver using a different step sequence, which might change the solution.

Example: [1 10]

Example: [1 3 5 7 9 10]

Data Types: single | double

Решение ОДУ в Matlab

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Погрешность Метода Рунге-Кутта 1 порядка

» data-medium-file=»Рунге-1-погрешность.png?fit=300%2C236&ssl=1″ data-large-file=»Рунге-1-погрешность.png?fit=622%2C489&ssl=1″ src=»″ alt=»Погрешность метода 1 порядка» w />
На данном графике показана зависимость величины ошибки от шага.

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

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

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

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

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

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

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

Читать еще:  Проверка microsd на ошибки и исправление

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

Как видите, на последней картинке размерность ошибки на столько мала, что пришлось воспользоваться 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])

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

  • f — вектор-функция для вычисления правой части уравнения системы уравнений;
  • interval — массив из двух чисел, определяющий интервал интегрирования дифференциального уравнения или системы;
  • Х0 — вектор начальных условий системы дифференциальных уравнений;
  • options — параметры управления ходом решения дифференциального уравнения или системы.

Все функции возвращают:

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

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

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

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

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

Как реализовать функцию ode45 в матлаб для системы оду

19.05.2014, 20:56

Установка «лимита» на значение решения системы ОДУ при использовании решателя ode45
Добрый день. Есть такая задачка: при решении системы дифференциальных уравнений, пусть одно из.

Система из 206 ОДУ. Точность с ode23s(tb) никуда не годится, а ode23 и ode45 зависает
Здравствуйте. Есть система из 206 ОДУ Колмогорова. Пытаюсь найти ее относительно точное решение.

19.05.2014, 21:022

Это интересно и полезно прочитать: Как запостить тему, чтобы не получить ответ (с) кот Бегемот

Приведите свои попытки решения задачи.

19.05.2014, 21:38 [ТС]3
Matlab M
Matlab M
19.05.2014, 22:204
Matlab M
Matlab M
19.05.2014, 22:23 [ТС]5

Error using feval
Attempt to execute SCRIPT Kosh as a function:

Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args<:>); % ODE15I sets args <1>to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn,

19.05.2014, 22:286
19.05.2014, 22:42 [ТС]7

Error using feval
Undefined function ‘Kosh’ for input arguments of type ‘double’.

Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args<:>); % ODE15I sets args <1>to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, .

19.05.2014, 22:448
Matlab M
19.05.2014, 22:51 [ТС]9

нет запускала вроде так же, может что-то не заметила.

>> function temp
t=[0 6];
[T,Y]=ode45(‘Kosh’, t,[0,6,1]);
grid on

function drdt=Kosh(t,r)
dxdt= r(1)^2*sin(r(2))-r(3);
dydt= exp( 0.4*r(1)-3*r(2)+r(3) ) ;
dzdt= log(abs(r(3)/(1+r(2))+sin(r(1))));
drdt= [dxdt;dydt;dzdt];
function temp
Error: Function definitions are not permitted in this context.

19.05.2014, 22:5610


а ты пытаешься впихнуть все это в командное окно, а оно не лезет

однако, если ты хочешь работать чисто с командным окном, это тоже можно организовать

Matlab M
19.05.2014, 23:04 [ТС]11
19.05.2014, 23:04
19.05.2014, 23:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Функция ОДУ в матлаб
Народ, помогите пожалуйста записать ОДУ как матлаб функцию. Не получается. y»+4y’+4y=0 Написал.

Задача Коши для системы ОДУ
Доброго времени! Помогите пожалуйста разобраться с ошибкой. В функции rkfixed бьёт ошибку на месте.

Метод Адамса для системы ОДУ
Помогите решить Систему методом Адамса,пытался решить через Рунге-кутта,но что-то не получается(

Решения задачи Коши для системы ОДУ
Текст программы решения задачи Коши для системы ОДУ global T; T = 6; % ограничение по времени.


Решение нежестких дифференциальных уравнений — метод среднего порядка точности



[ t , y ] = ode45( odefun , tspan , y0 ) , где tspan = [t0 tf] , интегрирует систему дифференциальных уравнений y ‘ = f ( t , y ) от t0 к tf с начальными условиями y0 . Каждая строка в массиве решения y соответствует значению, возвращенному в вектор-столбце t .

Все решатели MATLAB ® ODE могут решить системы уравнений формы y ‘ = f ( t , y ) , или проблемы, которые включают большую матрицу, M ( t , y ) y ‘ = f ( t , y ) . Решатели все использование подобные синтаксисы. ode23s решатель только может решить проблемы с большой матрицей, если большая матрица является постоянной. ode15s и ode23t может решить проблемы с большой матрицей, которая сингулярна, известна как дифференциально-алгебраические уравнения (ДАУ). Задайте большую матрицу с помощью Mass опция odeset .

ode45 универсальный решатель ОДУ и первый решатель, который необходимо попробовать за большинство проблем. Однако, если проблема жестка или требует высокой точности, то существуют другие решатели ОДУ, которые могут лучше подходить для проблемы. Смотрите Выбирают ODE Solver для получения дополнительной информации.

[ t , y ] = ode45( odefun , tspan , y0 , options ) также использует настройки интегрирования, заданные options , то, которое является аргументом, создало использование odeset функция. Например, используйте AbsTol и RelTol опции, чтобы задать допуски абсолютной и относительной погрешности или Mass опция, чтобы обеспечить большую матрицу.

[ t , y , te , ye , ie ] = ode45( odefun , tspan , y0 , options ) дополнительно находит, где функции ( t, y) , вызвал функции события, являются нулем. В выходе, te время события, ye решение во время события и ie индекс инициированного события.

Для каждой функции события задайте, должно ли интегрирование остановиться в нуле и имеет ли направление нулевого пересечения значение. Сделайте это путем установки ‘Events’ свойство к функции, такой как myEventFcn или @myEventFcn , и создание соответствующей функции: Значение , isterminal , direction ] = myEventFcn T Y ). Для получения дополнительной информации смотрите Местоположение События ОДУ.

sol = ode45( ___ ) возвращает структуру, которую можно использовать с deval оценивать решение в любой точке на интервале [t0 tf] . Можно использовать любую из комбинаций входных аргументов в предыдущих синтаксисах.


ОДУ с компонентом единого решения

Простые ОДУ, которые имеют компонент единого решения, могут быть заданы как анонимная функция в вызове решателя. Анонимная функция должна принять два входных параметров (t,y) даже если одни из входных параметров не используются.

Используйте временной интервал [0,5] и начальное условие y0 = 0 .

Решение нестандартных уравнений

Уравнение Ван дер Поля является ОДУ второго порядка

где скалярный параметр. Перепишите это уравнение как систему ОДУ первого порядка путем создания замены . Получившаяся система ОДУ первого порядка

Файл функции vdp1.m представляет использование уравнения Ван дер Поля . Переменные и являются записями y(1) и y(2) из двухэлементного вектора, dydt .

Решите ОДУ с помощью ode45 функция на временном интервале [0 20] с начальными значениями [2 0] . Получившийся выход является вектор-столбцом моментов времени t и массив решения y . Каждая строка в y соответствует времени, возвращенному в соответствующей строке t . Первый столбец y соответствует , и второй столбец к .

Постройте решения для и против t .

Передача дополнительных параметров к функции ОДУ

ode45 только работает с функциями, которые используют два входных параметра, t и y . Однако можно передать в дополнительных параметрах путем определения их вне функции и передачи их в том, когда вы задаете указатель на функцию.

При перезаписи уравнения, когда уступает система первого порядка

odefcn.m представляет эту систему уравнений как функцию, которая принимает четыре входных параметра: t Y A , и B .

Решить ОДУ используя решатель ode45 . Задайте указатель на функцию, таким образом, что он передает в предопределенных значениях для A и B к odefcn .

Постройте график результатов.

ОДУ с зависящими от времени условиями

Рассмотрите следующее ОДУ с зависящими от времени параметрами

Начальное условие . Функциональный f(t) задан n-1 векторным f оцененный во времена ft . Функциональный g(t) задан m-1 векторным g оцененный во времена gt .

Создайте векторы f и g .

Запишите функции с именем myode это интерполирует f и g получить значение зависящих от времени условий в требуемое время. Сохраните функцию в своей текущей папке, чтобы запустить остальную часть примера.

myode функция принимает, что дополнительные входные параметры оценивают ОДУ на каждом временном шаге, но ode45 только использует первые два входных параметра t и y .

Решите уравнение по временному интервалу [1 5] использование ode45 . Задайте функцию с помощью указателя на функцию так, чтобы ode45 использование только первые два входных параметра myode Также ослабьте пороги ошибок, используя odeset .

Постройте решение, y , как функция моментов времени, t .

Оценка и расширение структуры решения

Уравнение Ван дер Поля является ОДУ второго порядка

y 1 ′ ′ — μ ( 1 — y 1 2 ) y 1 ′ + y 1 = 0 .

Решите уравнение Ван дер Поля с μ = 1 использование ode45 . Функциональный vdp1.m поставки с MATLAB® и кодируют уравнения. Задайте один выход, чтобы возвратить структуру, содержащую информацию о решении, таком как точки оценки и решатель.

Используйте linspace сгенерировать 250 точек в интервале [0 20] . Оцените решение в этих точках с помощью deval .

Постройте первый компонент решения.

Расширьте решение t f = 35 использование odextend и добавьте результат в исходный график.

Входные параметры

odefun — Функции, чтобы решить
указатель на функцию

Функции, чтобы решить, заданный как указатель на функцию, который задает функции, которые будут интегрированы.

Функциональный dydt = odefun(t,y) , для скалярного t и вектор-столбец y , должен возвратить вектор-столбец dydt из типа данных single или double это соответствует f ( t , y ) odefun должен принять оба входных параметра, t и y , даже если один из аргументов не используется в функции.

Например, чтобы решить y ‘ = 5 y − 3 , используйте функцию:

Для системы уравнений, выхода odefun вектор. Каждый элемент в векторе является решением одного уравнения. Например, чтобы решить

y ‘ 1 = y 1 + 2 y 2 y ‘ 2 = 3 y 1 + 2 y 2

Для получения информации о том, как предоставить дополнительные параметры функциональному odefun , смотрите Функции Параметризации.

Пример: @myFcn

Типы данных: function_handle

tspan — Интервал интегрирования

Интервал интегрирования, заданного как вектор. В минимуме, tspan должны быть два вектора элемента [t0 tf] определение начальных и итоговых времен. Получить решения в конкретные моменты времени между t0 и tf , используйте более длинный вектор формы [t0,t1,t2. tf] . Элементы в tspan должен все увеличиваться или все уменьшение.

Решатель налагает начальные условия, данные y0 в начальное время tspan(1) , затем объединяется от tspan(1) к tspan(end) :

Если tspan имеет два элемента, [t0 tf] , затем решатель возвращает решение, оцененное в каждом внутреннем этапе интеграции в интервале.

Если tspan имеет больше чем два элемента [t0,t1,t2. tf] , затем решатель возвращает решение, оцененное в данных точках. Однако решатель не продвигается точно в каждую точку, заданную в tspan . Вместо этого решатель использует свои собственные внутренние шаги, чтобы вычислить решение, затем оценивает решение в требуемых точках в tspan . Решения, произведенные в заданных точках, имеют тот же порядок точности как решения, вычисленные на каждом внутреннем шаге.

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

Значения tspan используются решателем, чтобы вычислить подходящие значения для InitialStep и MaxStep :

Если tspan содержит несколько промежуточных точек [t0,t1,t2. tf] , затем заданные точки дают индикацию относительно шкалы для проблемы, которая может влиять на значение InitialStep используемый решателем. Поэтому решение, полученное решателем, может отличаться в зависимости от того, задаете ли вы tspan как двухэлементный вектор или как вектор с промежуточными точками.

Начальные и окончательные значения в tspan используются, чтобы вычислить максимальный размер шага MaxStep . Поэтому изменяя начальные или окончательные значения в tspan мог привести к решателю с помощью различной последовательности шага, которая может изменить решение.

Пример: [1 10]

Пример: [1 3 5 7 9 10]

Типы данных: single | double

Ссылка на основную публикацию