《应用计算方法教程》大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《应用计算方法教程》作业
姓名:* *
学号:S2017****
专业:* * * *
学院:机械工程学院
联系方式:***********
任课教师:丁军
作业一.用任意方法求解七阶方程-5+22x-12x2+x3+13x4+10x5-7x6-4x7
牛顿迭代法:
y=@(x)4*x^7+7*x^6-10*x^5-13*x^4-x^3+12*x^2-22*x+5;
s=@(m)28*m^6+42*m^5-50*m^4-52*m^3-3*m^2+24*m-22;
p0=0;N=1000;Tol=0.001;
for k=1:N
p1=p0-y(p0)/s(p0);
if abs(p1-p0)>Tol
p0=p1;
else break
end
end
disp(p1);disp(k)
作业二.实验4-2
合理利用LU分解法(使用列选主元可恰当加分)或追赶法求解下列方程组:
程序:
A=[1.3,-1,-1,2.4,-3.4;2.4,-1,-1,1.4,3.7;2,1,-2,3.6,6.8;2.5,-1,4,3,6.6;1.5,-1,-1,5.3,2.8];
b=[4.2;6.3;5.5;3.6;6.2];
L=eye(5);U(1,:)=A(1,:);
y=[0;0;0];x=[0;0;0];
for k=2:5
if U(k-1,k-1)==0
{
disp('分解失败');
Return
}
end
L(k:5,k-1)=A(k:5,k-1)/U(k-1,k-1)
U(k,k:5)=A(k,k:5)-L(k,1:k-1)*U(1:k-1,k:5)
if k<5
A(k+1:5,k)=A(k+1:5,k)-L(k+1:5,1:k-1)*U(1:k-1,k);
end
end
L1=inv(L);y=L1*b;
U1=inv(U);x=U1*y;
disp(L);disp(U);disp(x);
结果:
作业三.实验4-3
4-3.实验目的:考察Holert矩阵的性态,了解病态方程组求解。
实验内容:生成hilbert矩阵:。计算的条件数,
观察其变化。分别应用LU分解法与LU分解迭代求精法求解方程组。将两种方法所得结果进行比较。
1)计算的条件数
算法实现:
%n=5:10
clear;clc;
format rat
for n=5:10
for i=1:n
for j=1:n
H(i,j)=1/(i+j-1);
end
end
disp(H)
cond(H,1)
end
运算结果:
11/21/31/41/5
1/21/31/41/51/6
1/31/41/51/61/7
1/41/51/61/71/8
1/51/61/71/81/9
Cond1=943656
Cond1=29070279
Cond1=985194888
Cond1=33872789100
Cond1=1099649467886
Cond1=35353368771751
1 1/
2 1/
3 1/
4 1/
5 1/
6 1/
7 1/
8 1/
9 1/10
1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11
1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12
1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13
1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14
1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15
1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16
1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17
1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17 1/18
1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17 1/18 1/19 观察结论:矩阵的条件数越来越大,而且远远大于1,这是一个病态问题
1)LU分解法
算法实现:
% n=5:10
clear;clc;
n=10
for i=1:n
for j=1:n
H(i,j)=1/(i+j-1);
end
end
disp(H)
cond(H,1)
format short;
n=size(H);
L=eye(n);
U(1,:) = H(1,:);
for k = 2:n
if U(k-1,k-1)==0
disp('分解失败');return
end
L(k:n,k-1)=H(k:n,k-1)/U(k-1,k-1);
U(k,k:n)=H(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n);
if k H(k+1:n,k)=H(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k); end end B([1:10],1)=1; Y=L\B; L U X=U\Y 运行结果: L= 1.0000 0 0 0 0 0 0 0 0 0 0.5000 1.0000 0 0 0 0 0 0 0 0 0.3333 1.0000 1.0000 0 0 0 0 0 0 0 0.2500 0.9000 1.5000 1.0000 0 0 0 0 0 0 0.2000 0.8000 1.7143 2.0000 1.0000 0 0 0 0 0 0.1667 0.7143 1.7857 2.7778 2.5000 1.0000 0 0 0 0 0.1429 0.6429 1.7857 3.3333 4.0909 3.0000 1.0000 0 0 0 0.1250 0.5833 1.7500 3.7121 5.5682 5.6538 3.5000 1.0000 0 0