Suppose I want to tune different ode solvers to run:
ode23(@fun,...)
I want to use 'odesolver' so that
odesolver(@fun,...) actually runs ode23(@fun,...) when specifying odesolver=='ode23' and runs ode45(@fun,...) when specifying odesolver=='ode45'. Is there a smart way to do it?

 採用された回答

Stephen23
Stephen23 2024 年 4 月 28 日
編集済み: Stephen23 2024 年 4 月 28 日

0 投票

You could use STR2FUNC:
str = 'ode23';
odesolver = str2func(str);
odesolver(@fun,..)
or simply use FEVAL:
feval(str,@fun,..)

その他の回答 (2 件)

Anton Kogios
Anton Kogios 2024 年 4 月 28 日

0 投票

You could set up a function with a switch statement, something like:
function odesolver(@fun,odesolverStr)
switch odesolverStr
case 'ode23'
ode23(@fun)
case 'ode45'
ode45(@fun)
otherwise
error('Incorrect ode solver specified.')
end
end

1 件のコメント

feynman feynman
feynman feynman 2024 年 4 月 28 日
Thank you very much. But I accepted the answer that is shorter

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

Steven Lord
Steven Lord 2024 年 4 月 29 日

0 投票

If you're using a sufficiently recent release (release R2023b or later) use the ode object and specify the Solver property to tell the object which ODE solver to use.

3 件のコメント

feynman feynman
feynman feynman 2024 年 4 月 29 日
Thank you so much for this comment. I see that SelectedSolver seems to be chosen automatically according to different ODEs? If so, is this automatic selection also in older matlab versions?
Steven Lord
Steven Lord 2024 年 4 月 29 日
The ode object was introduced in release R2023b. It doesn't exist in earlier releases. There isn't a way to "automatically have MATLAB decide which ODE solver to call" in earlier releases.
feynman feynman
feynman feynman 2024 年 4 月 30 日
thank you

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

カテゴリ

Community Treasure Hunt

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

Start Hunting!

Translated by