在数学和工程计算中,经常需要求绝对值。MATLAB中提供了abs函数来计算实数、复数和矩阵的绝对值。本文将介绍MATLAB中abs函数的实现原理、使用方法和注意事项。
abs函数的基本用法
求实数的绝对值
求复数的模
求矩阵的模
abs函数与符号函数之间的关系
abs函数与角度函数之间的关系
对复数的实部和虚部求绝对值
对矩阵按列求模
对矩阵按行求模
对矩阵按元素求模
abs函数的性质
abs函数在图像处理中的应用
abs函数在信号处理中的应用
注意事项:MATLAB中abs函数输入输出类型转换的问题
MATLAB中abs函数的实现原理、使用方法和应用场景
abs函数的基本用法
MATLAB中使用abs函数可以求解实数、复数或者矩阵的绝对值。其调用格式为y=abs(x),其中x可以是任意实数、复数或者矩阵。下面是一些基本用法的例子:
y=abs(-5)%输出结果为5
y=abs(3+4i)%输出结果为5
A=[-123;45-6;-789];
y=abs(A)%输出结果为[123;456;789]
求实数的绝对值
对于实数x,其绝对值等于x本身当x>=0时,等于-x当x<0时。在MATLAB中,可以使用abs函数来求解实数的绝对值,如下所示:
y=abs(x)
求复数的模
对于复数z=a+b*i,其模定义为|z|=sqrt(a^2+b^2)。在MATLAB中,可以使用abs函数来计算复数的模,如下所示:
z=a+b*i;
y=abs(z);
求矩阵的模
对于矩阵A=[a11,a12,...,a1n;a21,a22,...,a2n;...;am1,am2,...,amn],可以将其看作是由m个n维列向量组成的矩阵。对于每个列向量v=[a11,a21,...,am1]',可以使用abs函数来计算其模|v|=sqrt(a11^2+a21^2+...+am1^2)。将所有的列向量的模组成一个行向量即可得到矩阵A的模。
y=abs(A)
abs函数与符号函数之间的关系
在MATLAB中,符号函数sign(x)返回x的符号,即x>0时返回1,x=0时返回0,x<0时返回-1。可以发现,绝对值和符号函数之间存在如下关系:
abs(x)=|x|=[sign(x)]*x
abs函数与角度函数之间的关系
在MATLAB中,角度函数angle(z)返回复数z的幅角,即z=a+b*i时,angle(z)=atan2(b,a),其中atan2函数可以返回a和b的反正切值。可以发现,绝对值和角度函数之间存在如下关系:
abs(z)=|z|=sqrt(a^2+b^2)=exp(j*angle(z))
对复数的实部和虚部求绝对值
在MATLAB中,对于复数z=a+b*i,其实部为a,虚部为b。可以将其看作是一个实部向量和一个虚部向量组成的复数。使用abs函数可以分别求出实部向量和虚部向量的模,如下所示:
y1=abs(real(z));
y2=abs(imag(z));
对矩阵按列求模
在MATLAB中,可以使用abs函数按列求矩阵的模。具体做法是先将矩阵转置为行向量组成的矩阵,然后按行求模即可,如下所示:
y=abs(A');
y=y';
对矩阵按行求模
在MATLAB中,可以使用abs函数按行求矩阵的模。具体做法是对于每一行使用abs函数求出其模,然后将结果组成一个行向量即可,如下所示:
y=zeros(1,size(A,1));
fori=1:size(A,1)
y(i)=abs(A(i,:));
end
对矩阵按元素求模
在MATLAB中,可以使用abs函数按元素求矩阵的模。具体做法是对于每一个元素使用abs函数求出其模,然后将结果组成一个和原矩阵大小相同的矩阵即可,如下所示:
B=zeros(size(A));
fori=1:size(A,1)
forj=1:size(A,2)
B(i,j)=abs(A(i,j));
end
end
abs函数的性质
在MATLAB中,abs函数有如下性质:
1.对于实数x,其绝对值等于x本身当x>=0时,等于-x当x<0时。
2.对于复数z=a+b*i,其模定义为|z|=sqrt(a^2+b^2)。
3.对于矩阵A=[a11,a12,...,a1n;a21,a22,...,a2n;...;am1,am2,...,amn],可以将其看作是由m个n维列向量组成的矩阵。对于每个列向量v=[a11,a21,...,am1]',可以使用abs函数来计算其模|v|=sqrt(a11^2+a21^2+...+am1^2)。将所有的列向量的模组成一个行向量即可得到矩阵A的模。
4.绝对值和符号函数之间存在如下关系:abs(x)=|x|=[sign(x)]*x。
5.绝对值和角度函数之间存在如下关系:abs(z)=|z|=sqrt(a^2+b^2)=exp(j*angle(z))。
abs函数在图像处理中的应用
在MATLAB中,可以使用abs函数来处理图像,如下所示:
1.对于灰度图像I,可以使用abs函数求出其边缘强度图像:
I=imread('lena.png');
I=im2double(I);
Hx=[-101;-202;-101];
Hy=[-1-2-1;000;121];
Gx=conv2(I,Hx,'same');
Gy=conv2(I,Hy,'same');
G=sqrt(Gx.^2+Gy.^2);
G=abs(G);
imshow(G);
2.对于彩色图像I,可以将其转换为灰度图像,并使用abs函数求出其边缘强度图像:
I=imread('lena.png');
I=im2double(I);
G=zeros(size(I,1),size(I,2));
fori=1:3
Hx=[-101;-202;-101];
Hy=[-1-2-1;000;121];
Gx=conv2(I(:,:,i),Hx,'same');
Gy=conv2(I(:,:,i),Hy,'same');
G=G+Gx.^2+Gy.^2;
end
G=sqrt(G);
G=abs(G);
imshow(G);
abs函数在信号处理中的应用
在MATLAB中,可以使用abs函数来处理信号,如下所示:
1.对于一段音频信号y,可以使用abs函数求出其振幅谱A和相位谱P:
[y,Fs]=audioread('handel.wav');
Y=fft(y);
A=abs(Y);
P=angle(Y);
2.对于一段语音信号y,可以使用abs函数求出其短时能量E和过零率Z:
[y,Fs]=audioread('spoken_digit_0.wav');
window=hamming(320,'periodic');
noverlap=160;
[S,F,T]=spectrogram(y,window,noverlap,512,Fs);
E=sum(abs(S),1);
Z=sum((sign(S(:,2:end))-sign(S(:,1:end-1)))~=0,1);
注意事项:MATLAB中abs函数输入输出类型转换的问题
在MATLAB中,abs函数有一个很重要的注意事项,就是输入的类型和输出的类型可能会发生转换。具体来说,如果输入是单精度浮点数,则输出也是单精度浮点数;如果输入是双精度浮点数,则输出也是双精度浮点数。这种类型转换可能会导致精度的损失,因此在使用abs函数时需要注意输入的类型和输出的类型。
MATLAB中abs函数的实现原理、使用方法和应用场景
本文介绍了MATLAB中abs函数的实现原理、使用方法和应用场景。在MATLAB中,abs函数可以用来求解实数、复数或者矩阵的绝对值,以及进行图像处理和信号处理。需要注意的是,在使用abs函数时需要注意输入的类型和输出的类型可能会发生转换。



