New to matlab and not sure how to reduce to first order

1 回表示 (過去 30 日間)
Samantha
Samantha 2020 年 12 月 18 日
編集済み: James Tursa 2020 年 12 月 18 日
Solve the third-order ODE function
y′′′− 2 * y′′−(y′)^2 = 1
With tspan [0 5], y(0) = y’(0) = 0, y’’ = 1.
You need to reduce the given third-order ODE equation to standard 1st-order ODE equations before solving
  2 件のコメント
KSSV
KSSV 2020 年 12 月 18 日
So integrate first w.r.t first, it will be reduced into y'' and then use ode45.
Jon
Jon 2020 年 12 月 18 日
Would this work? ode45 only solves first order equations, wouldn't you still have a second order equation

サインインしてコメントする。

回答 (1 件)

Jon
Jon 2020 年 12 月 18 日
編集済み: Jon 2020 年 12 月 18 日
Define
y1 = y
y2 = y'
y3 = y''
% and then make a function f, for example put the code below into an m-file called f.m
function dydt = f(t,y)
dydt(1) = y(2); % y1' = y2
dydt(2) = y(3); % y'' = y3
dydt(3) = 1 + 2*y(3) + y(2)^2;
then use one of the ode solvers e.g ode45 passing it the function f described above
Please see https://www.mathworks.com/help/matlab/math/choose-an-ode-solver.html especially the section on solving higher order equation
  8 件のコメント
Jon
Jon 2020 年 12 月 18 日
You can get documentation for ode45 by typing doc ode45 on the command line.
Once you get this running, if you have not already done so I would highly recommend taking the time to complete the MATLAB on ramp training to help you get more familiar with using MATLAB in general https://www.mathworks.com/learn/tutorials/matlab-onramp.html
James Tursa
James Tursa 2020 年 12 月 18 日
編集済み: James Tursa 2020 年 12 月 18 日
The ode45( ) call should not be inside your derivative function. That's backwards. The ode45( ) function is calling your derivative function, not the other way around. So you should have some code that defines initial conditions and calls ode45( ) like this:
tspan = [0 5]; % time span
y0 = [0 0 1]; % initial values of y, y', and y''
ode45(@odef,tspan,y0);
plot(t,y);
and then a separate code (e.g., in a file called odef.m, or maybe below the code listed above) that contains your derivative code:
function dydt = odef(t,y)
dydt = zeros(3,1); % the values y', y'', and y'''
dydt(1) = y(2); % y' = y2
dydt(2) = y(3); % y'' = y3
dydt(3) = 1 + 2*y(3) + y(2)^2; % y''' = 1 + 2y'' + (y')^2
end

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by