【问题标题】:ODE Runge Kutta MATLAB errorODE Runge Kutta MATLAB 错误
【发布时间】:2015-11-17 02:23:57
【问题描述】:

所以我正在尝试创建一个 Runge Kutta 函数,这是我的代码:

function [t,U] = RK(f, n, eta, interv)
h = (interv(2)-interv(1))/n;
t = interv(1):h:interv(2);

v(1) = eta(1);
w(1) = eta(2);
for i=1:n
    k1 = f([v(i),w(i)]);
    k2 = f([v(i),w(i)]+h*k1/2); %f(t(i)+h/2, u(:,i)+h*k1/2);
    k3 = f([v(i),w(i)]+h*k2/2);
    k4 = f([v(i),w(i)]+h*k3);

    v(i+1) = v(i) + h*(k1(1)+2*k2(1)+2*k3(1)+k4(1))/6;
    w(i+1) = w(i) + h*(k1(2)+2*k2(2)+2*k3(2)+k4(2))/6;
end
U = [v;w];
end

其中 U 是一个 2 行 n+1 列的矩阵,这是我尝试执行此函数时的问题,例如:

RK(sin, 10, [0,1], [5,15])

我收到错误 not enough input arguments 但是当我尝试将代码作为脚本执行并将 f 替换为 sin 时,一切正常,我得到了 U 矩阵 谁能告诉我解决方案是什么?

【问题讨论】:

  • 您正试图将 sin 用作匿名函数。我对此没有任何经验,但 SO 中充斥着这方面的信息。
  • 谢谢 A. Visser 我只需要将 @ 添加到 RK(@sin,....)
  • 到时我会给出答案。

标签: matlab ode runge-kutta


【解决方案1】:

您正在使用sin 作为函数句柄。只需添加@ 符号即可。

RK(@sin, 10, [0,1], [5,15])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2021-03-23
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多