﻿功能:RosenBrock算法求非线性方程组求解(本函数求解时不对函数求导)

格式:
[ax,error]=nlinSolveRosenBrock(f,x,x0,a,b,erro,loop)
[ax,error]=nlinSolveRosenBrock(f,x,x0,a,b,erro)
[ax,error]=nlinSolveRosenBrock(f,x,x0,a,b)
[ax,error]=nlinSolveRosenBrock(f,x,x0,a)
[ax,error]=nlinSolveRosenBrock(f,x,x0)
[ax,error]=nlinSolveRosenBrock(f,x)

f:符号变量存储的方程组表达式,其中每个表达式以逗号分隔
x:符号变量存储的方程组里求解变量的名称,每个变量以逗号分隔
x0:对应x变量的初始值,如果x0为矩阵变量,则矩阵变量里的数据依依与x里变量对应；如果x0为一个数据，则每个x变量均初始化此值；如果x0为符号变量，则每个初始值以逗号分隔。程序默认在100以内随机初始化x0
a:放大因子,此值必须大于1,默认为3.56
b:缩减因子,此值必须介于(-1,0)之间,默认为-0.1
erro:不小于0的误差控制变量,默认为1e-8
Loop:大于0的循环次数控制参数,默认为3000

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

原理:本函数求的是函数f的最小值,采用的是RosenBrock迭代算法求解.

例子:

//请求解如下的方程组
//sin(x)*5+cos(y*z)+5=8.36828339496303
//log(x^2+1)*5+y*sin(z)*4=-4.2056582945053
//则按如下方法求解,注意f里的函数的填写格式

f="sin(x)*5+cos(y*z)+5-8.36828339496303,log(x^2+1)*5+y*sin(z)*4+4.2056582945053";x="x,y,z";
[ax,er]=nlinSolveRosenBrock(f,x)//回车得到如下结果
ax =
[ 0.75565043074863    6.86738586325889   -0.23755196706914  ]
er =
[ 1.6046844450E-23 ]