﻿功能:非线性方程求解

格式:
[xv, er] = nlinSolve(f, varName, x0, xmin, xmax, xType, maxInter, error)
[xv, er] = nlinSolve(f, varName, x0, xmin, xmax, xType, maxInter)
[xv, er] = nlinSolve(f, varName, x0, xmin, xmax, xType)
[xv, er] = nlinSolve(f, varName, x0, xmin, xmax)
[xv, er] = nlinSolve(f, varName, x0, xmin)
[xv, er] = nlinSolve(f, varName, x0)
[xv, er] = nlinSolve(f, varName)

f      : 符号矩阵变量,存储约束表达式
varName: 字符串存储的,需要求解变量名称,每个名称以逗号分隔
x0     : 矩阵变量或者数值,表示变量初值,默认为0
xmin   : 矩阵变量或者数值,表示变量下限,默认为无穷小
xmax   : 矩阵变量或者数值,表示变量上限,默认为无穷大
xType  : 矩阵变量或者数值,表示变量类型,默认为0
maxInter: 最大迭代次数,默认10000
error   : 最小目标误差,默认1e-15

xv : 返回对应的解
er : 返回对应的平方误差和

说明:
1. 函数f里的变量必须在varName里存在
2. f里的每个表达式为0时表示最近解
3. varName里的变量不能重复
4. x0,xmin,xmax,xType中的元素顺序严格与varName变量对齐
5. xType为矩阵时,每个元素值对应不同变量类型。为0时,表示为浮点数;为1时,表示为0-1变量;为2时,表示为整数
6. 注意,此求解算法对初值敏感。如果不想设置初值，建议使用【启发式优化】工具箱进行求解。

例子1：
//已知x,y,z满足如下约束,求x,y,z的值
$$
\begin{cases}
5\sin(x)+\cos(yz)+5&=8.36828339496303
\\
5\log(x^2+1)+4y\sin(z)&=-4.2056582945053
\\
x &< y
\end{cases}
$$
//sin(x)*5+cos(y*z)+5=8.36828339496303 
//log(x^2+1)*5+y*sin(z)*4=-4.2056582945053 
//x<y
//则按如下方法求解,注意f里的函数的填写格式 
f = {SymMatrix<矩阵运算\SymMatrix>}([5*sin(x)+cos(y*z)+5-8.36828339496303, 5 * log(x^2+1)+4 * y*sin(z)+4.2056582945053, max(x-y,0)]);
x = "x,y,z";
[ax,er] = nlinSolve(f,x)//回车后得到如下的解ax结果对应x,y,z
x0 =
[ 1.02532244244060
  1.99560737363220
 -1.35538996321831 ]
er =
[ 1.6517483141E-09 ]


例子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 =
[ 0.99996747856487
  0.99993440931585
  0.99986920568599
  0.99973709355287
  0.99947337181058 ]
er =
[ 8.4433920149E-15 ]