八度函数调用中未定义的参数(是的,这是一个脚本文件)

Undefined arg in octave function call (YES IT'S A SCRIPT FILE)

回答

eulerballistic(motion, [0;100;0;-9.8;0], 10)
needs to be
eulerballistic(@motion, [0;100;0;-9.8;0], 10)
               ^     

当我将这两个函数复制并粘贴到 cli 中时,出现“错误:v 未定义” 当我发出“运行 proj3b.m”时,同样的问题 我知道脚本文件和函数文件之间的区别。 当我将 proj3b.m 正确地制作成一个函数文件时,我得到了同样的错误。

使用 Octave 6.4.0

proj3b.m

1+1;
function z = motion(t, v)
  x2 = 0;
  y2 = -9.8;
  z = v + [v(3); v(4); x2; y2; 1]*t;
  return
endfunction

eulerballistic(motion, [0;100;0;-9.8;0], 10)

eulerballistic.m

function z = eulerballistic(f, z0, deltat)
z = z0;
i = 1;
while z(2,i) > 0
   zprime = f(z(5,i), z(:,i))
   z(:,i+1) = z(:,i) + deltat*zprime;
   
   i = i + 1;
   if i > 100
       break;
   end
end
z = z(:, 1:end-1);
end

调用点需要在函数名前加上限定符@。