我正在定义一个简单的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
这一招奏效了。但我一直在想,是否有一种方法可以防止在第一个代码块中回显输出参数,以便更好地控制输出的显示方式。
1条答案
按热度按时间t0ybt7op1#
如果你有某种功能
然后,在
out=10*in;
行上使用的分号将禁止在执行该行时在命令窗口中显示输出。但是,如果从代码中的其他地方调用它(如如果没有分号,则函数本身的输出将显示在命令窗口中。
您可以通过两种方式来抑制这种情况。第一个是在调用函数时也添加一个分号(我怀疑这是你所遗漏的)
第二个是在函数中使用
nargout
这将导致输出未定义,因此无法显示,如果函数被调用而没有任何输出,无论分号如何,例如。
myFunc( 5 )
。但是,如果您分配的输出
a = myFunc( 5 )
没有分号,则将显示a
。当然,如果你包含一个
fprintf
语句,那么你直接要求命令窗口输出,我不认为这是一个令人惊讶的结果。