【问题标题】:"Subscript indices must either be real positive integers or logicals."“下标索引必须是真正的正整数或逻辑。”
【发布时间】:2016-02-16 01:07:17
【问题描述】:

我正在创建一个 MATLAB 代码来使用前向差异来估计雅可比矩阵。代码如下:

%Calculate Jacobian Numerically using forward differences:
function J=Jacobianest(x,F) % X is a column vector of variables, f is a   column function vector
h=1e-7;
n=length(x);
J=zeros(n);
for i=1:n
    xp=x;
    xp(i)=x(i)+h;
    J(:,i)=1/h*(F(xp)-F(x));
end

当我运行它时出现以下错误:

Jacobianest(x,'multivariable_newton_fun') 下标索引必须是实数正整数或逻辑数。 Jacobianest 中的错误(第 9 行) J(:,i)=1/h*(F(xp)-F(x));

我查看了其他问题的答案并尝试调试/dbstop,但我似乎找不到任何明显的东西。

我使用i 作为列索引,它应该只有从1n 的整数值(希望所有整数)。

【问题讨论】:

  • 错误不在J的赋值中,而是在F的赋值中。我猜xpx 不是整数。我认为F(xp(i)) 可以解决您的问题。作为附加建议:don't use i as a variable

标签: matlab


【解决方案1】:

你需要传递一个函数而不是一个字符串。 怎么样:

Jacobianest(x,@multivariable_newton_fun)

如果它是一个字符串,即您使用单引号,那么F(1) 会给出字符串名称的第一个字母,在本例中为“m”。 此外,如果您尝试F(0),您将收到上述错误。

@ 生成一个函数(想想其他语言中的函数句柄或函数引用)。然后括号F(xp) 被解释为函数调用,而不是下标索引。

【讨论】:

  • 感谢您的回答,非常有用。我已经整理好了。
猜你喜欢
  • 2014-09-11
  • 2016-06-12
  • 2021-07-02
  • 1970-01-01
  • 2016-02-14
  • 2013-02-05
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多