1、实验目的
1)掌握矩阵的分析方法
2)掌握多项式的运算规则
3)掌握数据的分析与统计
4)掌握函数分析与数值积分
2、实验内容
2.1 矩阵分析
2.1.1 范数
a=[1, 2, 3; 4, 3, 1; 5, 3, 8]
n=norm(a) % n = 11.2269
n=norm(a,2) % n = 11.2269
b=[1 2 4 3 5] % 1 2 4 3 5
m=norm(b,2) % m = 7.4162
2.1.2 矩阵求逆inv(A),行列式值:det(A)
a=[1,2,3;4,3,1;5,3,8]
inv(a)
det(a)
a*inv(a)
2.1.3 线性方程组的解
例1. m=n & det(A)≠0
A = [6 3 4;-2 5 7;8 -4 -3]
B = [3 -4 -7]'
X = A\B
det(A)
例2. m>n, 超定方程组
A(4,:) = [1 5 -7]
B(4,:) = [9]
X = A\B
例3. m<n, 解不唯一
A=[2,4,2,1;-1,2,0,2;3,5,2,1]
B=[1;4;6]
X = A\B
2.1.4 矩阵分解-lu分解
A=[2,4,1; -1,2,2;3,5,1]
[L,U,P]=lu(A)
[L,U]=lu(A)
试比较结果的不同及原因
2.1.5 矩阵特征值
A=[0,-6,-1;6,2,-16;-5,20,-10]
lanmuda=eig(A)
[V,D]=eig(A)
2.1.6 矩阵的幂次运算
A=[1 1 1;1 2 3;2 3 5]
X=A^3
Y=A^(-3)
Z=A^(2/3)
2^A
exp(A)
2.2 多项式运算
2.2.1 多项式表示及其四则运算
a=[1 2 3 4]
b=[2 3]
b=[0 0 b]
c=a+b
a=[1 2]; b=[1 3];
c=conv(a,b)
[q,r]=deconv(c,a)
2.2.2 多项式求导函数polyder
例1
a=[1,4,3], b=[1,3]
c=polyder(a)
d=polyder(b)
例2
a=[1,1]
b=[1,2]
c=polyder(a,b)
conv(a,b)
2.2.3 多项式求根
p =[ 1 -12 0 25 116]
r=roots(p)
由根求多项式:poly
r = [-1,-2]’
poly(r)
2.2.4 多项式求值
例1:利用m文件运行下列程序
% 求H(jw)并画图
figure(1)
a1=[2,4,6,8];b1=[3,6,9];
w=linspace(0,10);
A=polyval(a1,j*w);
B=polyval(b1,j*w);
subplot(2,1,1),
plot(w,abs(B./A))
subplot(2,1,2)
plot(w,angle(B./A))
例2:利用m文件运行下列程序
figure(2)
w1=logspace(-1,1);
H=polyval(b1,j*w1)./polyval(a1,j*w1);
subplot(2,1,1)
semilogx(w1,abs(H))
subplot(2,1,2)
semilogx(w1,angle(H))
例3:求的时域响应并画图。
num=[3,0.5,4];
den=[1,5,4,7];
[r,p,k]=residue(num,den)
clf
t=[0:0.2:10];
y=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t)+r(3)*exp(p(3)*t);
plot(t,y)
2.2.5 多项式拟合
线性拟和
x=[0:10]
y=exp(-0.1*x)+0.5
p=polyfit(x,y,1)
z=p(1)*x+p(2);
plot(x,y,x,z)
二次拟和
x=[0:10]
y=exp(-0.1*x)+0.5
p=polyfit(x,y,3)
z1=p(1)*x.^3+p(2)*x.^2+p(3)*x+p(4);
z2=p(1)*x.^3+p(2)*x.^2+p(3)*x+p(4)+0.01;
figure (1)
plot(x,y,'r',x,z1,'bp')
figure (2)
plot(x,y,'r-',x,z2,'b-.')
2.2.6 多项式插值
x=0:9;
y=[0,1.8,2.1,0.9,0.2,-0.5,-0.2,-1.7,-0.9,-0.3];
x1=0:0.01:9;
y1=interp1(x,y,x1,'*nearset');
y2=interp1(x,y,x1,'*linear');
y3=interp1(x,y,x1,'spline');
y4=interp1(x,y,x1,'cubic');
plot(x,y,'ok',x1,y1,'-r',x1,y2,'-.b',x1,y3,':c',x1,y4,'--k')
legend('原始数据','最近点插值','线性插值','样条插值','立方插值')
2.3 数据的分析与统计
2.3.1 最大/小值函数
clear x,y
x=[1 2;3 4]
y=[5 6;7 8]
a=max(x)
b=min(y)
2.3.2 平均值、中间值及元素和函数
x=[3,4,1,7,8,9,6]
N=mean(x)
M=median(x)
s=sum(x)
2.3.3 标准偏差函数
x=[3,4,1,7,8,9,6]
s1=std(x)
s2=std(x, 0)
s3=std(x,1)
2.3.4 排序函数
x=[3,4,1,7,8,9,6]
A=sort(x)
[B,index]=sort(x)
2.3.5 元素乘积函数
x1=[3 2 4]
y=prod(x1)
x2=[1 2;3 4]
y2=prod(x2)
x3(:,:,1)=[1 2;3 4]
x3(:,:,2)=[2 3;4 2]
y3=prod(x3)
2.3.6 求元素之差
x=[1 3 2]
a=diff(x,1)
b=diff(x,2)
2.4 函数分析与数值积分
2.4.1 函数的表示与调用
function y=humps(x)
y=1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6
% 以humps.m存放在当前目录中,以备调用。
调用:
y=humps(0.5)
2.4.2 函数图形的绘制-1
fplot('humps',[0,2])
f='2*exp(-x)*sin(x)'
fplot(f,[0,8]);
2.4.3 函数图形的绘制-2
% 李撒如图形
x='sin(t)'
y='cos(t)'
z='sin(t+pi)'
figure(1),ezplot(x,y,[0,2*pi])
figure(2),ezplot(x,z,[0,2*pi])
2.4.4 数值积分
x='sin(t)'
q=quad(x,0,pi)
2.4.5 初始值的常微分方程求解
% 函数子程序,文件名:exampfun.m,单独存放
function y=exampfun(t,x)
u=1-(t.^2)/(pi^2);
y=[0,1;-1,0]*x+[0;1]*u;
% 主程序,单独存放,文件名不限
clf
t0=0;
tf=3*pi;
x0t=[0;0];
[t,x]=ode45('exampfun',[t0,tf],x0t);
y=x(:,1);
y2=[];
for i=1:length(t)
y2(i)=(1+2/(pi^2))*(1-cos(t(i)))-t(i)^2/(pi^2);
end
u=1-(t.^2)/(pi^2);
plot(t,y,'-',t,u,'+',t,y2,'o')
legend('数值积分解','输入量','解析解');