1

我试图弄清楚如何通过 Windows cmd-promt 使用 Matlab,但由于一种神秘的行为而被卡住了。

为了测试,我有以下函数文件:

function [ x y ] = testmath( u,v )

x = u*v;
y = u/v;

display(x);
display(y);

end

当我在 Matlab 提示符下执行此操作时,我得到正确的结果:

[x y] = testmath(2,2)
>> x = 4
>> y = 1

现在我想通过以下方式运行该功能cmd

matlab -sd myCurrentDirectory -r "testmath 2 2" -nodesktop -nosplash

我得到:

x = 2500;
y = 1;

你能重现它吗?可能是什么原因?传递参数是不是我犯了错误?

4

1 回答 1

5

在 Windowscmd版本中,您使用两个字符参数 ( '2') 调用它,因为您忘记了括号。正确的版本是:

matlab -sd myCurrentDirectory -r "testmath(2,2)" -nodesktop -nosplash

在 MATLAB 命令提示符下重现“奇数”结果:

>> [x, y] = testmath 2 2
x = 
    2500
y = 
    1

>> [x, y] = testmath(2,2)
x = 
    4
y = 
    1

结果是 2500,因为字符的 ASCII 码'2'是 50。MATLAB 在将乘法运算符应用于一个或两个字符时使用这个数字。

这称为功能/命令二元性;不带括号传递的参数被解释为字符串。如同

>> disp hello
hello

>> disp('hello')
hello

或者

>> load myFile.dat 
>> load('myFile.dat')

它既方便又令人困惑(正如您刚刚注意到的那样:)

于 2013-09-11T15:34:13.727 回答