东北大学数值分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验
班级 姓名 学号
实验环境: MATLAB
实验一 解线性方程组的迭代法
(1)一、实验题目 对以下方程组分别采用Jacobi 迭代法, Gaaus-Seidel 迭代法求解和SOR 迭代法求解。
(2)线性方程组
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------------------13
6
8
24
3
8
1
4120291372642212341791110161035243120536217758683233761624491131512013012312240010563568000012132
4⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125 (2)对称正定线性方程组
⎥
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣
⎡----------------------192
4
3
3
6
02141103520411144334310422181233416120653811414023121220042042
4
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡87654321x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---4515221123660
(3)三对角线性方程组
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----5541412621357 二、实验要求
(1)应用迭代法求线性方程组, 并与直接法作比较。
(2)分别对不同精度要求, 如ε= , , 利用所需迭代次数体会改迭代法的收敛快慢。
(3)对方程组使用SOR 方法时, 选取松弛因子ω=0.8,0.9,1,1.1,1,1.2等, 试观察对算法收敛性的影响, 并找出你所选的松弛因子的最佳值。
(4)编制出各种迭代法的程序并给出计算结果。
三、源程序及实验结果
Jacobi 迭代法函数为
function [x,k]=Jacobi(A,b,x0,wc) n=length(b);k=0;x=x0;
while max(abs(b-A*x0))>wc&k<=500 for i=1:n sum=0; for j=1:n
if j~=i
sum=sum+A(i,j)*x0(j)1
end
end
x(i)=(b(i)-sum)/A(i,i);
end
x0=x;k=k+1;
if k>500
fprintf('µü´ú´ïµ½ÉÏÏÞ')
return
end
end
Gauss-Seidel迭代法函数为
function[x,k]=Gaussseidel(A,b,x,wc,N) n=length(b);k=0;
while max(abs(b-A*x))>wc&k<=N
for i=1:n
sum=0;
for j=1:n
if j~=i
sum=sum+A(i,j)*x(j)
end
end
x(i)=(b(i)-sum)/A(i,i);
end
k=k+1;
if k>=N
fprintf('?ü?ú')
return
end
end
SOR迭代法的函数
function[x,k]=SOR(A,b,x0,emg,N,w)
n=length(b);
x=zeros(n,1);
r=max(abs(b-A*x0));
k=0;
while (r>emg)&(k<N)
for i=1:n
sum=0;
for j=1:n
if j>i
sum=sum+A(i,j)*x0(j);
elseif j<i
sum=sum+A(i,j)*x(j);
end
end
x(i)=(1-w)*x0(i)+w(b(i)-sum)/A(i,i);
end
r=max(abs(x-x0));
x0=x;k=k+1;
if k>=N
warning('迭代次数达到上限! ');
return
end
end
方程组一
直接求解法
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
>> x=inv(A)*b
运行结果
x =
1.0000
-1.0000
-0.0000
1.0000
2.0000
-0.0000
3.0000
1.0000
-1.0000
2.0000
Jacobi方法
10-∧时
(1)精度为3
(2)A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-3)
运行结果
x =
1.0e+307 *
-0.6183
-1.2682
-1.9643
Inf
Inf
NaN
0.0572
Inf
Inf
0.0575
k =
495
(2)精度为4
10-时
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-4)
运行结果
x =
1.0e+307 *
-0.6183
-1.2682
-1.9643
Inf
Inf
NaN
0.0572
Inf
Inf
0.0575
k =
495
(3)精度为5
10 时
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-5)
运行结果
x =
1.0e+307 *
-0.6183
-1.2682
-1.9643
Inf
Inf
NaN
0.0572
Inf
Inf
0.0575
k =
495
结论由以上实验结果可知该方程组不能使用Jacobi迭代法求解。
Gauss-Seidel迭代法
10-∧时
(1)精度为3
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-3,500)
实验结果
x =
1.0e+307 *
0.0460
-0.0754
0.6126
-1.2732
-1.6558
Inf
-Inf
NaN
NaN
NaN
k =
249
(2)精度为4
10-时
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-4,500)
实验结果
x =
1.0e+307 *
0.0460
-0.0754
0.6126
-1.2732
-1.6558
Inf
-Inf
NaN
NaN
NaN
k =
249
(3)精度为5
10-时
>> A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1 ];
b=[5 12 3 2 3 46 13 38 19 -21]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-5,500)
实验结果
x =
1.0e+307 *
0.0460
-0.0754
0.6126
-1.2732
-1.6558
Inf
-Inf
NaN
NaN
NaN
k =
249
结论由以上实验结果可知该方程组不能用Gauss-Seidel方法求解。
且SOR迭代法是J迭代法或者GS迭代法的改进, 所以该方程组一定不能使用SOR迭代法求解。
方程组二
直接法
>> A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x=inv(A)*b
运行结果
x =
1.0000
-1.0000
-0.0000
2.0000
1.0000
-1.0000
0.0000
2.0000
Jacobi方法
10-∧时
(1)求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-3)
运行结果
x =
1.0e+144 *
-1.4659
-2.2112
0.6014
0.8769
-0.3575
-0.9590
-0.0305
0.3007
k =
501
(2)精度为4
10 时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-4)
实验结果
x =
1.0e+144 *
-1.4659
-2.2112
0.6014
0.8769
-0.3575
-0.9590
-0.0305
0.3007
k =
501
(3)精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-5)
实验结果
x =
1.0e+144 *
-1.4659
-2.2112
0.6014
0.8769
-0.3575
-0.9590
-0.0305
0.3007
k =
501
结论由此结果可知次方程组由Jacobi方法求解时, 收敛速度太慢, 不能求出较为精确的解。
Gauss-Seidel迭代法
10-∧时
(1)求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10
-3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x=[0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-3,500)
运行结果
x =
1.0475
-1.0558
0.0111
1.9753
1.0039
-1.0101
0.0024
1.9986
k =
364
(2)精度为4
10 时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x=[0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-4,500)
实验结果
x =
1.0232
-1.0272
0.0054
1.9880
1.0019
-1.0049
0.0012
1.9993
k =
500
(3)精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x=[0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-5,1000)
实验结果
x =
1.0017
-1.0020
0.0004
1.9991
1.0001
-1.0004
0.0001
2.0000
k =
1000
结论由以上实验结果可知Gauss-Seidel迭代法比Jacobi迭代法具有更好的收敛速度, 但是对于此方程组收敛速度还是较慢。
SOR迭代法
(1)ω=0.8时
10-∧时
求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,500,0.8)
实验结果
x =
1.1040
-1.1182
0.0254
1.9473
1.0097
-1.0236
0.0059
1.9961
k =
13
②精度为4
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,500,0.8)
实验结果
x =
1.0241
-1.0284
0.0057
1.9875
1.0020
-1.0051
0.0012
1.9993
k =
427
③精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10
-3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,0.8)
实验结果
x =
1.0032
-1.0038
0.0008
1.9983
1.0003
-1.0007
0.0002
1.9999
k =
1000
(2)ω=0.9时
10-∧时
求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,500,0.9)
实验结果
x =
1.1940
-1.2270
0.0459
1.8997
1.0164
-1.0418
0.0102
1.9941
k =
14
②精度为4
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,500,0.9)
实验结果
x =
1.0238
-1.0280
0.0056
1.9876
1.0020
-1.0051
0.0012
1.9993
k =
500
③精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,0.9)
实验结果
x =
1.0028
-1.0032
0.0006
1.9986
1.0002
-1.0006
0.0001
1.9999
k =
1000
(3)ω=1.0时
10-∧时
①求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1)
实验结果
x =
1.1604
-1.1886
0.0377
1.9166
1.0133
-1.0342
0.0082
1.9953
k =
133
②精度为4
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1)
实验结果
x =
1.0160
-1.0188
0.0038
1.9917
-1.0034
0.0008
1.9995
k =
570
③精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1)
实验结果
x =
1.0017
-1.0020
0.0004
1.9991
1.0001
-1.0004
0.0001
2.0000
k =
1000
(4)ω=1.1时
10-∧时
①求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1.1)
实验结果
x =
-1.1543
0.0309
1.9318
1.0109
-1.0281
0.0067
1.9961
k =
197
②精度为4
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1.1)
实验结果
x =
1.0131
-1.0154
0.0031
1.9932
1.0011
-1.0028
0.0007
1.9996
k =
554
③精度为5
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1.1)
实验结果
x =
1.0013
-1.0015
0.0003
1.9993
1.0001
-1.0003
0.0001
2.0000
k =
911
(5)ω=1.2时
10-∧时
①求解精度为3
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1.2)
实验结果
x =
1.1068
-1.1253
0.0251
1.9446
1.0088
-1.0228
0.0054
1.9968
k =
228
②精度为4
10-时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1.2)
实验结果
x =
1.0106
-1.0125
0.0025
1.9945
1.0009
-1.0023
0.0005
1.9997
k =
519
精度为5
10 时
>>A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
x0=[0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1.2)
实验结果
x =
1.0011
-1.0013
0.0003
1.9994
1.0001
-1.0002
0.0001
2.0000
k =
809
结论SOR迭代法比Jacobi迭代法和Gauss-seidel迭代法具有更好的收敛速度。
且当精度要求不超过时, 松弛因子的最佳值是0.8, 当精度要求大于等于时, 松弛因子的最佳值是1.2 。
方程组三
直接求解法
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
>> x=inv(A)*b
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
Jacobi方法
10-∧时
(1)求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-3)
运行结果
x =
2.0000
1.0000
-3.0001
0.0001
0.9999
-1.9999
2.9998
0.0001
0.9999
-1.0000
k =
12
(2)精度为4
10 时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-4)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
15
(3)精度为5
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Jacobi(A,b,x0,1e-5)
实验结果
x =
2.0000
1.0000
-3.0000
0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
18
结论由实验结果可知该方程组使用Jacobi迭代法是具有很好的收敛速度。
Gauss-seidel迭代法
10-∧时
(1)求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-3,1000)
实验结果
x =
1.9999
0.9998
-3.0002
-0.0001
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
7
(2)精度为4
10 时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-4,1000)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
9
(3)精度为5
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=Gaussseidel(A,b,x,1e-5,1000)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k = 11
结论由实验结果可知Gauss-seidel迭代法具有更好的收敛速度。
SOR迭代法
(1)ω=0.8时
10-∧时
求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,0.8)
实验结果
x =
2.0003
1.0001
-3.0002
-0.0005
0.9994
-2.0006
2.9996
-0.0002
0.9999
-1.0000
k =
9
精度为4
10 时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,0.8)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0001
0.9999
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
12
③精度为5
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,0.8)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
15
(2)ω=0.9时
10-∧时
①求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,0.9)
实验结果
x =
2.0000
0.9999
-3.0003
-0.0003
0.9997
2.9999
-0.0000
1.0000
-1.0000
k =
8
②精度为4
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,0.9)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
10
③精度为5
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,0.9)
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
13
(3)ω=1.0时
10-∧时
求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1.0)
实验结果
x =
1.9999
0.9998
-3.0002
-0.0001
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
7
②精度为4
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1.0)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
9
③精度为5
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1.0)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
11
(4)ω=1.1时
10-∧时
①求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1.1)
实验结果
x =
1.9999
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
8
②精度为4
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1.1)
实验结果
x =
2.0000
1.0000
-3.0000
0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
9
精度为5
10 时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1.1)
实验结果
x =
2.0000
1.0000
-3.0000
0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =
11
(5)ω=1.2时
10-∧时
①求解精度为3
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-3,1000,1.2)
实验结果
x =
1.9999
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
10
②精度为4
10-时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-4,1000,1.2)
实验结果
x =
2.0000
1.0000
-3.0000
-0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
k =
12
精度为5
10 时
>> A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];
b=[7 5 -13 2 6 -12 14 -4 5 -5]';
x0=[0 0 0 0 0 0 0 0 0 0]';
[x,k]=SOR(A,b,x0,1e-5,1000,1.2)
实验结果
x =
2.0000
1.0000
-3.0000
0.0000
1.0000
-2.0000
3.0000
0.0000
1.0000
-1.0000
k =13
结论由此实验数据可知松弛因子的最佳值是1 。
实验二函数差值方法
(1)实验题.给定函数的n+1个节点值, j=0.1, ..., .试用Lagrange方法求其n次插值多项式或分段插值多形式。
(2)给定数据如下
(2)构造5次Lagrange插值多项式和分段2次插值多项式, 并计算飞f(0.596), f(0.99)的值
二、实验要求
(1)利用Lagrange插值公式, 编制出构造差值多项式的程序(2)根据节点的选取原则, 对问题(2)用三点插值或二点插值, 其计算结果如何
(3)绘出插值多项式的函数曲线, 观察其光滑性
三、源程序及实验结果
Lagrange插值的程序
function y=lagrange(xi,yi,x)
m=length(xi);n=length(yi);p=length(x);
if m~=n error('数据输入有误, 请重新输入');end
s=0;
for k=1:n
t=ones(1,p);
for j=1:n
if j~=k
t=t.*(x-xi(j))/(xi(k)-xi(j));
end
end
s=s+t*yi(k);
end
y=s;
第一组数据
(1)5次Lagrange插值多项式
插值多项式为
>> syms x;
>> xi=[0.4,0.55,0.65,0.80,0.95,1.05];
yi=[0.41075,0.57815,0.69675,0.90,1.00,1.25382];
y=lagrange(xi,yi,x)
y =
640*((5*x)/2 - 1)*(x - 11/20)*(x - 13/20)*(x - 19/20)*(x - 21/20) - (4645*(4*x - 8/5)*(x - 4/5)*(x - 11/20)*(x - 19/20)*(x - 21/20))/12 + (11563*((20*x)/3 - 8/3)*(x - 4/5)*(x - 13/20)*(x - 19/20)*(x - 21/20))/100 - (1643*((20*x)/3 - 11/3)*(x - 4/5)*(x - 13/20)*(x - 19/20)*(x - 21/20))/143 - (5000*((20*x)/11 - 8/11)*(x - 4/5)*(x - 11/20)*(x - 13/20)*(x - 21/20))/9 + (62691*((20*x)/13 - 8/13)*(x - 4/5)*(x - 11/20)*(x - 13/20)*(x - 19/20))/250
>> y=simple(y)
y =
(3913328*x^5)/32175 - (45339971*x^4)/107250 + (1842233513*x^3)/3217500 - (5394744687*x^2)/14300000 + (31395551227*x)/257400000 - 56566963/3750000
该函数的图像为
x=[0.4:0.005:1.2];
>> y=(3913328.*x.^5)/32175 - (45339971.*x.^4)/107250 + (1842233513.*x.^3)/3217500 - (5394744687.*x.^2)/14300000 + (31395551227.*x)/257400000 - 56566963/3750000;plot(x,y)
x=0.596时的值
>> xi=[0.4,0.55,0.65,0.80,0.95,1.05];
yi=[0.41075,0.57815,0.69675,0.90,1.00,1.25382]; y=lagrange(xi,yi,0.596)
y =
0.6257
x=0.99时的值
>> xi=[0.4,0.55,0.65,0.80,0.95,1.05];
yi=[0.41075,0.57815,0.69675,0.90,1.00,1.25382]; y=lagrange(xi,yi,0.99)
y =
1.0542
(2)分段2次插值多项式
①??选取xj??
进行①次插值时
插值多项式为
>> syms x;
>> xi=[0.55,0.80,1.05];
yi=[0.57815,0.90,1.25382];
y=lagrange(xi,yi,x)
y =。