【发布时间】:2018-01-02 01:44:35
【问题描述】:
我有一个要与 ode113 集成的 ODE。在描述导数的函数内部,我计算了一些我想“保存”的变量(存储到文件或数组中)。我该怎么做?
这是一个示例(改编自文档)。运行以下脚本:
global number_of_calls
number_of_calls = 0;
[t, y] = ode113(@myfunc, [0 10], 0);
plot(t,y,'-o')
fprintf('Number of calls of ''myfunc'': %d\n', number_of_calls)
fprintf('Number of elements of ''t'' : %d\n', length(t))
调用包含要集成的ODE的函数:
function dydt = myfunc(t, y)
global number_of_calls
dydt = 2*t;
a = 2*y; % <--- how can I save a?
number_of_calls = number_of_calls + 1;
end
我想过从myfunc 内部写入a 的值,但正如您所见,myfunc 在实际存储自变量t 的当前值之前被多次调用,并且在最后我会有两个不同大小的数组a 和t。
【问题讨论】:
-
你为什么不对待类似于
number_of_calls? -
@Wolfie:我想过做一些类似于附加到 a:
a(end+1)=current_a;但我仍然会有不同长度的a和t。或者这不是你的意思? -
@Wolfie:我认为问题在于
myfunc在集成之前的某些初始化步骤中被调用了几次,因此它被调用的次数超过了返回的t和 @ 中的值987654336@ 数据。对吗,皮埃尔? -
@Wolfie:是的,据我了解。
ode113是一个变量-step 集成,所以我认为myfunc在每一步之前被多次调用,以便实际计算当前的step 宽度。 -
a可以在给定的t上变化,那么您想要a的哪个 值?在您的示例中也是字面意义上的2*y吗?如果它是根据y定义的,那么您可以事后计算...
标签: matlab numerical-integration