高效的颂歌与函数处理
3视图(30天)
显示旧的评论
你好,
我经常解决的颂歌,所以效率是很重要的。ODE我解决调用其他函数,因为ODE是非常普遍的,但取决于细节问题。
这是我现在正在做的事(不工作代码,但相关的片段)
%只是一些参数传递。这并不影响性能
params = {1,2,3};
ode %函数处理的函数变化的问题
h1 = @f_function;
%函数处理的颂歌
% h_dydt = @ (t, y) f_dydt (t y参数);%的方式1)
h_dydt = @ (t, y) f_dydt (t, y, params, h1);%的方式2)
解决方案=数值(h_dydt,…)
ode函数在哪里吗
%函数[dydt] = f_dydt (t y参数h) %的方式1)
函数[dydt] = f_dydt (t y参数h)%的方式2)
% = f_function (y, params);%的方式1)
一个= h (y, params);%的方式2)
%,其余不重要,但可以
dydt = y * t *;
结束
方式2)的问题是,需要更多的时间比方式1 60%),和我想知道如果有一种方法可以有相同的灵活性没有很大的附加成本。现在,我要做的方式1)和编写一个单独的dydt函数为每个问题。
谢谢你考虑这个!
0评论
接受的答案
Bjorn Gustavsson
2021年9月3日
编辑:Bjorn Gustavsson
2021年9月3日
如果function-handle-argument太昂贵,你还想要一些一般性的灵活性”你可能会试图简单地扩展的ODE-function
开关
:用不同的司机吗?是这样的:
%函数[dydt] = f_dydt (t, X, params, h) %的方式1)
函数[dydt] = f_dydt (t, X, params n_RHS)%的方式1.5)
% = f_function (x, y, params);%的方式1)
开关n_RHS
情况下1
一个= h1 (X, params);%的方式1.5)
情况下2
一个= h2 (X, params);%的方式1.5)
否则
一个= 12;
结束
%,其余不重要,但可以
dydt = y * t *;
结束
这应该介于中间画两个趋于,可能是足够好的解决这两个问题。它需要一些努力在编写文档的函数提供“容易使用”。
HTH
答案(1)
史蒂文的主
2021年9月3日
做f_function期待与两个输入参数或被称为三?
x = [1;2;3);
y = [4;5;6);
value1 = min ((x, y), 4)%这工作
value2 = min (x, y, 4)%这并不工作
的X输入参数怎么样
数值
调用你的函数的两个变量x和y的定义你从你的代码省略吗?
我怀疑你拿苹果和橘子,虽然与你提供的有限的信息我不能肯定。