matlab命令大全.docx
《matlab命令大全.docx》由会员分享,可在线阅读,更多相关《matlab命令大全.docx(15页珍藏版)》请在冰豆网上搜索。
matlab命令大全
绘制正弦曲线和余弦曲线。
x=[0:
0.5:
360]*pi/180;
plot(x,sin(x),x,cos(x));
求方程3x4+7x3+9x2-23=0的全部根。
p=[3,7,9,0,-23];%建立多项式系数向量
x=roots(p)%求根
用求特征值的方法解方程。
3x5-7x4+5x2+2x-18=0
p=[3,-7,0,5,2,-18];
A=compan(p);%A的伴随矩阵
x1=eig(A)%求A的特征值
x2=roots(p)%直接求多项式p的零点
求积分
quad('x.*log(1+x)',0,1)
求解线性方程组。
a=[2,-3,1;8,3,2;45,1,-9];
b=[4;2;17];
x=inv(a)*b
abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。
用于取整的函数有fix、floor、ceil、round,要注意它们的区别。
rem与mod函数的区别。
rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。
在MATLAB中,还可以用linspace函数产生行向量。
其调用格式为:
linspace(a,b,n)
其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
显然,linspace(a,b,n)与a:
(b-a)/(n-1):
b等价。
常用的产生通用特殊矩阵的函数有:
zeros:
产生全0矩阵(零矩阵)。
ones:
产生全1矩阵(幺矩阵)。
eye:
产生单位矩阵。
rand:
产生0~1间均匀分布的随机矩阵。
randn:
产生均值为0,方差为1的标准正态分布随机矩阵。
分别建立3×3、3×2和与矩阵A同样大小的零矩阵。
(1)建立一个3×3零矩阵。
zeros(3)
(2)建立一个3×2零矩阵。
zeros(3,2)
(3)设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。
A=[123;456];%产生一个2×3阶矩阵A
zeros(size(A))%产生一个与矩阵A同样大小的零矩阵
(1)在区间[20,50]内均匀分布的5阶随机矩阵。
(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。
命令如下:
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
求(x+y)5的展开式。
在MATLAB命令窗口,输入命令:
pascal(6)
矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。
点运算符有.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
1.矩阵平方根sqrtm
sqrtm(A)计算矩阵A的平方根。
2.矩阵对数logm
logm(A)计算矩阵A的自然对数。
此函数输入参数的条件与输出结果间的关系和函数sqrtm(A)完全一样
求一元二次方程ax2+bx+c=0的根。
程序如下:
a=input('a=?
');
b=input('b=?
');
c=input('c=?
');
d=b*b-4*a*c;
x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];
disp(['x1=',num2str(x
(1)),',x2=',num2str(x
(2))]);
计算分段函数的值。
x=input('请输入x的值:
');
ifx<=0
y=(x+sqrt(pi))/exp
(2);
else
y=log(x+sqrt(1+x*x))/2;
end
Y
先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序如下:
A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.*B;
end
C
lasterr%显示出错原因
一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。
输出全部水仙花数。
form=100:
999
m1=fix(m/100);%求m的百位数字
m2=rem(fix(m/10),10);%求m的十位数字
m3=rem(m,10);%求m的个位数字
ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
例3-14编写函数文件求半径为r的圆的面积和周长。
function[s,p]=fcircle(r)
%CIRCLEcalculatetheareaandperimeterofacircleofradiir
%r圆半径
%s圆面积
%p圆周长
%2004年7月30日编
s=pi*r*r;
p=2*pi*r;
例3-15利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。
function[rho,theta]=tran(x,y)
rho=sqrt(x*x+y*y);
theta=atan(y/x);
调用tran.m的命令文件main1.m:
x=input('Pleaseinputx=:
');
y=input('Pleaseinputy=:
');
[rho,the]=tran(x,y);
rho
the
利用MATLAB产生指数序列x[k]=Kaku[k]
a=input('输入指数a=');
K=input('输入常数K=');
N=input('输入序列长度N=');
k=0:
N-1;
x=K*a.^k;
stem(k,x);
xlabel('时间');ylabel('幅度');
title(['\alpha=',num2str(a)]);
利用MATLAB函数conv计算两个序列的离散卷积。
x=[-0.5,0,0.5,1];kx=-1:
2;
h=[1,1,1];kh=-2:
0;
y=conv(x,h);
k=kx
(1)+kh
(1):
kx(end)+kh(end);
stem(k,y);
xlabel('k');ylabel('y');
%ComputationofSequenceDTFT
b=[1];
a1=[1-0.9];a2=[10.9];
w=linspace(0,2*pi,512);
X1=freqz(b,a1,w);
X2=freqz(b,a2,w);
plot(w/pi,abs(X1),w/pi,abs(X2),':
');
legend('\alpha=0.9','\alpha=-0.9');
已知输入信号为角频率分别为0.1和0.4的离散正弦信号。
设计简单FIR高通滤波器,滤除低频分量,保留高频分量。
%信号通过简单FIRDF的响应
%Setupthefiltercoefficients
a=1;
b=[-6.7619513.456335-6.76195];
%Generatethetwosinusoidalsequences
N=100;k=0:
N-1;
x1=cos(0.1*k);
x2=cos(0.4*k);
%Generatethefilteroutputsequence
y=filter(b,a,x1+x2);
plot(k,y,'r',k,x2,'b--',k,x1+x2,'k:
');
axis([0100-24]);
ylabel('Amplitude');xlabel('Timeindexk');
legend('y[k]','x2[k]','x1[k]+x2[k]');
试求下面系统函数的零极点形式二阶因子形式。
%Determinationofthefactoredformand
%thesecondordersectionformofa
%rationalz-transform
b=[100.040];
a=[1-0.80.16-0.128];
[z,p,k]=tf2zp(b,a);
disp('Zerosareat');disp(z);
disp('Polesareat');disp(p);
disp('Gainconstant');disp(k);
sos=zp2sos(z,p,k);
disp('Second-ordersections');
disp(real(sos));
已知一离散因果的LTI系统的系统函数为
画出z平面的零极点分布图。
%zerosandpolesofthetransferfunction
b=[1210];
a=[1-0.5-0.0050.3];
zplane(b,a);
已知一段语音信号中混入了一频率fn=1200Hz正弦型噪音信号。
抽样频率fsam=22050Hz。
试用二阶带阻滤波器滤除语音信号中的噪音信号。
Fn=1200;W3dB=0.06;
%读入语音信号
[x,Fs]=wavread('sample2');
%播放语音信号
sound(x,Fs);pause;
%设计滤波器
W0=2*pi*Fn/Fs;
beta=cos(W0);
alpha=min(roots([1-2/cos(W3dB)1]));
a=[1,-beta*(1+alpha),alpha];
b=[1-2*beta1]*(1+alpha)/2;
%信号滤波
y=filter(b,a,x);
%播放滤波后语音信号
sound(y,Fs);
利用MATLAB计算16点序列x[k]的512点DFT
N=16;
k=0:
N-1;L=0:
511;
x=cos(2*pi*k*4./16);
X=fft(x);
plot(k/16,abs(X),'o');
holdon
XE=fft(x,512);
plot(L/512,abs(XE))
利用MATLAB由DFT计算x[k]*h[k]。
x[k]={1,2,0,1},h[k]={2,2,1,1}
%CalculateLinearConvolutionbyDFT
x=[1201];
h=[2211];
%determinethelengthforzeropadding
L=length(x)+length(h)-1;
%ComputetheDFTsbyzero-padding
XE=fft(x,L);
HE=fft(h,L);
%DeterminetheIDFToftheproduct
y1=ifft(XE.*HE);
已知一连续信号为
;
。
若以抽样频率
Hz对该信号进行抽样,试求由DFT分析其频谱时,能够分辨此两个谱峰所需的最少样本点数。
N=30;%数据的长度
L=512;%DFT的点数
f1=100;f2=120;
fs=600;%抽样频率
T=1/fs;%抽样间隔
ws=2*pi*fs;
t=(0:
N-1)*T;
x=cos(2*pi*f1*t)+cos(2*pi*f2*t);
X=fftshift(fft(x,L));
w=(-ws/2+(0:
L-1)*ws/L)/(2*pi);
plot(w,abs(X));
ylabel(‘幅度谱’);
N=50;%数据的长度
L=512;%DFT的点数
f1=100;f2=150;
fs=600;%抽样频率
T=1/fs;%抽样间隔
ws=2*pi*fs;
t=(0:
N-1)*T;
f=cos(2*pi*f1*t)+0.15*cos(2*pi*f2*t);
wh=(hamming(N))';
f=f.*wh;
F=fftshift(fft(f,L));
w=(-ws/2+(0:
L-1)*ws/L)/(2*pi);
plot(w,abs(F));
ylabel('幅度谱')
利用MATLAB设计BWLP
[N,wc]=buttord(wp,ws,Ap,As,'s')
确定模拟Butterworthfilter的阶数N和3-dB截频wc。
wc是由阻带参数确定的。
's'表示模拟域。
[num,den]=butter(N,wc,'s')
确定阶数为N,3-dB截频为wc(radian/s)的Butterworthfilter分子和分母多项式。
's'表示模拟域。
[z,p,k]=buttap(N)
确定N阶归一化的Butterworthfilter的零点、极点和增益(gain)
设计满足下列条件的模拟Butterworth低通滤波器fp=1kHz,fs=2kHz,Ap=1dB,As=40dB
Wp=2*pi*1000;Ws=2*pi*2000;Ap=1;As=40;
[N,Wc]=buttord(Wp,Ws,Ap,As,'s');
fprintf('Orderofthefilter=%.0f\n',N)
[num,den]=butter(N,Wc,'s');
disp('Numeratorpolynomial');
fprintf('%.4e\n',num);
disp('Denominatorpolynomial');
fprintf('%.4e\n',den);
omega=[WpWs];h=freqs(num,den,omega);
fprintf('Ap=%.4f\n',-20*log10(abs(h
(1))));
fprintf('As=%.4f\n',-20*log10(abs(h
(2))));
omega=[0:
200:
12000*pi];
h=freqs(num,den,omega);
gain=20*log10(abs(h));plot(omega/(2*pi),gain);
xlabel('FrequencyinHz');ylabel('GainindB');
利用MATLAB设计CBILP
[N,wc]=cheb1ord(wp,ws,Ap,As,'s')
确定模拟Chebyshevfilter的阶数N。
wc=wp(rad/s)
[num,den]=cheby1(N,Ap,wc,'s')
确定阶数为N,通带截频为wc(radian/s)的Chebyshevfilter。
's'表示模拟域
[z,p,k]=cheb1ap(N,Ap);
确定N阶归一化的Chebyshevfilter的零点、极点和增益(gain)。
设计满足下列条件的模拟CBI型低通滤波器fp=1kHz,fs=2kHz,Ap=1dB,As=40dB
%filterspecification
Wp=2*pi*1000;Ws=2*pi*2000;Ap=1;As=40;%Computerfilterorder
[N,Wc]=cheb1ord(Wp,Ws,Ap,As,'s');
fprintf('Orderofthefilter=%.0f\n',N)%computefiltercoefficients
[num,den]=cheby1(N,Ap,Wc,'s');
disp('Numeratorpolynomial');
fprintf('%.4e\n',num);
disp('Denominatorpolynomial');
fprintf('%.4e\n',den);
设计满足下列条件的模拟CBI型低通滤波器
fp=1kHz,fs=2kHz,Ap=1dB,As=40dB%ComputeApandAsofdesignedfilter
omega=[WpWs];
h=freqs(num,den,omega);
fprintf('Ap=%.4f\n',-20*log10(abs(h
(1))));
fprintf('As=%.4f\n',-20*log10(abs(h
(2))));
利用MATLAB设计CBIILP
[N,wc]=cheb2ord(wp,ws,Ap,As,'s')
确定模拟切比雪夫II型滤波器的阶数N。
[num,den]=cheby2(N,As,wc,'s')
确定阶数为N,阻带衰减为AsdB的切比雪夫II型滤波器的分子和分母多项式。
wc由cheb2ord函数确定。
利用MATLAB设计椭圆低通滤波器
[N,wc]=ellipord(wp,ws,Ap,As,'s')
确定椭圆滤波器的阶数N。
wc=wp。
[num,den]=ellip(N,Ap,As,wc,'s')
确定阶数为N,通带衰减为ApdB,阻带衰减为AsdB的椭圆滤波器的分子和分母多项式。
wc是椭圆滤波器的通带截频。
设计满足下列条件的模拟BW型高通滤波器fp=5kHz,fs=1kHz,Ap1dB,As40dB
%高通滤波器的设计
wp=1/(2*pi*5000);ws=1/(2*pi*1000);Ap=1;As=40;
[N,Wc]=buttord(wp,ws,Ap,As,'s');
[num,den]=butter(N,Wc,'s');
disp('LP分子多项式');
fprintf('%.4e\n',num);
disp('LP分母多项式');
fprintf('%.4e\n',den);
[numt,dent]=lp2hp(num,den,1);
disp('HP分子多项式');
fprintf('%.4e\n',numt);
disp('HP分母多项式');
fprintf(‘%.4e\n’,dent);
试设计一个满足下列指标的BW型带通滤波wp1=6rad/s,wp2=8rad/s,ws1=4rad/s,ws2=11rad/s,Ap1dB,As32dB。
%带通滤波器的设计
wp=1;ws=3.3182;Ap=1;As=32;
w0=sqrt(48);B=2;
[N,Wc]=buttord(wp,ws,Ap,As,'s');
[num,den]=butter(N,Wc,'s');
[numt,dent]=lp2bp(num,den,w0,B);
w=linspace(2,12,1000);
h=freqs(numt,dent,w);
plot(w,20*log10(abs(h)));grid;
xlabel('Frequencyinrad/s');
ylabel('GainindB')
试设计一个满足下列指标的BW型带阻滤波器
Ap=1dB;As=20dB;wp1=10;wp2=30;ws1=19;ws2=21。
Ap=1;As=20;wp1=10;wp2=30;ws1=19;ws2=21;
B=ws2-ws1;w0=sqrt(ws1*ws2);
wLp1=B*wp1/(w0*w0-wp1*wp1);
wLp2=B*wp2/(w0*w0-wp2*wp2);
wLp=max(abs(wLp1),abs(wLp2));
[N,Wc]=buttord(wLp,1,Ap,As,'s')
[num,den]=butter(N,Wc,'s');[numt,dent]=lp2bs(num,den,w0,B);
w=linspace(5,35,1000);
h=freqs(numt,dent,w);
plot(w,20*log10(abs(h)));
w=[wp1ws1ws2wp2];
set(gca,'xtick',w);grid;
h=freqs(numt,dent,w);A=-20*log10(abs(h))
利用AF-BWfilter及脉冲响应不变法设计一DF,满足
Wp=0.2p,Ws=0.6p,Ap2dB,As15dB
%DesignDFBWlow-passfilterusingimpulseinvariance
%DFBWLPspecfication
Wp=0.2*pi;Ws=0.6*pi;Ap=2;As=15;
Fs=1;%Samplingfrequency(Hz)
%AnalogButterworthspecfication
wp=Wp*Fs;ws=Ws*Fs;
%determinetheorderofAFfilter
N=buttord(wp,ws,Ap,As,'s');
%determinethe3-dbcutofffrequencyofBWfilterfrompass-bandspecfication
wc=wp/(10^(0.1*Ap)-1)^(1/N/2);
%determinetheAF-BWfilter
[numa,dena]=butter(N,wc,'s');
利用AF-BWfilter及脉冲响应不变法设计一DF,满足
Wp=0.2p,Ws=0.6p,Ap2dB,As15dB
%determinetheDFfilter
[numd,dend]=impinvar(numa,dena,Fs);
%plotthefrequencyresponse
w=linspace(0,pi,1024);
h=freqz(numd,dend,w);
norm=max(abs(h));
numd=numd/norm;
plot(w/pi,20*log10(abs(h/norm)));
xlabel('Normalizedfrequency');
ylabel('Gain,dB');
%computerApAsofthedesignedfilter
w=[WpWs];
h=freqz(numd,dend,w);
fprintf('Ap=%.4f\n',-20*log10(abs(h
(1))));
fprintf('As=%.4f\n',-20*log10(abs(h
(2))));
用双线性变换法和一阶巴特沃思低通滤波器,设计一个3dB截频为Wp的数字滤波器,并与脉冲响应不变法设计的DF比较。
H双(z)和H脉(z)幅度响应比较的MATLAB实现
Wp=0.6*pi;
b=[1-exp(-Wp)];b1=tan(Wp/2)*[11];
a=[1-exp(-Wp)];a1=[1+tan(Wp/2)tan(Wp/2)-1];
w=linspace(0,pi,512);
h=freqz(b,a,w);h1=freqz(b1,a1,w);
plot(w/pi,(abs(h)),w/pi,(abs(h1)));
xlabel('Normalizedfrequency');
ylabel('Amplitude');
set