大连理工大学矩阵与数值分析MATLAB上机实验

  • 格式:pdf
  • 大小:912.87 KB
  • 文档页数:18

二、解线性方程组 1.分别 Jacobi 迭代法和 Gauss-Seidel 迭代法求解线性方程组
3 1 0 0 x1 1 1 3 1 0 x2 0 , 0 1 2 1 x3 0 0 0 1 3 x4 0
Gauss 列主元消去法程序:
clc; clear; format long a=[2,4,3,1;8,2,0,0;5,0,4,0;9,0,0,5]; %系数矩阵 b=[12;6;23;16]; [n,m]=size(a); nb=length(b); det=1; for k=1:n-1 amax=0; for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k)); r=i; end end if amax<1e-10 return; end if r>k for j=k:n z=a(k,j); a(k,j)=a(r,j); a(r,j)=z; end z=b(k);
从小到大求和程序计算结果:
N 100 10000 1000000 从小到大求和程序得 到的 SN 0.497512437810945 0.499975001249937 0.499999750000134 真实值������������ = ������ 2������ + 1 0.497512437810945 0.499975001249937 0.499999750000125 计算值有效位数 15 15 13
8
2
1 dx x
复化梯形公式程序
clc; clear; format long syms t m=int(1/t,2,8); %真实值 a=2; b=8; n=300; h=(b-a)/n; sum=0; f=inline('1/x'); for i=1:n-1 sum=sum+f(a+i.*h); end T=h/2*(f(a)+2*sum+f(b))
b(k)=b(r); b(r)=z; det=-det; end for i=k+1:n m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); end det=det*a(n,n); for k=n:-1:1 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k); end x=x'
f ' ( xk ) f ( xk ) f ( xk 1 ) ,即用割线代替切线,这引入了误差。 xk xk 1
2、生成一个列和为 1 的 100 阶随机矩阵,编写幂法程序求其最大特征值。
幂法程序
clc; clear; format long A=rand(100,100); for i=1:100 A(:,i)=A(:,i)/sum(A(:,i)); end N=100; %最大迭代次数 ep=1e-6; %精度要求 n=length(A); u=ones(n,1); k=0; m1=0; while k<=N v=A*u; m=max(abs(v)); u=v/m; if abs(m-m1)<ep break; end m1=m; k=k+1; %生成100阶随机矩阵 %使随机矩阵;列和为1
一、设 S N
j 1
N
1 4 j2 1
,分别编制从小到大和从大到小的顺序程序计算
S100 , S10000 , S1000000 ,
并指出有效位数。 从小到大求和程序:
clc; clear; format long S=0; N=100; %此处N分别取100,10000,1000000进行计算 for j=1:N S=S+1/(4*j^2-1); end S
复化梯形公式程序计算结果
分析
本程序将区间[2,8]进行了 300 等分,在命令行输入 abs(T-m),可得计算值与精确 值的误差为 7.812416996655358e-06,误差未超过 10-5,满足题目要求。
三点 Gauss 型公式程序
clc; clear; fun=inline('1./x'); a = 2; b = 8; tol=1e-5; n=2; syms x %精度 %n次代数精度,n=(3-1)*2+1 %被积函数
的根,计算停止的条件为: xk 1 xk 106
Newton 迭代法程序
clc; clear; format long x0=1; %设初始值
f=inline('exp(x)+2^(-x)+2*cos(x)-6'); diff=inline('exp(x)-2^(-x)*log(2)-2*sin(x)'); x=x0-feval(f,x0)/feval(diff,x0); while abs(x-x0)>=1e-6 x0=x; x=x0-(exp(x0)+2^(-x0)+2*cos(x0)-6)/(exp(x0)-2^(-x0)*log(2)-2*sin(x0)) ; end x
矩阵与数值分析之 MATLAB 试验
学生姓名:陈贵鹏 学 号:21606075
专业班级:结构工程建研 1602 班 所在单位:智能结构研究所
2017 年 6 月 4 日ຫໍສະໝຸດ 2016 级工科硕士研究生
《矩阵与数值分析》课程数值实验题目
教学班号:建研 1602 班 任课教师:董波 学生姓名:陈贵鹏 学号:21606075 院系:建设工程学部结构工程系
迭代法计算停止的条件为: max x (jk 1) x (jk ) 10 6 .
1 j 3
Jacobi 迭代程序:
clc; clear; format long A=[-3,1,0,0;1,-3,1,0;0,1,-2,1;0,0,1,-3]; b=[-1;0;0;0]; D=diag(diag(A)); %求对角矩阵D L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; x0=[0;0;0;0]; x=B*x0+f; x0=x; %取零向量作为初始向量 %求下三角矩阵L %求上三角矩阵U
QR 方法程序运算结果:
分析
从计算结果来看,如果不计舍入误差,Gauss 列主元消去法与 QR 方法得到的结 果几乎相同。但是从编程的复杂程度来看,个人感觉 Gauss 列主元消去法难度更 大,QR 方法的语句相对简洁。
三、非线性方程的迭代解法
1、用 Newton 迭代法、割线法求方程
f x e x 2 x 2cos x 6 0
Newton 迭代法程序运算结果
割线法程序
clc; clear; format long xm=1; %设初始值 xn=0.5; %设初始值 f=inline('exp(x)+2^(-x)+2*cos(x)-6'); while abs(xn-xm)>=1e-6 x=xn-(feval(f,xn)*(xn-xm))/(feval(f,xn)-feval(f,xm)); xm=xn; xn=x; end x
while norm(x-x0,'inf')>=1e-6
x=B*x0+f; end x
Jacobi 迭代程序运算结果:
Gauss-Seidel 迭代程序:
clc; clear; format long A=[-3,1,0,0;1,-3,1,0;0,1,-2,1;0,0,1,-3]; b=[-1;0;0;0]; D=diag(diag(A)); %求A的对角矩阵D L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x0=[0;0;0;0]; x=G*x0+f; x0=x; x=G*x0+f; end x %取零向量作为初始向量 %求下三角矩阵L %求上三角矩阵U
割线法程序运算结果
分析
在 MATLAB 命令窗口输入 x=solve('exp(x)+2^(-x)+2*cos(x)-6=0'),可以得到方程 的根为 x= 1.8293836019338488171362129468142。对比 Newton 法和割线法求得 的结果,可以发现 Newton 法求得的结果更精确。这是因为割线法采用了导数的 近似式
2. 用 Gauss 列主元消去法、QR 方法求解如下方程组:
2 8 5 9 4 3 1 x1 12 2 0 0 x2 6 , 0 4 0 x3 23 0 0 5 x4 16
分析:
由 SN
1 1 1 N = ( ) 可以获得真实值。当 N 很大时, 2 j 1 2N 1 j 1 4 j 1 j 1 2 2 j 1
2
N
1
N
可以发现从小到大计算与从大到小的计算结果出现了差异。 这是因为从大到小求 和时,变量在分母上,整个算式是由小到大进行求和的,这样求和避免了“大数 吃小数”现象,因而计算结果更优,具有更高的有效位数。
Gauss 列主元消去法程序运算结果:
QR 方法程序:
clc; clear; format long A=[2,4,3,1;8,2,0,0;5,0,4,0;9,0,0,5]; %系数矩阵 B=[12;6;23;16]; n=length(B); Q=eye(4); H=A; for i=1:n-1 b=H(:,1);
c=norm(b,2); b(1)=b(1)-c; b1=transpose(b); Q1=eye(4-i+1)-2/(b1*b)*b*b1; H1=Q1*H; Q1=blkdiag(eye(i-1),Q1); Q=Q*transpose(Q1); if i<n-1 H1(1,:)=[]; H1(:,1)=[]; H=H1; end end R=transpose(Q)*A; x=R\(Q\B)