我有三个函数,我想要两个变量来运行所有函数。我试过这样做:
R = rot(mir(sca(P(1,:),P(2,:))));
然而我收到此错误:
Error using mir (line 2)
Not enough input arguments.
有什么建议吗?
%rot.m
function rot = rot(x,y)
rot = [ cos(pi/6)*x-sin(pi/6)*y; sin(pi/6)*x+cos(pi/6)*y ];
%mir.m
function mir = mir(x,y)
mir = [x;(-y)];
%sca.m
function sca = sca(x,y)
sca = [2*x;2*y];
答案 0 :(得分:1)
你不应该对这个错误感到惊讶。函数mir
期望两个参数(实际上,所有函数都期望这样),但是只提供一个参数。请注意,矩阵被认为是一个参数。您可以执行以下任一操作来解决问题:
重新定义mir
接受一个参数并将其在函数内拆分为两个单独的变量
重新定义sca
以返回两个值:
function [outx, outy] = sca(x, y)
outx = 2 * x;
outy = 2 * y;
然后将它们传递给mir
,如下所示:
[scax, scay] = sca(x, y);
mir(scax, scay);
显然,同样需要对rot
进行操作。
答案 1 :(得分:0)
在MATLAB中,如果您有多个输出参数,则必须明确指定输出变量。默认情况下,函数始终返回一个(第一个)参数。
在您的情况下,一种选择可以是改变函数的定义,使得它们只接收一个输入参数作为矩阵。例如:
%mir.m
function mir = mir(xy)
mir = [xy(1,:); -xy(2,:)];
在这种情况下甚至更容易(您也可以简化其他功能):
function xy = mir(xy)
xy(2,:) = -xy(2,:);
我希望你明白了。
然后你可以运行:
R = rot(mir(sca(P(1:2,:))));
如果由于某种原因无法更改功能定义,则必须将单行调用拆分为三行,分为3行:
S = sca(P(1,:),P(2,:));
M = mir(S(1,:),S(2,:));
R = rot(M(1,:),M(2,:));