【发布时间】:2020-04-29 13:13:12
【问题描述】:
我正在尝试实现中点公式y[n+1/2] = y[n] + h/2 f (x[n], y[n]) 和y[n+1] = y[n] + h *f (x[n] + h/2, y[n + 1/2])
所以它使用中点法求解 ODE。
我的功能是
function [ x, y ] = Midpoint_ODE ( f, xRange, yInitial, numSteps )
% f = name of file with function
% xrange Interval
% x(1) first meaning of x
% x(2) second meaning of x
x=zeros(numSteps+1,1);
x(1) = xRange(1);
h = ( xRange(2) - xRange(1) ) / numSteps; % calculated step size
y(1,:) = transpose(yInitial);
for n = 1 : numSteps
y(n+0.5,:)= (y(n) + (h * 0.5)*(transpose(feval( f, x(n), y(n)))));
y(n+1,:) = y(n,:) + h * transpose(feval(f, x(n)+ (h/2), y(n+0.5,:))); %evaluating the function
end
但我得到一个错误:
**Index in position 1 is invalid. Array indices must be positive integers or logical values.
Error in Midpoint_ODE (line 11)Index in position 1 is invalid. Array indices must be positive integers or logical values.
Error in Midpoint_ODE (line 11)**
我检查了几次,但不知道出了什么问题,如果我错过了一些合乎逻辑的部分。
【问题讨论】:
-
因为这个
y(n+0.5,:)。索引应该是整数,但您正在尝试访问 1.5 -
请注意,错误消息准确地告诉您问题:“位置 1 的索引无效。数组索引必须是正整数或逻辑值。”它还告诉你它发生在哪里,第 11 行。所以你知道在第 11 行,你使用了不正确的索引。第 11 行的数组索引操作是
y(n+0.5,:), y(n), andx(n)`。所以这三个中的一个导致了错误。 Matlab 错误信息通常很有帮助,请花时间阅读它们。
标签: matlab numerical-methods ode