今天我在MATLAB中练习使用类时遇到了一个奇怪的问题。似乎MATLAB无法解析对象周围的括号。
我创建了一个名为vector的用户定义类,它具有各种属性:x和y方向的幅度,角度,长度。我重载了一元减号运算符,以便我可以
a = vector(5,50) % creates a vector with magnitude 5 and angle 50 (in degrees)
a.ang % prints the angle
b = -a
b.ang % 230 degrees
这一切都很好,但是我想要在一行中找到-a的角度。你期待像
这样的东西(-a).ang
工作,但我得到了
(-a).ang
|
Error: Unexpected MATLAB operator.
我无法使用
-a.ang
因为点运算符的优先级高于减号。是什么解释为什么matlab不能解析对象周围的括号?
编辑:这是我创建的矢量类。
classdef vector
properties
mag
ang % in degrees
x
y
end
methods
function v = vector(mag,ang)
if nargin == 2
v.mag = mag;
v.ang = ang;
v.x = mag*cosd(ang);
v.y = mag*sind(ang);
end
end
function res = plus(u,v)
x = u.x + v.x;
y = u.y + v.y;
res = vector(norm([x,y]), atan2d(y,x));
end
function res = minus(u,v)
x = u.x - v.x;
y = u.y - v.y;
res = vector(norm([x,y]), atan2d(y,x));
end
function res = uminus(v)
res = vector;
res.x = -v.x;
res.y = -v.y;
res.mag = v.mag;
res.ang = mod(v.ang+180,360);
end
end
end
答案 0 :(得分:2)
我想我找到了答案。通常,Matlab不支持链接在一起的两组括号,因为它可以是索引或函数调用。
MATLAB的解析器有限,部分原因是历史原因。它永远不会 由于含糊不清,有可能做f(4)(1)之类的事情。这是否意味着f(4)是一个函数句柄然后我们想要将1传递给该函数或者它是否意味着f是一个函数,我们将4传递给该函数,它返回一个向量然后我们索引到第一个那个元素?好吧,解析器也不知道。它可以定义,但直到现在还没有。
来源:https://www.mathworks.com/matlabcentral/newsreader/view_thread/280225
此外,一旦我意识到两个并排的括号是问题,似乎主要的解决方法是:
这些解决方法在以下链接的前两个答案中进行了解释。
感谢您查看我的问题!
答案 1 :(得分:1)
我无法复制矢量函数,但是对于像这样的简单结构
a.ang=[2,4,6,8]
你需要的是
-a.ang
而不是
(-a).ang
将重现您提到的错误