MATLAB IF语句

时间:2012-08-28 20:22:52

标签: matlab

我是一名新的MATLAB用户。尝试将y初始化为if语句中的计算值。但是,当我尝试绘制y时,它表示未定义

function [y,xmax] = Alaw(x,A,ymax)

if nargin<3, ymax=1; end
if nargin<2, A=87.6; end


xmax=max(abs(x)); 

    temp = ymax/A;
if ((x > 0) & ( x < temp ))
    y = (A * abs(x)) ./ (1 + log(A) ).*sign(x);
end    

if (x > temp)
    y = ymax*( 1 + log(A*abs(x/ymax)) )./( 1+log(A) ).*sign(x);
end


 fprintf('Plotting Data ...\n');
 hold on;
 figure;
 plot(y);
 xlabel('x-axis');
 ylabel('y-axis');
 title('  A LAW ');

 pause;
 fprintf('Writing the audio file ...\n');
 wavwrite(y, 22050, 'Alaw.wav');


 end

2 个答案:

答案 0 :(得分:4)

如果x小于或等于零,或者x等于temp,则if语句都不为真,因此,y永远不会得到定义。您可能希望使用if..elseif..else重新编写逻辑,以确保在每种情况下都分配y

if ((x > 0) & ( x < temp ))
    y = (A * abs(x)) ./ (1 + log(A) ).*sign(x);
elseif (x > temp)
    y = ymax*( 1 + log(A*abs(x/ymax)) )./( 1+log(A) ).*sign(x);
else
    y = NaN(size(x)); % no valid y; this won't plot anything, but won't error
end

请注意,x>0是数组时,x会导致意外结果。如果all的全部或任何元素分别满足条件,请使用anyx以确保满足条件。

答案 1 :(得分:0)

适合我:

>> Alaw([1 2 3])
Plotting Data ...

ans =

1.0000    1.1267    1.2007

enter image description here