﻿功能:非线性方程求解

格式:
[xv, er] = nlinSolve(constraint, var, varInital, varMax, varMin, varType)
[xv, er] = nlinSolve(constraint, var, varInital, varMax, varMin)
[xv, er] = nlinSolve(constraint, var, varInital, varMax)
[xv, er] = nlinSolve(constraint, var, varInital)
[xv, er] = nlinSolve(constraint, var)

constraint:字符串向量, 里面存储约束条件, 每个约束条件以逗号分隔, 约束表达式里可以使用">", "<", ">=", "<=", "="约束,当约束里只有常规表达式时,默认表达式等于0
var       :符号变量.存储变量的名称, 每个名称以逗号分隔
varInital :数据或者矩阵变量, 其对应var的初始值。
varMax    :数据或者矩阵变量, 其对应var的变量上限, 默认10000
varMin    :数据或者矩阵变量, 其对应var的变量下限, 默认-10000
varType   :数据或者矩阵变量, 其对应var的变量数据类型, 如果非0表示对应变量为整数, 默认为0(浮点类型)。

xv  :求得最小值时的x值
er  :返回的误差,此值越接近0越好

说明:
本函数内部调用梯度优化模块进行求解.

例子1：
//已知x,y,z满足如下约束,求x,y,z的值
//sin(x)*5+cos(y*z)+5=8.36828339496303 
//log(x^2+1)*5+y*sin(z)*4=-4.2056582945053 
//x<y
//则按如下方法求解,注意f里的函数的填写格式 
f = "sin(x)*5+cos(y*z)+5=8.36828339496303, log(x^2+1)*5+y*sin(z)*4=-4.2056582945053, x>y";
x = "x,y,z";
[ax,er] = nlinSolve(f,x)//回车后得到如下的解ax结果对应x,y,z
ax =
[-5.71889677321983
 -231.770084345831
  0.02352178421310 ]
er =
[ 1.8806727117E-07 ]

例子2:
/*
求100*((x1^2-x2)^2+(x2^2-x3)^2+(x3^2-x4)^2+(x4^2-x5)^2)+(1-x1)^2+(1-x2)^2+(1-x3)^2+(1-x4)^2取最小值时的x1,x2,x3,x4,x5
*/
//依次执行如下3条命令

f = "100*((x1^2-x2)^2+(x2^2-x3)^2+(x3^2-x4)^2+(x4^2-x5)^2)+(1-x1)^2+(1-x2)^2+(1-x3)^2+(1-x4)^2";
x = "x1,x2,x3,x4,x5";
[ax,er] = nlinSolve(f,x)//回车后得到如下的解,
ax =
[ 1.00000000000000
  1.00000000000000
  1.00000000000000
  1.00000000000000
  1.00000000000000 ]
er =
[ 0.00000000000000 ]