﻿功能:采用改进的粒子群优化算法求解非线性方程组

格式:
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w,cx,MaxSpeed,MinSpeed,MaxA,MinA)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w,cx,MaxSpeed,MinSpeed,MaxA)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w,cx,MaxSpeed,MinSpeed)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w,cx,MaxSpeed)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w,cx)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2,w)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1,c2)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0,c1)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum,Error0)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird,LoopSum)
[ax,error]=nlinSolvePSO3(f,Aname,a0,NBird)
[ax,error]=nlinSolvePSO3(f,Aname,a0)

f:存储拟合的符号表达式
Aname:以符号变量存储的需要求解的变量名称,每个名称以逗号分隔
a0:矩阵变量,存储Aname初始估计值,程序默认自动获取。如果此值为一个常数,则每个初值均初始化为此值。
NBird:默认种群数,默认为100
LoopSum:程序循环最大次数,默认为3000
Error0:误差控制参数,默认为1E-16
c1:速度跟新加速度系数,默认为2,建议取值[0,4]之间
c2:速度跟新加速度系数,默认为2,建议取值[0,4]之间
w:惯性权重,默认为1
cx:压缩因子,默认根据c1、c2的值确定.默认情况下cx=2/|2-(c1+c2)-((2+c2)*(c1+c2-4)^0.5|,c1+c2>4;cx=1,c1+c2≤4
MaxSpeed:矩阵变量,如果Aname有n个变量,则MaxSpeed也包含n个数据,每个数据对应Aname里的各个变量,此值表示计算中速度可以达到的最大值.如果此值为常数,则各个速度的最大值均为此常数.默认为10.
MinSpeed:矩阵变量,如果Aname有n个变量,则MinSpeed也包含n个数据,每个数据对应Aname里的各个变量,此值表示计算中速度可以达到的最小值.如果此值为常数,则各个速度的最小值均为此常数.默认为-10.
MaxA:矩阵变量,如果Aname有n个变量,则MaxA也包含n个数据,每个数据对应Aname里的各个变量,此值表示求解参数的上限值.如果此值为常数,则各个拟合变量的上限值均为此值.默认为10000
MinA:矩阵变量,如果Aname有n个变量,则MinA也包含n个数据,每个数据对应Aname里的各个变量,此值表示求解参数的下限值.如果此值为常数,则各个拟合变量的下限值均为此值.默认为-10000

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

例子:

/*
请求解下面的方程组
sin(x)*8+4*y^2-z=10
x^2-cos(z)*7=1.235
log(x^2+4)*7-y*z+7=12.78
依次执行下面的代码后得到最好Ans的结果
*/
f="sin(x)*8+4*y^2-z-10,x^2-cos(z)*7-1.235,log(x^2+4)*7-y*z+7-12.78";x="x,y,z";
[ax,er]=nlinSolvePSO3(f,x)//回车后得到如下的结果,
ax =
[-2.41315334145575   -1.43060070116032   -7.13917324551146  ]
er =
[ 7.9502482324E-17 ]