实验31
题目:
考虑线性方程组编制动选取元手动选取元求解线性代数方程组Gauss消程
(1)取矩阵方程解取计算矩阵条件数分序Gauss消元列元Gauss消元完全选元Gauss消元方法求解结果?
(2)现选择程序中手动选取元功步消程选取模模元素作元进行消元观察记录计算结果步消程总选取模元素作元结果?分析实验结果
(3)取矩阵阶数n20者更重复述实验程观察记录分析问题消程中选择元时计算结果差异说明元素选取消程中作
(4)选取感兴趣问题者机生成矩阵计算条件数重复述实验观察记录分析实验结果
1 算法介绍
首先分析种算法消程计算公式
序高斯消法:
第k步消中设增广矩阵中元素(等零判定系数矩阵奇异矩阵停止计算)k行行计算分增广矩阵第行加第行增广矩阵中第列中元素消零重复方法第1步进行第n1步终增广矩阵
列元高斯消法:
第k步消中增广矩阵中子方阵中选取时中第行第行交换然序消法相步骤进行重复方法第1步进行第n1步终增广矩阵
完全元高斯消法:
第k步消中增广矩阵中应子方阵中选取中第行第行第列第列交换然序消法相步骤进行重复方法第1步进行第n1步终增广矩阵
接分析回代程求解公式容易出述种消元法均计算公式:
2 实验程序设计
输入实验求初始条件
二计算系数矩阵A条件数方程组理解
三方法编程计算输出终计算结果
3 计算结果分析
(1)
先计算系数矩阵条件数结果
知系数矩阵条件数较问题属病态问题 bA扰动引起解较误差
采序高斯消法计算结果:
终解x(1000000000000000 1000000000000000 1000000000000000 1000000000000001 0999999999999998 1000000000000004 0999999999999993 1000000000000012 0999999999999979 1000000000000028)T
穷范数衡量误差2842170943040401e14发现采序高斯消元法求解精确解间误差较通进步观察发现序高斯消法计算时选取元值矩阵中元素相序高斯消法方式没结果造成特影响
采列元高斯消元法结果:
终解x(1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000)T
样穷范数衡量误差0
完全元高斯消元法结果
终解x(1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000 1000000000000000)T
样穷范数衡量误差0
(2)
步选取模元素元计算结果
终解x(1000000000000000 1000000000000000 1000000000000000 1000000000000001 0999999999999998 1000000000000004 0999999999999993 1000000000000012 0999999999999979 1000000000000028)T
穷范数衡量误差2842170943040401e14完全元消法误差0
(1)(2)实验结果发现列元消法完全元消法精确解序高斯消法模量元素元消法没精确解两种消法中程序计算时舍入误差终结果产生定影响方程组维度较低元素间相差误差较
进步分析计算述4种方法步选取元数值列表进行较结果:
第n次消元
序
列元
完全元
模
1
6000000000000000
8
8
6000000000000000
2
4666666666666667
8
8
4666666666666667
3
4285714285714286
8
8
4285714285714286
4
4133333333333333
8
8
4133333333333333
5
4064516129032258
8
8
4064516129032258
6
4031746031746032
8
8
4031746031746032
7
4015748031496063
8
8
4015748031496063
8
4007843137254902
8
8
4007843137254902
9
4003913894324853
8
8
4003913894324853
10
4001955034213099
0015617370605469
0015617370605469
4001955034213099
表发现方程组言序高斯消选取元恰事模量元素列元完全元选取元素84数量级差计算程中累积误差较终4种方法输出结果均较精确
里具体解释序法模法计算结果完全致原该矩阵消元程中次选取元列两非零元素角线元素4左右正方元素8该列余位置元素均0样情况默认元该列元两种方法计算结果致
理说完全高斯消法误差次列元高斯消法选取模元素作元时误差方程组特殊性(元素相差维度高)理现象里没充分体现出
(3)
时重复述实验程种方法计算结果示里采穷范数衡量绝误差
序高斯消法
列元高斯消
完全元高斯消
选取模元素作元消
X
1000000000000000 1000000000000000 1000000000000000 1000000000000001 0999999999999998 1000000000000004 0999999999999993 1000000000000014 0999999999999972 1000000000000057 0999999999999886
1000000000000227 0999999999999547 1000000000000902 0999999999998209 1000000000003524 0999999999993179 1000000000012732 0999999999978173 1000000000029102
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1000000000000000 1000000000000000 1000000000000000 1000000000000001 0999999999999998 1000000000000004 0999999999999993 1000000000000014 0999999999999972 1000000000000057 0999999999999886
1000000000000227 0999999999999547 1000000000000902 0999999999998209 1000000000003524 0999999999993179 1000000000012732 0999999999978173 1000000000029102
2910205409989430e11
0
0
2910205409989430e11
出时列元完全元计算结果精确值序高斯消模方法然产生定误差两者误差致n10时候误差相n20时误差增长约1000倍计算程中舍入误差断累积致果进步增加矩阵维数应该出更明显现象
(4)
矩阵维度误差里方便起见选取2条件数维度系数矩阵进行较
维度
条件数
序消
列元
完全元
模量
17e+3
284e14
0
0
284e14
18e+6
291e11
0
0
291e11
57e+7
931e10
0
0
931e10
18e+9
298e08
0
0
298e08
19e+12
305e05
0
0
305e05
38e+16
328e+04
388e12
388e12
328e+04
85e+16
352e+13
42e3
42e3
352e+13
表出着维度增加方法计算误差影响逐渐体现增长较快舍入误差逐步累计造成方法二方法三维度40情况精确解两种方法累计误差远方法方法四慢样出前面相原方法方法四计算结果保持致方法二方法三计算结果保持致
4 结
文矩阵中元素差模模元素没数量级差异元选取方式计算结果影响维度较低情况明显四种方法足够精确
四种方法发现采列元高斯消者完全元高斯消法量抑制误差算法精确低阶矩阵说四种方法求解出结果误差均较
外完全选元方法选元程中计算量较发现列元法已达高精确程度实际计算中选列元法进行计算
附录:程序代码
clear
clc
format long
方法选择
ninput('矩阵A阶数n')
disp('选取求解方式')
disp('1 序Gauss消元法2 列元Gauss消元法3 完全选元Gauss消元法4 模元素作元')
ainput('求解方式序号:')
赋值Ab
Azeros(nn)
bzeros(n1)
for i1n
A(ii)6
if i>1
A(ii1)8
end
if i
end
end
for i1n
for j1n
b(i)b(i)+A(ij)
end
end
disp('定系数矩阵:')
A
disp('右端量:')
b
求条件数理解
disp('线性方程组精确解:')
X(A\b)'
fprintf('矩阵A1条件数 f \n'cond(A1))
fprintf('矩阵A2条件数 f \n'cond(A))
fprintf('矩阵A穷条件数 f \n'cond(Ainf))
序Gauss消元法
if a1
A1Ab1b
for k1n
if A1(kk)0
disp('元零序Gauss消元法法进行')
break
end
fprintf('第d次消元选取元:g\n'kA1(kk))
disp('次消元系数矩阵:')
A1
for pk+1n
lA1(pk)A1(kk)
A1(pkn)A1(pkn)l*A1(kkn)
b1(p)b1(p)l*b1(k)
end
end
x1(n)b1(n)A1(nn)
for kn111
for wk+1n
b1(k)b1(k)A1(kw)*x1(w)
end
x1(k)b1(k)A1(kk)
end
disp('序Gauss消元法解')
disp(x1)
disp('求解精确解差穷范数')
norm(x1Xinf)
end
列元Gauss消元法
if a2
A2Ab2b
for k1n
[max_imax_j]find(A2(k)max(abs(A2(knk))))
if max_i~k
A2_changeA2(k)
A2(k)A2(max_i)
A2(max_i)A2_change
b2_changeb2(k)
b2(k)b2(max_i)
b2(max_i)b2_change
end
if A2(kk)0
disp('元零列元Gauss消元法法进行')
break
end
fprintf('第d次消元选取元:g\n'kA2(kk))
disp('次消元系数矩阵:')
A2
for pk+1n
lA2(pk)A2(kk)
A2(pkn)A2(pkn)l*A2(kkn)
b2(p)b2(p)l*b2(k)
end
end
x2(n)b2(n)A2(nn)
for kn111
for wk+1n
b2(k)b2(k)A2(kw)*x2(w)
end
x2(k)b2(k)A2(kk)
end
disp('列元Gauss消元法解')
disp(x2)
disp('求解精确解差穷范数')
norm(x2Xinf)
end
完全选元Gauss消元法
if a3
A3Ab3b
for k1n
VVeye(n)
[max_imax_j]find(A3(knkn)max(max(abs(A3(knkn)))))
if numel(max_i)0
[max_imax_j]find(A3(knkn)max(max(abs(A3(knkn)))))
end
Weye(n)
W(max_i(1)+k1max_i(1)+k1)0
W(kk)0
W(max_i(1)+k1k)1
W(kmax_i(1)+k1)1
Veye(n)
V(kk)0
V(max_j(1)+k1max_j(1)+k1)0
V(kmax_j(1)+k1)1
V(max_j(1)+k1k)1
A3W*A3*V
b3W*b3
VVVV*V
if A3(kk)0
disp('元零完全选元Gauss消元法法进行')
break
end
fprintf('第d次消元选取元:g\n'kA3(kk))
disp('次消元系数矩阵:')
A3
for pk+1n
lA3(pk)A3(kk)
A3(pkn)A3(pkn)l*A3(kkn)
b3(p)b3(p)l*b3(k)
end
end
x3(n)b3(n)A3(nn)
for kn111
for wk+1n
b3(k)b3(k)A3(kw)*x3(w)
end
x3(k)b3(k)A3(kk)
end
disp('完全选元Gauss消元法解')
disp(x3)
disp('求解精确解差穷范数')
norm(x3Xinf)
end
模元素作元
if a4
A4Ab4b
for k1n
AAA4
AA(AA0)NaN
[min_ij]find(AA(knk)min(abs(AA(knk))))
if numel(min_i)0
[min_ij]find(AA(knk)min(abs(AA(knkn))))
end
Weye(n)
W(min_i(1)+k1min_i(1)+k1)0
W(kk)0
W(min_i(1)+k1k)1
W(kmin_i(1)+k1)1
A4W*A4
b4W*b4
if A4(kk)0
disp('元零模Gauss消元法法进行')
break
end
fprintf('第d次消元选取元:g\n'kA4(kk))
A4
for pk+1n
lA4(pk)A4(kk)
A4(pkn)A4(pkn)l*A4(kkn)
b4(p)b4(p)l*b4(k)
end
end
x4(n)b4(n)A4(nn)
for kn111
for wk+1n
b4(k)b4(k)A4(kw)*x4(w)
end
x4(k)b4(k)A4(kk)
end
disp('模Gauss消元法解')
disp(x4)
disp('求解精确解差穷范数')
norm(x4Xinf)
end
二实验33
题目:
考虑方程组解中系数矩阵HHilbert矩阵:
著名病态问题通首先定解(例取分量均1)计算出右端办法出确定问题
(1)选择问题维数6分Gauss消法(LU分解)J迭代法GS迭代法SOR迭代法求解方程组结果?计算结果问题解较结
(2)逐步增问题维数述方法解计算结果?计算结果说明什?
(3)讨病态问题求解算法
1 算法设计
意线性方程组分析种方法计算公式
(1)Gauss消法:
首先系数矩阵进行LU分解原方程转化令原方程分两步回代求解:
具体方法里赘述
(2)J迭代法:
首先分解构造迭代矩阵中 进行迭代计算直误差满足求
(3)GS迭代法:
首先分解构造迭代矩阵 中 进行迭代计算直误差满足求
(4)SOR迭代法:
首先分解构造迭代矩阵 中进行迭代计算直误差满足求
2 实验程
根维度n确定矩阵H元素b分量值
二选择计算方法( Gauss消法J迭代法GS迭代法SOR迭代法)迭代法设定初值外SOR方法需设定松弛子
三进行计算直满足误差求(迭代法设定相邻两次迭代结果差穷范数00001SOR方法设定输出迭代100次结果误差值)输出实验结果
3 计算结果分析
(1)时问题具体定义
计算结果
Gauss消法
第1次消元选取元:1
第2次消元选取元:00833333
第3次消元选取元:000555556
第4次消元选取元:0000357143
第5次消元选取元:226757e05
第6次消元选取元:143155e06
解X(0999999999999228 1000000000021937 0999999999851792 1000000000385369 0999999999574584 1000000000167680)T
穷范数衡量误差4254160357319847e10
J迭代法
设定迭代初值零计算 J法迭代矩阵B谱半径430853>1J法收敛
GS迭代法
设定迭代初值零计算GS法迭代矩阵G谱半径:0999998<1GS法收敛541次迭代计算结果X(1001178105812706 0999144082651860 0968929093984902 1047045569989162 1027323158370281 0954352032784608)T
穷范数衡量误差0047045569989162
SOR迭代法
设定迭代初值零量设定计算SOR法迭代矩阵谱半径0999999433815223100次迭代计算结果
X(1003380614145078 0962420297458423 1031857023134559 1061814901289881 1014037815827164 0917673642493527)T
穷范数衡量误差0082326357506473
SOR方法变改变值计算结果列表
迭代次数
100
100
100
100
迭代矩阵谱半径
0999999433815223
0999998867083155
0999996830135013
0999982309342386
X
1003653917714694 0974666041209353 1011814573842440 1042837929171827 1017190220902681 0945462001336268
1014676015634604
0896636864424096
1090444578936265
1107070542628148
1006315452225331
0873244842279255
1028022215505147
0790604920509843
1267167365524072
1061689730857891
0990084054872602
0846005956774467
1051857392323966
0653408758549156
1486449891152510
0783650360698119
1349665420488270
0664202350634588
0054537998663732
0126755157720745
0267167365524072
0486449891152510
发现松弛子取值迭代速度造成影响述四种方法中松弛子05时收敛相较快
综四种算法结果列表:
算法
Gauss消法
Jacobi法
GS法
SOR法(取)
迭代次数
收敛
541
100
迭代矩阵谱半径
430853
0999998
0999999433815223
X
0999999999999228 1000000000021937 0999999999851792 1000000000385369 0999999999574584 1000000000167680
1001178105812706 0999144082651860 0968929093984902 1047045569989162 1027323158370281 0954352032784608
1003380614145078 0962420297458423 1031857023134559 1061814901289881 1014037815827164 0917673642493527
4254160357319847e10
0047045569989162
0082326357506473
计算矩阵H条件数>>1病态问题表出四种方法求解存定误差面分析误差源:
LU分解方法误差存Hilbert矩阵元素分数形式转换数形式时情况会出现舍入误差进行LU分解时存问题结果方程精确解 结果显示该方法误差非常
Jacobi迭代矩阵谱半径430853迭代法收敛
GS迭代法迭代次数541次时方程似解误差约005 较GS迭代矩阵谱半径0999998接1GS迭代法收敛速度较慢
SOR迭代法迭代次数100次时误差约008误差较SOR迭代矩阵谱半径0999999接1时SOR迭代法收敛速度快相GS法迭代速度方面已明显提高外SOR方法迭代速度会相应变化果选佳松弛子实现更快收敛
(2)
考虑维度情况时
算法
Gauss消
J法
GS法
SOR法(w05)
计算结果
0999999999966269 1000000001809060 0999999976372676 1000000127868103 0999999655764116 1000000487042164 0999999653427125 1000000097774747
0997829221945349
1037526203106839
0896973261976015
1020345136375036
1069071166932576
1051179995036612
0996814757185364
0926343237325536
1012938972275634
0939713836855171
0988261805073081
1064637090535154
1083633345093974
1045060177115514
0970603024778469
0880212649657655
迭代次数
356
100
谱半径
604213
1
0999999999208776
时
算法
Gauss消法
Jacobi法
GS法
SOR法(w05)
计算结果
0999999994751197 1000000546746354 0999985868343700 1000157549468631 0999063537004329 1003286333127805 0992855789229370 1009726486881556 0991930155925812 1003729850349020 0999263885025643
0997442073306751
1019069909358409
0992278247786739
0956441858313237
0986420333361353
1021301611956591
1038701026806608
1035942773498533
1016693763149422
0985716454946250
0947181287500697
1015776039786572
0966429147064483
0928674868157910
0996931548482727
1066737803913537
1097792430596468
1088030440855069
1048110620811192
0989919418572424
0922840813704142
0853252417221922
迭代次数
1019
100
谱半径
864964
1
0999999999999966
时
算法
Gauss消法
Jacobi法
GS法
SOR法(w05)
计算结果
0999999968723799 1000002417094896 0999994922439769 0998640261957706 1025668111139297 0781933485305194 2066840925345890 2279036697492128 7532393125791018 7355047567109081 7380667063930484
1129041418095142 0425748747257065 1733284233971601 0817952344733362
收敛
1004385740641590
1046346067877554
0907178347707729
0905763455949053
0972521802788457
1043731445367903
1091535169448764
1110090020703944
1103129684679768
1077168651146056
1038514736265176
0992259990832041
0942151390478003
0890785366684065
0839876442493220
迭代次数
262
100
谱半径
604213
>1
1000000000000000
8355047567109082
0160123557506780
分析结果发现着n值增加Gauss消法误差逐渐增误差增速度快维数等10情况Gauss消法结果误差较维数达15时计算结果误差已达精确解倍
J法迭代收敛n取值谱半径始终1J法收敛J迭代法Hilbert矩阵求解
GS迭代法SOR迭代法两种方法均收敛GS迭代法SOR迭代法松弛子取值1特例SOR方法受取值影响会收敛情况出GS迭代矩阵谱半径1接1收敛速度慢然着维数增需迭代次数逐渐减少维数达15时候GS法已收敛出结GS迭代方法Hilbert矩阵维数较低时够定程度满足迭代求解需求迭代速度慢外着矩阵维数增加 SOR法误差水基稳定误差接受范围
较出结果求解较低维度Hibert矩阵问题Gauss消法GS迭代法SOR迭代法均Gauss消法结果精确度较高果需求解较高维度Hibert矩阵问题采SOR迭代法
(3)
系数矩阵条件数较时病态方程实验知Gauss法解述方程时结果存误差收敛迭代法通选取优松弛子方法求解然迭代次数相较结果较精确
总体般病态方程组求解采方式:
1 低维度采Gauss消法直接求解行
Jacobi迭代方法适宜求解病态问题
GS迭代方法解决维数较低病态问题谱半径非常趋1导致迭代算法收敛速度慢维数较时候GS法收敛
SOR方法较适合求解病态问题特矩阵维数较高时候优势更明显
2 采高精度运算选双倍更倍字长运算提高收敛速度
3 原方程组作某预处理效降低系数矩阵条件数
4 实验结
(1)Hibert矩阵问题条件数会着维度增加迅速增加病态性会越越明显维度较低时候Gauss消法GS迭代法SOR迭代法均优先Gauss消法果需求解较高维度Hibert矩阵问题SOR迭代法够求解
(2)SOR方法较适合求解病态问题特矩阵维数较高时候优点更明显次实验出着矩阵维数增SOR方法需迭代次数减少误差基稳定解决病态问题适宜方法
附录:程序代码
clear all
clc
format long
矩阵赋值
ninput('矩阵H阶数n')
for i1n
for j1n
H(ij)1(i+j1)
end
end
bH*ones(n1)
disp('H矩阵:')
H
disp('量b:')
b
方法选择
disp('选取求解方式')
disp('1 Gauss消法2 J迭代法3 GS迭代法4 SOR迭代法')
ainput('求解方式序号:')
Gauss消法
if a1
H1Hb1b
for k1n
if H1(kk)0
disp('元零Gauss消法法进行')
break
end
fprintf('第d次消元选取元:g\n'kH1(kk))
for pk+1n
m5H1(pk)H1(kk)
H1(pkn)H1(pkn)+m5*H1(kkn)
b1(p)b1(p)+m5*b1(k)
end
end
x1(n)b1(n)H1(nn)
for kn111
for vk+1n
b1(k)b1(k)H1(kv)*x1(v)
end
x1(k)b1(k)H1(kk)
end
disp('Gauss消法解')
disp(x1)
disp('解精确解差穷范数')
norm((x1a)inf)
end
Ddiag(diag(H))
Ltril(H1)
Utriu(H1)
J迭代法
if a2
定初始x0
iniinput('初始值设定x0')
x0(1)ini*diag(ones(n))
disp('初始解量')
x0
xj(1)x0(1)
B(D^(1))*(L+U)
f(D^(1))*b
fprintf('(J法B矩阵谱半径:g\n'vrho(B))
if vrho(B)<1
for m215000
xj(m2+1)B*xj(m2)+fj
if norm((xj(m2+1)xj(m2))inf)<00001
break
end
end
disp('J法计算结果')
xj(m2+1)
disp('解精确解差穷范数')
norm((xj(m2+1)diag(ones(n)))inf)
disp('J迭代法迭代次数')
m2
else
disp('B矩阵谱半径1J法收敛')
end
end
GS迭代法
if a3
定初始x0
iniinput('初始值设定x0')
x0(1)ini*diag(ones(n))
disp('初始解量')
x0
xG(1)x0(1)
Ginv(DL)*U
fGinv(DL)*b
fprintf('GS法G矩阵谱半径:g\n'vrho(G))
if vrho(G)<1
for m315000
xG(m3+1)G*xG(m3)+fG
if norm((xG(m3+1)xG(m3))inf)<00001
break
end
end
disp('GS迭代法计算结果')
xG(m3+1)
disp('解精确解差穷范数')
norm((xG(m3+1)diag(ones(n)))inf)
disp('GS迭代法迭代次数')
m3
else
disp('G矩阵谱半径1GS法收敛')
end
end
SOR迭代法
if a4
定初始x0
iniinput('初始值设定x0')
x0(1)ini*diag(ones(n))
disp('初始解量')
x0
AH
for i1n
b(i)sum(A(i))
end
x_starones(n1)
format long
winput('松弛子w')
Lwinv(Dw*L)*((1w)*D+w*U)
fw*inv(Dw*L)*b
disp('迭代矩阵谱半径:')
pvrho(Lw)
time_max100迭代次数
xzeros(n1)迭代初值
for i1time_max
xLw*x+f
end
disp('SOR迭代法解')
x
disp('解精确解差穷范数')
norm((x_starx)inf)
end
pause
三实验41
题目:
牛顿法拟牛顿法进行非线性方程组数值求解
(1)述两种方法分计算面两例子达精度相前提较迭代次数CPU时间等
(2)取初值结果?反复选取初值较结果
(3)总结纳实验结果试说明种方法适问题
1 算法设计
需求解非线性方程组言牛顿法拟牛顿法迭代公式
(1)牛顿法:
牛顿法单步迭代法需取初值
(2)拟牛顿法:(Broyden秩1法)
中
拟牛顿法需求解导数节省量运算时间需定矩阵初值取
2 实验程
输入初值
二根误差求公式进行迭代计算
三输出数
3 计算结果分析
(1)首先求解方程组(1)里设定精度求
方法
牛顿法
拟牛顿法
初始值
计算结果X
x1
0905539609855914
0905539493347151
x2
1085219168370031
1085218882394940
x3
0672193668718306
0672193293825304
迭代次数
3
13
CPU计算时间s
3777815
2739349
出初始值相情况牛顿法拟牛顿法达样计算精度情况结果基相牛顿法迭代次数明显少次迭代需求解矩阵逆牛顿法次迭代CPU计算时间更长
求解方程组(2)样设定精度求
方法
牛顿法
拟牛顿法
初始值
计算结果X
x1
0500000000009699
0499999994673600
x2
0000000001063428
0000000572701856
x3
0523598775570483
0523598762908871
迭代次数
4
12
CPU计算时间s
2722437
3920195
样出初始值相情况牛顿法拟牛顿法达样计算精度情况结果基相牛顿法迭代次数明显少样次迭代中求解矩阵逆运算牛顿法次迭代CPU计算时间较长
(2)方程组(1)取初值计算结果列表样设定精度求
初始值
方法
牛顿法
拟牛顿法
计算结果
0905539609855914
1085219168370031
0672193668718305
9211852562357894
5574005400255346
18118173639381205
迭代次数
4
58
CPU计算时间s
3907164
4818019
计算结果
0905539609855914
1085219168370031
0672193668718305
9211849682114591
5573999165383549
18118182491302807
迭代次数
4
2735
CPU计算时间s
8127286
5626023
计算结果
0905539609855914
1085219168370031
0672193668718306
0905539493347151
1085218882394940
0672193293825304
迭代次数
3
13
CPU计算时间s
3777815
2739349
计算结果
0905539609855914
1085219168370031
0672193668718306
0905548384395773
1085220084502458
0672219278250136
迭代次数
4
188
CPU计算时间s
3835697
2879070
计算结果
9211852448563722
5574005155684773
18118173976918605
Matlab警告矩阵接奇异值程序进入长期循环计算中
迭代次数
19
CPU计算时间s
4033868
计算结果
0905539609857335
1085219168371536
0672193668734922
Matlab警告矩阵接奇异值程序进入长期循环计算中
迭代次数
13
CPU计算时间s
12243263
表发现方程组(1)存(92 56 181)T附动点初值选取会直接影响牛顿法拟牛顿法收敛点
总说设定初值离动点越远需迭代次数越初始值选取非常重合适初值更快收敛果初始值偏离精确解较远会出现迭代次数增加直法收敛情况
拟牛顿法种似方法拟牛顿法需迭代次数明显更收敛情况牛顿法(初值够接时甚会出现奇异矩阵情况)牛顿法求解较复杂计算时间较长
样方程组(2)取初值计算结果列表样设定精度求
初始值
方法
牛顿法
拟牛顿法
计算结果
0500000000009699
0000000001063428
0523598775570483
0499999994673600
0000000572701856
0523598762908871
迭代次数
4
12
CPU计算时间s
2722437
3920195
计算结果
0500000000011085
0000000001215427
0523598775566507
0331099293590753
0260080189442266
76532092226437129
迭代次数
5
57
CPU计算时间s
5047111
5619752
计算结果
0500000000000916
0000000000100410
0523598775595672
10e+02 *
0001221250784775
0000149282572886
1754185881622843
迭代次数
6
62
CPU计算时间s
3540668
3387829
计算结果
0500000000000152
0000000000016711
0523598775597862
10e+04 *
0000026556790770
0000020396841295
1280853105748650
迭代次数
7
55
CPU计算时间s
2200571
2640901
计算结果
0500000000000005
0000000000000503
0523598775598286
矩阵奇异值法输出准确结果
迭代次数
8
CPU计算时间s
1719072
计算结果
0500000000002022
0000000000221686
0523598775592500
矩阵奇异值法输出准确结果
迭代次数
149
CPU计算时间s
2797116
计算结果
矩阵奇异值法输出准确结果
矩阵奇异值法输出准确结果
迭代次数
CPU计算时间s
里前文类似发现赘述
里出牛顿法更区间实现压缩映射原理更范围选取初值终收敛精确解附
初始值较接动点时牛顿法拟牛顿法计算结果基相然迭代次数差计算总需时间相
(3)
牛顿法迭代程中矩阵求逆迭代收敛充分条件迭代满足区间映性矩阵求逆程较简单较区间满足映性问题适合应牛顿法进行计算般言函数单调者具单值特性函数适合应牛顿法初始值敏感程度较低算法具收敛性
外需说明次计算出CPU时间计算机时运行状态关时代码运行时间定致数具参考价值
4 实验结
牛顿法拟牛顿法存初始值越接精确解需迭代次数越现象
应牛顿法拟牛顿法优势迭代次数说牛顿法更加精确需迭代次数更少单次迭代说牛顿法计算步骤更计算更加复杂次迭代需时间更长拟牛顿法采简化似公式次迭代更加迅速非线性方程组求逆程较简单时方程组1情况时拟牛顿法具明显优势非线性方程组求逆程较复杂时方程组2情况拟牛顿法体现出优势然循环次数增加CPU耗时反更少
外方程组压缩映射区间说般言区间函数呈现单调者具单值特性函数适合应牛顿法初始值敏感程度较低算法具收敛性拟牛顿法需迭代程中矩阵求逆利差商代矩阵求导初始误差较时倒数矩阵差商偏差较初始值敏感程度较
附录:程序代码
方程1牛顿法
tic
format long
初值
disp('请输入初值')
ainput('第1分量:')
binput('第2分量:')
cinput('第3分量:')
disp('选定初值')
x[abc]
误差求
E00001
迭代
i0
e2*E
while e>E
F[12*x(1)x(2)^24*x(3)7x(1)^2+10*x(2)x(3)11x(2)^3+10*x(3)8]
f[122*x(2)42*x(1)10103*x(2)^210]
det_x((f)^(1))*(F)
xx+det_x
emax(norm(det_x))
ii+1
end
disp('迭代次数')
i
disp('迭代次数')
x
toc
方程1拟牛顿法
tic
format long
初值
初值
disp('请输入初值')
ainput('第1分量:')
binput('第2分量:')
cinput('第3分量:')
disp('选定初值')
x0[abc]
误差求
E00001
迭代
i0
e2*E
A0eye(3)
while e>E
F0[12*x0(1)x0(2)^24*x0(3)7x0(1)^2+10*x0(2)x0(3)11x0(2)^3+10*x0(3)8]
x1x0A0^(1)*F0
sx1x0
F1[12*x1(1)x1(2)^24*x1(3)7x1(1)^2+10*x1(2)x1(3)11x1(2)^3+10*x1(3)8]
yF1F0
A1A0+(yA0*s)*s'(s'*s)
x0x1
A0A1
emax(norm(s))
ii+1
end
disp('迭代次数')
i
disp('迭代次数')
x0
toc
方程2牛顿法
tic
format long
初值
disp('请输入初值')
ainput('第1分量:')
binput('第2分量:')
cinput('第3分量:')
disp('选定初值')
x[abc]
误差求
E00001
迭代
i0
e2*E
while e>E
F[3*x(1)cos(x(2)*x(3))05x(1)^281*(x(2)+01)^2+sin(x(3))+106exp(1)^(x(1)*x(2))+20*x(3)+(10*pi3)3]
f[3x(3)*sin(x(2)*x(3))x(2)*sin(x(2)*x(3))2*x(1)162*x(2)815cos(x(3))x(2)*exp(1)^(x(1)*x(2))x(1)*exp(1)^(x(1)*x(2))20]
det_x((f)^(1))*(F)
xx+det_x
emax(norm(det_x))
ii+1
end
disp('迭代次数')
i
disp('迭代次数')
x
toc
方程2拟牛顿法
tic
format long
初值
初值
disp('请输入初值')
ainput('第1分量:')
binput('第2分量:')
cinput('第3分量:')
disp('选定初值')
x0[abc]
误差求
E00001
迭代
i0
e2*E
A0eye(3)
while e>E
F0[3*x0(1)cos(x0(2)*x0(3))05x0(1)^281*(x0(2)+01)^2+sin(x0(3))+106exp(1)^(x0(1)*x0(2))+20*x0(3)+(10*pi3)3]
x1x0A0^(1)*F0
sx1x0
F1[3*x1(1)cos(x1(2)*x1(3))05x1(1)^281*(x1(2)+01)^2+sin(x1(3))+106exp(1)^(x1(1)*x1(2))+20*x1(3)+(10*pi3)3]
yF1F0
A1A0+(yA0*s)*s'(s'*s)
x0x1
A0A1
emax(norm(s))
ii+1
end
disp('迭代次数')
i
disp('迭代次数')
x0
toc
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档