矩阵和数值分析实验作业Word格式文档下载.docx
《矩阵和数值分析实验作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《矩阵和数值分析实验作业Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
end
disp('
结果是:
'
S
有效数字的位数是:
i-1
b.运行结果:
2.从大到小
a.程序代码:
leijia2.m
pleaseinputN:
s=s+1/[(N-j+2)^2-1];
end%判断有效数字位数
b.运行结果:
二.解线性方程组
1.原题:
分别Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
迭代法计算停止条件为:
。
1>
.Jacobi迭代法:
Jacobi.m
A=input('
请输入矩阵A='
b=input('
请输入列向量b='
X=input('
请输入初始值X='
S=input('
请输入终止条件S='
max1=100;
%最大循环次数
B=diag(A);
G=diag(B);
%求对角阵
D=inv(G);
%求对角阵的逆矩阵
P=G-A;
fork=1:
max1
Y=D*P*X+D*b;
Z=abs(Y-X);
[t]=max(Z);
X=Y;
Ift<
S%终止条件
end
end%计算方程的解
X
2>
.G-S迭代法:
GS.m
C=diag(A);
P=diag(C);
%求A的对角阵
U=-triu(A)+P;
%求A的下三角阵
G=A+U;
fork=1:
Y=D*U*X+D*b;
if(t<
S)%终止条件
2.原题:
用Gauss列主元消去法、QR方法求解如下方程组:
.Gauss列主元消去法:
GAUSS.m
请输入系数矩阵A='
G=[A,b];
B=[];
%定义一个空矩阵
t=size(b);
%求系数矩阵的维数
k=t(1,1);
fori=1:
k
C=0;
fore=i:
C(e)=abs(G(e,i));
end
l=max(C);
%挑选最大值
l2=find(C==l);
l1=l2(1,1);
T=G(l1,:
G(l1,:
)=G(i,:
G(i,:
)=T;
%选主元,交换最大值所在的行
disp('
主元调整后的矩阵:
G
forj=i+1:
P=-G(j,i)/G(i,i);
B(j,:
)=P*G(i,:
)+G(j,:
G(j,:
)=B(j,:
end%进行消元
消元后的矩阵:
b=G(:
k+1);
G(:
k+1)=[];
X=[];
form=1:
X(k-m+1)=b(k-m+1)/G(k-m+1,k-m+1);
b=b-X(k-m+1)*G(:
k-m+1);
end%求方程组的解
方程组的解:
X
.QR法:
QR.m
m=size(A);
k=m(1,1);
%计算A的维数
B=A;
M=eye(size(A));
%定义一个与A同维数的单位矩阵
Q=M;
forr=1:
k-1;
I=eye(size(B));
e=I(:
1);
a=B(:
%取出B的第一列
d=norm(a);
w=a-d*e;
c=rot90(w);
H=I-2*w*c/(c*w);
%求变换矩阵
P=H*B;
B=P;
B(1,:
)=[];
B(:
1)=[];
fori=1:
k-r+1
forj=1:
M(r+i-1,r+j-1)=H(i,j);
end%将变换矩阵H变成k维
Z=M;
M=eye(size(A));
Q=Z*Q;
Q
R=Q*A;
R
b=Q*b;
foru=1:
X(k-u+1)=b(k-u+1)/R(k-u+1,k-u+1);
b=b-X(k-u+1)*R(:
k-u+1);
end%计算方程组的解
三.非线性方程的迭代解法
1.原题:
用Newton迭代法求解方程
的根,计算停止的条件为:
newton.m
symsx;
f=input('
请以x为变量输入函数f='
s=input('
请输入终止条件s='
%最大循环次数
p=diff(f);
%求f的导函数
y=X-subs(f,X)/subs(p,X);
%迭代公式
m=abs(y-X);
X=y;
if(m<
s)%终止条件
方程的根:
a.运行结果:
2.原题:
利用Newton迭代法求多项式
的所有实零点,注意重根的问题。
new.m
functionX=newton1(X,s)
f=x^4-5.4*x^3+10.56*x^2-8.954*x+2.7951;
max1=20;
s)
end%定义一个newton迭代法求线性方程组的的函数
请以x为变量输入多项式f='
c=input('
请输入多项式的次数c='
a=input('
请输入根所在的估计的最大区间的左端点a='
请输入根所在的估计的最大区间的右端点b='
n=input('
请输入将[a,b]区间分成的个数n='
请输入newton搜索时的终止条件s='
A=a:
(b-a)/n:
b;
%将区间n等分
n等分后的区间为:
A
n
Y(i)=subs(f,A(i));
Y(i+1)=subs(f,A(i+1));
ifY(i)*Y(i+1)<
M(i)=newton1(A(i),s);
elseifabs(Y(i))==0
M(i)=A(i);
%求多项式的根
B=find(M~=0);
k1=size(B);
k=k1(1,2);
forkk=1:
X(kk)=M(B(kk));
%将根以矩阵形式表示
多项式的根为:
p=0;
c1=c-k;
forj=1:
q=f;
fore=1:
c1+1
q=diff(q,x);
y=subs(q,X(j));
ifabs(y)>
=100*s
end%判断根的重数
ife>
1
根的重数:
X(j)
的重数:
disp(e);
p=p+e-1;
%对根重数大于1的重数进行累加
ifp==k-c
break%判断重数是否已达到总重数
四.数值积分
分别用复化梯形公式和Romberg公式计算积分
要求误差不超过10-5,并给出节点个数。
.复化梯形公式:
fuhuatixing.m
formatlong;
请以x为自变量输入函数f='
请输入积分区域左端点a='
请输入积分区域右端点b='
n=100;
X=a:
t1=0;
fa=subs(f,a);
fb=subs(f,b);
fori=2:
t1=t1+subs(f,X(i));
T(i)=(b-a)*(fa+fb+2*t1)/(2*n);
%用复化梯形公式计算积分结果
if(T(i)-T(i-1))<
=s
积分结果:
T(i)
.Romberg公式:
romberg.m
T(1,1)=1/2*(subs(f,a)+subs(f,b));
q1=0;
(2^(i-2))
q1=q1+subs(f,(a+(2*(e-1)+1)*(b-a)/2^(i-1)));
q=(b-a)*q1/2^(i-1);
T(i,1)=1/2*T(i-1,1)+q;
%计算复化梯形得出的值
forj=2:
i
T(i,j)=(4^(j-1)*T(i,j-1)-T(i-1,j-1))/(4^(j-1)-1);
%计算n大于2时复化newton-cotes的值
ifabs(T(i,i)-T(i-1,i-1))<
s%判断条件
T数表:
T
T(i,i)