问题:在进行最优化求极小值或者非线性数据拟合时,可能会遇到连加(算式求和)或者连乘的形式,类似如下的表达式
     f=∑((x(i)^2+x(i+1)*2)/i)     其中i=1,2,3,……n

解决:本程序以符号表达式里输入Sum函数与Mul函数作为识别。这个只针对最优化求极小值或者非线性数据拟合时起作用。

1、累加求和

格式:
Sum(f,i,a,b,s)
Sum(f,i,a,b)
Sum(f,i,b)

f:输入的表达式
i:下标变量名称
a:下标变量起始值,默认为1
b:下标变量的上限值
s:每次下标变化的幅度,默认为1

作用:本函数主要执行如下流程

Sum(f,i,a,b,s)
{
   i=a
   t=0
   While(i<b)
   {
     t=t+f
     i=i+s
   }
   Return t
}

注意:Sum里的表达式支持嵌套


例子:
(1) 请计算 f(x)=0-∑(x(i)*Sin(Sqrt(Abs(x(i))))) 的最小值,其中x有30个变量,即i从1到30.每个x的范围在[-500,500].
//输入如下代码即可

x="x(30)"; //注意这里变量的定义格式
f="Sum(x(i)*Sin(Sqrt(Abs(x(i)))),i,1,30)"; //这里就是Sum函数的输入
[x0,m]=nlinSolveMinPSO(f,x,5,256,10000,12,500,-500); //接下来调用相应函数求解

(2) 请计算 f(x)=0-∑∑(j*Sin((j+1)*x(i)+j)) 的最小值,其中x有30个变量,即i从1到30,j从1到5,每个x的范围在[-10,10].
//输入如下代码即可

x="x(30)"; //注意这里变量的定义格式
f="Sum(Sum(j*Sin((j+1)*x(i)+j),j,1,5),i,1,30)"; //这里就是Sum函数的输入,注意这里是嵌套的使用方法
[x0,m]=nlinSolveMinPSO(f,x,5,256,10000,12,10,-10); //接下来调用相应函数求解


2、累乘求积

格式:
Mul(f,i,a,b,s)
Mul(f,i,a,b)
Mul(f,i,b)

f:输入的表达式
i:下标变量名称
a:下标变量起始值,默认为1
b:下标变量的上限值
s:每次下标变化的幅度,默认为1

作用:本函数主要执行如下流程

Mul(f,i,a,b,s)
{
   i=a
   t=1
   While(i<b)
   {
     t=t*f
     i=i+s
   }
   Return t
}

注意:Mul里的表达式支持嵌套

例子:Mul与Sum函数雷同,且支持互相嵌套.