MATLAB函数是否总是回显其输出参数?

wribegjk  于 2023-05-29  发布在  Matlab
关注(0)|答案(1)|浏览(293)

我正在定义一个简单的MATLAB函数,可以将直角坐标转换为极坐标。
函数的输入参数是一个直角坐标数组(x,y)。它的输出是另一个有序对:(r,θ),其中θ以度为单位。
对于所有有效的输入数组,该函数按预期工作。
问题是,MATLAB似乎“忽略”了一个分号,并回显了函数的输出参数,以及我想要的输出;使用fprintf函数打印的字符串。我不明白为什么
代码如下:

%This function converts from rectangular to polar coordinates.
function polar_pair = rect2polar(rectangular_pair)
r = sqrt((rectangular_pair(1)^2 + (rectangular_pair(2)^2)));
theta = rad2deg(atan(rectangular_pair(2) / rectangular_pair(1)));
polar_pair = [r theta];
fprintf('r = %2.2f\n, Angle = %3.2f\n', polar_pair);
end

我尝试删除格式化字符串,只留下函数的输出参数被分号抑制,它仍然打印输出参数:

%This function converts from rectangular to polar coordinates.
function polar_pair = rect2polar(rectangular_pair)
r = sqrt((rectangular_pair(1)^2 + (rectangular_pair(2)^2)));
theta = rad2deg(atan(rectangular_pair(2) / rectangular_pair(1)));
polar_pair = [r theta]; 
end

我理解这意味着函数将始终显示结果。
然后,我尝试重写代码,使输入作为单独的整数给出,而不是数组中的有序对。

%This function converts from rectangular to polar coordinates.
function [radius, angle_theta] = rect2polar(x_coordinate, y_coordinate)
  radius = sqrt((x_coordinate).^2 + (y_coordinate).^2);
  angle_theta = rad2deg(atan(y_coordinate ./ x_coordinate));
end

这一招奏效了。但我一直在想,是否有一种方法可以防止在第一个代码块中回显输出参数,以便更好地控制输出的显示方式。

t0ybt7op

t0ybt7op1#

如果你有某种功能

function out = myFunc( in )
   out = 10*in;
end

然后,在out=10*in;行上使用的分号将禁止在执行该行时在命令窗口中显示输出。但是,如果从代码中的其他地方调用它(如

myFunc( 5 )

如果没有分号,则函数本身的输出将显示在命令窗口中。
您可以通过两种方式来抑制这种情况。第一个是在调用函数时也添加一个分号(我怀疑这是你所遗漏的)

myFunc( 5 );

第二个是在函数中使用nargout

function out = myFunc( in )
   b = 10*in;
   if nargout > 0
      out = b;
   end
end

这将导致输出未定义,因此无法显示,如果函数被调用而没有任何输出,无论分号如何,例如。myFunc( 5 )
但是,如果您分配的输出a = myFunc( 5 )没有分号,则将显示a
当然,如果你包含一个fprintf语句,那么你直接要求命令窗口输出,我不认为这是一个令人惊讶的结果。

相关问题