﻿功能:求解整数、实数混合非线性方程组

格式:
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt,IntNBird,LoopSum,Error0,MaxX,MinX)
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt,NBird,LoopSum,Error0,MaxX)
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt,NBird,LoopSum,Error0)
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt,NBird,LoopSum)
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt,NBird)
[ax,error]=nlinSolveInt(f,Xname,x0,IsInt)
[ax,error]=nlinSolveInt(f,Xname,x0)
[ax,error]=nlinSolveInt(f,Xname)

f:符号变量存储的方程组表达式,其中每个表达式以逗号分隔
Xname:符号变量存储的方程组里求解变量的名称,每个变量以逗号分隔
x0:对应Xname变量的初始值,如果x0为矩阵变量,则矩阵变量里的数据依依与Xname里变量对应；如果x0为一个数据，则每个Xname变量均初始化此值；如果x0为符号变量，则每个初始值以逗号分隔。程序默认在100以内随机初始化x0
IsInt:为矩阵或者数据变量,表示Xname当中的变量是否为整数,如果为矩阵变量一一和Xname当中变量对应,如果值为1表示整数,否则表示实数.默认为1
Nbird:种群数,默认为100
LoopSum:循环最大次数,默认为3000
Error0:误差控制变量,默认1E-16
MaxX:矩阵变量,如果Xname有n个变量,则MaxA也包含n个数据,每个数据对应Xname里的各个变量,此值表示拟合参数的上限值.如果此值为常数,则各个拟合变量的上限值均为此值.默认为10000
MinX:矩阵变量,如果Xname有n个变量,则MinA也包含n个数据,每个数据对应Xname里的各个变量,此值表示拟合参数的下限值.如果此值为常数,则各个拟合变量的下限值均为此值.默认为-10000

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

特点:

1、采用变异遗传算法求解

2、由于涉及到整数求解,在具体求解时建议将总群数扩大,循环次数加大,并且最好能直接限制求解范围.

例子:

//求解如下x、y、z变量的方程,其中x、z为整数,y为实数.所有值取值范围0到100
/*
sin(x)*y/(z^2+1)+0.0543605694800451 = 0
cos((x^2+z^2)/(y^2+10))*8-x+8.51456194381934 = 0
log((x^2+y^2*3.5+1.23))-z+4.06803027892931 = 0
Sqrt((z*x)^2+(x^2+2.3*z^2))/(y^2+2.3)*x-5.6+1.41447062106455 = 0

*/

f = "sin(x)*y/(z^2+1)+0.0543605694800451,cos((x^2+z^2)/(y^2+10))*8-x+8.51456194381934,log((x^2+y^2*3.5+1.23))-z+4.06803027892931,sqrt((z*x)^2+(x^2+2.3*z^2))/(y^2+2.3)*x-5.6+1.41447062106455";
x="x,y,z";
x0=[1,2,3];//随机设置的初始值
t=[1,0,1];//这里分别表示变量为整数,实数,整数
Ma=[100,100,100];//设置每个参数最大值
Mi=[0,0,0];//设置每个参数最小值
[ax,error]=nlinSolveInt(f,x,x0,t,200,10000,1e-16,Ma,Mi)
ax =
[ 4.00000000000000    5.88999999794880    9.00000000000000 ]
error =
[ 6.7908868870E-17 ]
