フィルターのクリア

how to implement without using "function-end" command?

2 ビュー (過去 30 日間)
Hoon
Hoon 2016 年 3 月 12 日
コメント済み: Steven Lord 2016 年 3 月 13 日
I'll start with an example. All the codes are from this website, http://12000.org/my_notes/matlab_ODE/
I'm trying to figure out how to use ode45
function first_oder_ode
t=0:0.001:5; % time scalex
initial_x=0;
[t,x]=ode45( @rhs, t, initial_x);
plot(t,x);
xlabel('t'); ylabel('x');
function dxdt=rhs(t,x)
dxdt = 3*exp(-t);
end
end
Now I want to avoid using
function
end
Because I wanna see what's inside the function in the work space.
then I can simply write like
f=@(t,x)3*exp(-t)+x; %%%define first order ode
t=0:0.001:5; %%%time scalex
x_initial=0; %%%x initial condition
[t,x]=ode45(f,t,x_initial); %%%solving ODE
plot(t,x);
This is easy one for getting numerical solution for 1st order ODE
The problem is, applying this into ODE system.
The Matlab code is (it's already in the website)
function second_oder_ode
% SOLVE d2x/dt2+5 dx/dt - 4 x = sin(10 t)
% initial conditions: x(0) = 0, x'(0)=0
t=0:0.001:3; % time scale
initial_x = 0;
initial_dxdt = 0;
[t,x]=ode45( @rhs, t, [initial_x initial_dxdt] );
plot(t,x(:,1));
xlabel('t'); ylabel('x');
function dxdt=rhs(t,x)
dxdt_1 = x(2);
dxdt_2 = -5*x(2) + 4*x(1) + sin(10*t);
dxdt=[dxdt_1; dxdt_2];
end
end
How do I write this in another way without using "function - end"? is it possible?
  1 件のコメント
Steven Lord
Steven Lord 2016 年 3 月 13 日
Rather than making the outer function into a script, I recommend giving it some output arguments. This way you don't clutter the caller's workspace with temporary variables that are only needed to help the code compute the variables in which you're interested.

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

採用された回答

Walter Roberson
Walter Roberson 2016 年 3 月 12 日
rhs = @(t, x) [x(2); -5*x(2) + 4*x(1) + sin(10*t)];
  2 件のコメント
Hoon
Hoon 2016 年 3 月 12 日
so, I wrote like this
t=0:0.001:3; % time scale
initial_x = 0;
initial_dxdt = 0;
rhs = @(t, x) [x(2); -5*x(2) + 4*x(1) + sin(10*t)];
[t,x]=ode45( @rhs, t, [initial_x initial_dxdt] );
plot(t,x(:,1));
xlabel('t'); ylabel('x');
It doesn't work
Hoon
Hoon 2016 年 3 月 12 日
OH!!! it works!!! I have to loose @!

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

その他の回答 (0 件)

カテゴリ

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