matlab实现牛顿迭代法求解非线性方程组已知非线性方程组如下
3x1cosx2x3120x1281x2012si
x31060expx1x220x310pi330求解要求精度达到000001首先建立函数fu
储存方程组编程如下将fu
m保存到工作路径中fu
ctio
ffu
x定义非线性方程组如下变量x1x2x3函数f1f2f3symsx1x2x3f13x1cosx2x312f2x1281x2012si
x3106f3expx1x220x310pi33ff1f2f3建立函数dfu
用来求方程组的雅克比矩阵将dfu
m保存到工作路径中fu
ctio
dfdfu
x用来求解方程组的雅克比矩阵储存在dfu
中ffu
xdfdifffx1difffx2difffx3dfco
jdf编程牛顿法求解非线性方程组将
ewto
m保存到工作路径中fu
ctio
x
ewto
x0epsNco
0其中x0为迭代初值eps为精度要求N为最大迭代步数co
用来记录结果是否收敛fori1Nfsubsfu
x0x1x2x3x01x02x03dfsubsdfu
x0x1x2x3x01x02x03xx0fdfforj1le
gthx0ilijxje
dif
ormxx0epsco
1breake
dx0xe
d
f以下是将迭代过程写入txt文档文件名为iteratio
txtfidfope
iteratio
txtwfpri
tffiditeratio
forj1le
gthx0fpri
tffidxdje
dforj1ifpri
tffid
6djfork1le
gthx0fpri
tffid106filjke
de
difco
1fpri
tffid
计算结果收敛!e
difco
0fpri
tffid
迭代步数过多可能不收敛!e
dfclosefid运行程序在matlab中输入以下内容
ewto
01010100000120输出结果
在iteratio
中查看迭代过程iteratio
x1x2x3
fmulStablePoi
t用不动点迭代法求非线性方程组的一个根
fu
ctio
r
mulStablePoi
tFx0eps
非线性方程组:f
初始解:a
解的精度:eps
求得的一组解:r
迭代步数:
if
argi
2
eps10e6
e
d
x0tra
sposex0
1
tol1
whiletoleps
rsubsFfi
dsymFx0
迭代公式
tol
ormrx0
注意矩阵的误差求法,
orm为矩阵的欧几里德范数
1
x0r
if
100000
迭代步数控制
disp迭代步数太多,可能不收敛!retur
e
de
d
x0000r
databudo
gx0
disp不动点计算结果为x1111x2222x
data
ew_to
r