﻿功能:RosenBrock算法求解最小值(支持多元函数的非线性表达式求解)

格式:
MinRosenBrock(f,x,x0,a,b,erro,loop)
MinRosenBrock(f,x,x0,a,b,erro)
MinRosenBrock(f,x,x0,a,b)
MinRosenBrock(f,x,x0,a)
MinRosenBrock(f,x,x0)
MinRosenBrock(f,x)

f:为函数表达式,可以是直接输入的表达式,也可以是符号变量代表的表达式
x:为变量名称,一般为符号变量,其里面代表的名称间必须用逗号隔开,如果只有一个变量时,可以直接是变量名称
x0:x对应迭代的初始值,可以是矩阵、数据,如果是矩阵,按行依次取出来作为x的初始迭代值。默认均为 1.57496328
a:放大因子,此值必须大于1,默认为3.56
b:缩减因子,此值必须介于(-1,0)之间,默认为-0.1
erro:不小于0的误差控制变量,默认为1e-6
Loop:大于0的循环次数控制参数,默认为1000

原理:本函数求的是函数f的最小值,采用的是RosenBrock迭代算法求解.本函数求解成功会返回一个行数为1*n的矩阵变量,其中矩阵的前n-1个元素对应于变量x里的元素值,最后一个值就是x在此值下函数f对应的最小值.

例子:

x0=[1 2];
x="x1,x2";
f="(x1-3)^2+2*(x2+2)^2";

minrosenbrock(f,x,x0)//回车后得如下的解,即对函数(x1-3)^2+2*(x2+2)^2求其的最小值,得到如下的解,即当x1=3.00000183646506,x2=-1.9999993329824时,本程序求出一个最小值4.2624287509E-12
ans =
[ 3.00000183646506    -1.9999993329824   4.2624287509E-12 ]

//By2012/6/18