﻿功能:非线性方程组求解(采用Levenberg-Marquardt算法进行求解)

格式:

[ax,error]=nlinsolveLM(f,x,x0,d,erro,loop)
[ax,error]=nlinsolveLM(f,x,x0,d,erro)
[ax,error]=nlinsolveLM(f,x,x0,d)
[ax,error]=nlinsolveLM(f,x,x0)
[ax,error]=nlinsolveLM(f,x)

f:符号变量,里面主要储存一连串的函数方程,每个方程用逗号分隔.注意如果方程为sin(x)-cos(y)*7=8,那么f里储存的就是sin(x)-cos(y)*-8,即要把方程右边的常数项变为0
x:储存f里变量的符号变量,每个变量名称以逗号分隔
x0:x对应变量的初始迭代值.x0为数据时,每个x的初始值均为x0,当x0为矩阵变量(1*m或者m*1的矩阵,其中m表示x变量的个数),则x0每个元素依次初始化给x.默认初始迭代值均为1.369857425
d:为了防止矩阵奇异的阻尼因子,d为数据或者矩阵变量(1*m或者m*1的矩阵,其中m表示x变量的个数),其中d默认为0
erro:不小于0的误差控制变量,默认为1e-7
loop:迭代的次数上限,此值必须大于0,默认为3000

ax:返回求得的解
error:返回的残差平方和

例子:
//请求解下面的方程组
//sin(x)*8+4*y^2-z=10
//x^2-cos(z)*7=1.235
//log(x^2+4)*7-y*z+7=12.78

f="sin(x)*8+4*y^2-z-10,x^2-cos(z)*7-1.235,log(x^2+4)*7-y*z+7-12.78";
x="x,y,z";
[an,er]=nlinsolveLM(f,x)//回车后得到如下的结果
an =
[ -2.4793731449692      -0.8867801872165      -11.773433478452    ]
er =
[  1.7514593908E-15 ]

//By 2012/6/20