How to use ode45 for a row vector

function v = f(t,x);
zeta=0.9
m=5; k=1000;
c=2.*zeta.*sqrt(m*k);
v=[x(2); x(1).*-k/m+x(2).*-c./m];
end
and
clear all
xo=[0.05; 0];
ts=[0 3];
[t,x]=ode45('f',ts,xo);
figure(1)
plot(t,x(:,1))
I was wondering how I can make this plot work with multiple zeta values
zeta=[0, 0.1, 0.25, 0.5, 0.75, 0.9, 1];

回答 (2 件)

madhan ravi
madhan ravi 2020 年 3 月 29 日

1 投票

Parametrization and loop through zeta.

3 件のコメント

Erik Sharrer
Erik Sharrer 2020 年 3 月 29 日
how would i go about the loop?
clear all
xo=[0.05; 0];
ts=[0 3];
[t,x]=ode45(@myfun,ts,xo);
figure(1)
plot(t,x(:,1))
function v = myfun(t,x);
zeta=0.9
m=5; k=1000;
c=2.*zeta.*sqrt(m*k);
v=[x(2); x(1).*-k/m+x(2).*-c./m];
end
would it be before the function and contain whats in the first block of code?
madhan ravi
madhan ravi 2020 年 3 月 30 日
xo=[0.05; 0];
ts=[0 3];
zeta = ... values;
na = sprintfc('zeta=%.2f',zeta); % use compose() in later versions
for zeta = zeta
[t,x]=ode45(@(t,x)myfun(t,x,zeta),ts,xo);
plot(t,x(:,1))
hold on
end
function v = myfun(t,x,zeta)
m=5; k=1000;
c=2.*zeta.*sqrt(m*k);
v=[x(2); x(1).*-k/m+x(2).*-c./m];
end
Erik Sharrer
Erik Sharrer 2020 年 3 月 30 日
what does 'zeta=%.2f' mean?

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

Steven Lord
Steven Lord 2020 年 3 月 29 日

0 投票

See the "Pass Extra Parameters to ODE Function" example on the documentation page for the ode45 function. You can use it as a model for your code.

1 件のコメント

Erik Sharrer
Erik Sharrer 2020 年 3 月 29 日
I still would need to use a loop though right?

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

カテゴリ

タグ

質問済み:

2020 年 3 月 29 日

コメント済み:

2020 年 3 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by