高效的颂歌与函数处理

3视图(30天)
Stefan Weichert
Stefan Weichert 2021年9月3日
编辑: Stefan Weichert2021年9月3日
你好,
我经常解决的颂歌,所以效率是很重要的。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函数为每个问题。
谢谢你考虑这个!

接受的答案

Bjorn Gustavsson
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评论
Stefan Weichert
Stefan Weichert 2021年9月3日
你好,
非常感谢你的建议。这确实是一种可能性。

登录置评。

答案(1)

史蒂文的主
史蒂文的主 2021年9月3日
做f_function期待与两个输入参数或被称为三?
x = [1;2;3);
y = [4;5;6);
value1 = min ((x, y), 4)%这工作
value1 = 3×2
1 4 2 3 4
value2 = min (x, y, 4)%这并不工作
错误使用最小值
维度的观点是不支持,当两个输入数组。金宝app
的X输入参数怎么样 数值 调用你的函数的两个变量x和y的定义你从你的代码省略吗?
我怀疑你拿苹果和橘子,虽然与你提供的有限的信息我不能肯定。
1评论
Stefan Weichert
Stefan Weichert 2021年9月3日
编辑:Stefan Weichert 2021年9月3日
我看到后我混合x和y减少功能整理代码的复杂性。
现在固定。谢谢。
但效率的问题仍然存在。

登录置评。

类别

找到更多的在编程帮助中心文件交换

下载188bet金宝搏


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!