软件推荐-国内参数优化软件:1stOpt - First Optimizationg

首页:http://www.7d-soft.com/index.htm

 

 

 

 

4.0新功能 (预定2010年8月6日):

1:支持复数拟合、复数方程组计算;

2:支持微分方程拟合求解;

3:通用全局优化求解器变异功能,优化能力提高20%以上;

4:新的编程模式计算引擎;

5:强大易用的数据批处理拟合功能

6:公式自动搜索:增加更多的二维、三维函数库;

7:改进的积分计算,拟合,解方程可含有积分函数,支持高斯积分和辛普森积分算法

8:三维图形旋转、缩放、移动等功能

9:?号输入,可动态输入常数。

10:参数定义更加方便自由:Parameter 0<=a<=10, b=[1,3];

11:更多的数学函数支持:Wrap、Wrap0…

12:支持更多功能的关键字:FileWeight,OutWeight…

13:重复计算时自动记录每次结果

14:Exp函数计算修正,与Matlab等保持一致:Exp(-3^0.23)-> Exp(-(3^0.23))

15:….

3.0新功能 (2009年5月1日):

New in 3.0

1:重新设计的与其它高级语言的接口,更加方便与C++, Fortran, Basic, Pascal等语言的浑编联动。

2:增加新的算法:稳健全局优化算法。

3:改进了离子群和最大继承算法,优化能力更强。

4:增加了常微分方程(ODE)的求解功能,算法包括:龙格-库塔-费尔博格法(Runge-Kutta-Fehlberg Method)、欧拉算法(Euler
Method)、2-5阶龙格-库塔算法(Runge-Kutta Method),不仅能求解一般的初值ODE方程,还能解特殊形式的ODE方程,对边值问题的ODE方程也能轻松求解。

5:对线性规划问题自动判断识别,速度更快。

6:更加灵活的LoopConstant定义:LoopConstant d=[2,(max(x,1))];

7:与Vista兼容

8:编程模式增加对特殊函数的支持(Erf, Erfc, Gamma, Bessel…)

9:Parameter对For的支持。

10:拟合计算结束进行预测时,可计算每一点的导数

11:SubDivision、RunNext与Inherit功能

12:LogFile自动保存功能

13:RowData、RowDataSet与EndRowDataSet关键字

14:更加方便的Sum(),Prod()和For()语句

15:3D图形新格式:点状三维图

16:“恢复刚关闭的文件“功能

….

2.5新功能 (2006年10月7日):

1:更加出色、稳健的通用全局优化能力

1:对Basic的全面支持

2:参数型变量问题的拟合(未知中间变量):ParVariable

3:带积分的拟合和函数优化

4:隐函数优化算法的改进,速度增加10倍

5:隐函数拟合算法的订正:TradImplicit, ImplicitRange

6:BatchFile: 文件批处理功能

7:StepReg:逐步拟合功能

8:CodeSheet:代码本表格,支持直接从表格中读取数据

9:代码本显示形式:单业、多业和下拉

10:LoopConstant、FullLoopModel:自动循环计算功能

11:Constant a(1:3)=[1,2,3] -> Constant a = [1,2,3]

12:WeightReg:灵活多变、任意形式的带权重拟合

13:PassParameter:编程模式下支持返回计算变量

14:参数初值自动选择更加智能、健壮,适应范围更广

15:RegType:最小二乘法、最小一乘法等不同形式拟合

16:MDataSet,EndMDataset:网络节点数据自动转至矩阵数据

17:HotRun:设定自动热计算及计算次数

18:Sum,Prod,For更简洁写法

19:编程模式下可以直接定义二维参变量

20:Plot、PlotLoopData:迭代计算过程中更加丰富、强大的动态图形表示方式

21:众多改进及Bug修正

2.0新功能 (2006年10月7日):

1:求解非线性方程组功能大幅改进,【麦夸特法+通用全局优化算法】已成为解非线性方程组的首选算法,其改进后的求解能力总体上强于任何其它算法。

2:最大最小优化问题求解 (MinMax):一种多目标优化求解功能。

3:智能拟合功能:该功能特别适合于数据量很大时的拟合,可数倍甚至数十倍缩短计算时间,数据量越大,效果越明显。

4:改进的非常容易实现的带等式或不等式约束的拟合

5:算法自动选择功能:对于刚接触1stOpt的用户而言,由于不清楚各算法的特点及适用范围,常无法确定如何选择算法,该功能可根据问题的类型自动选择算法。

6:函数表达式以脚本语言描述表达功能:对于复杂、繁琐、冗长的问题,可通过脚本语言来描述

7:常字符串数组表达功能:定义字符串数组功能

例:ConstStr S(1:3) = [x1^2+x2, x1*x2-x2^2, sin(x1)+x2];

等同于:ConstStr S1 = x1^2+x2, S2 = x1*x2-x2^2, S3 = sin(x1)+x2;

例:ConstStr S(1:3) = x2*[x1^2+x2, x1*x2-x2^2, sin(x1)+x2];

等同于:ConstStr S1 = x2*(x1^2+x2), S2 = x2*(x1*x2-x2^2), S3 = x2*(sin(x1)+x2);

8:公式拟合自动搜索时稳健模式搜索功能

9:0-1规划,修正数值范围溢出问题

10:公式自动拟合库中,增加众多峰函数

11:约束函数连续表达功能:

例:10.3>=x1+sin(x2)*x3>=0

等同于:

x1+sin(x2)*x3>=0;

x1+sin(x2)*x3<=10.3;

例:Parameter x1[0.5,0.66], x4[0.04,0.2], x7[,0.035];

MinFunction 0.44*x1+0.94*x2+0.88*x3+0.48*x4+4*x5+3.4*x6+2.3*x7+0.12*x8+1.6*x9+19*x10+25*x11;

3230*x1+2640*x2+2500*x3+1730*x4+2900*x5+2230*x6+2500*x7>2750;

8.27*x1+43*x2+40*x3+15.4*x4+62*x5+50*x6+45*x7>15;

8.27*x1+43*x2+40*x3+15.4*x4+62*x5+50*x6+45*x7<16;

0.038*x1+0.32*x2+0.32*x3+0.14*x4+3.91*x5+4.6*x6+33.4*x8+21*x9>2.85;

0.038*x1+0.32*x2+0.32*x3+0.14*x4+3.91*x5+4.6*x6+33.4*x8+21*x9<3;

0.058*x1+0.15*x2+0.14*x3+0.32*x4+2.9*x5+2.15*x6+0.14*x8+18.5*x9>0.5;

0.058*x1+0.15*x2+0.14*x3+0.32*x4+2.9*x5+2.15*x6+0.14*x8+18.5*x9<0.55;

0.26*x1+2.45*x2+2.41*x3+0.54*x4+4.35*x5+3.28*x6+2.6*x7+99*x11>0.8;

0.125*x1+0.48*x2+0.51*x3+0.18*x4+1.65*x5+1.31*x6+0.65*x7+99*x10>0.31;

0.298*x1+1.08*x2+1.4*x3+0.58*x4+2.21*x5+1.74*x6+0.83*x7+99*x10>0.58;

0.298*x1+1.08*x2+1.4*x3+0.58*x4+2.21*x5+1.74*x6+0.83*x7+99*x10<0.63;

0.077*x1+0.6*x2+0.6*x3+0.27*x4+0.8*x5+0.64*x6>0.19;

x2+x3>0.1;

x2+x3<0.22;

x5+x6>0.03;

x5+x6<0.07;

x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11=1;

可写为:

Parameter x1[0.5,0.66], x4[0.04,0.2],x7[,0.035];

MinFunction 0.44*x1+0.94*x2+0.88*x3+0.48*x4+4*x5+3.4*x6+2.3*x7+0.12*x8+1.6*x9+19*x10+25*x11;

3230*x1+2640*x2+2500*x3+1730*x4+2900*x5+2230*x6+2500*x7>2750;

16>8.27*x1+43*x2+40*x3+15.4*x4+62*x5+50*x6+45*x7>15;

3>0.038*x1+0.32*x2+0.32*x3+0.14*x4+3.91*x5+4.6*x6+33.4*x8+21*x9>2.85;

0.55>0.058*x1+0.15*x2+0.14*x3+0.32*x4+2.9*x5+2.15*x6+0.14*x8+18.5*x9>0.5;

0.26*x1+2.45*x2+2.41*x3+0.54*x4+4.35*x5+3.28*x6+2.6*x7+99*x11>0.8;

0.125*x1+0.48*x2+0.51*x3+0.18*x4+1.65*x5+1.31*x6+0.65*x7+99*x10>0.31;

0.63>0.298*x1+1.08*x2+1.4*x3+0.58*x4+2.21*x5+1.74*x6+0.83*x7+99*x10>0.58;

0.077*x1+0.6*x2+0.6*x3+0.27*x4+0.8*x5+0.64*x6>0.19;

0.22>x2+x3>0.1;

0.07>x5+x6>0.03;

x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11=1;

12:矩阵计算,基本函数求导计算

13:带权重的拟合功能

14:带约束的超越方程求解

15:For语句,支持循环表达式

16:支持自动重复计算

17:改进的预测/验证功能

18:DataSet,AutoData定义数据时,可指定起始基数:

缺省时,起始基数为1

例:

DataSet;

EndDataSet:

例:AutoData x = 1:1:10;

例:定义起始基数为0

DataSet [Base = 0];

EndDataSet:

例:AutoData[Base = 0] x = 1:1:10;

19:增加IFF关键字

20:代码中直接从Excel表单和1stOpt电子表格中读取数据:必须指定文件名、表单名及数据范围

例:从Excel文件“C:\Data1.xls”中的“Sheet1”中读取数据进行拟合计算,数据范围从A1到B20

Function y = a + b*x + Exp(c*x);

DataFile C:\Data1.xls[Sheet1[A1:B20]];

21:常数连续定义:

例:Constant A(1:3) = 2;

等同于 Constant A1 = 2, A2 = 2, A3 = 2;

例:Constant A(1:3) = 10*[1,2,3];

等同于 Constant A(1:3) = [10,20,30];

22:增强的编程模式,可完善自动处理任意多的等式及不等式约束,对于复杂的带约束的工程问题,可轻易求解。

23:修正定义多维常数、参数时出现的问题

1.5新功能 (2006年4月18日):

1:单纯形线性规划算法中,可进行整数规划、混合整数规划计算。

2:编程模式中,对约束条件的自动处理功能。

3: 权重拟合功能

4:结果数据自动保存功能。

5:同一代码本中,所有问题同时求解功能。

6:函数优化预测检验功能

7:数据自动产生功能: 关键字: AutoData

例:AutoData X = 1:1:10, Y = X^2+X;

等同于:Constant X(1:10) = [1,2,3,4,5,6,7,8,9,10];

Constant Y(1:10) = [2,6,12,20,30,42,56,72,90,110];

8: 循环语句关键字:For,支持无穷镶套

例:For(i=1:3)(x[i]>=A[i]*i);

等同于: x[1] >=A[1]*1;

x[2] >=A[2]*2;

x[3] >=A[3]*3;

9: 新增特殊密度分布函数:BetaCDF, BetaPDF, BinoCDF, BinoPDF, Chi2CDF, Chi2PDF, ExpCDF,
ExpPDF, PoissCDF, PoissPDF, TCDF, TPDF

10:增加函数求导计算功能

例:(x*exp(x+sin(x)))’ ==>

diff(x*exp(x+sin(x)),x) = exp(x+sin(x))+exp(x+sin(x))*(1+cos(x))*x

diff(x*exp(x+sin(x)),x=3) = exp(x+sin(x))+exp(x+sin(x))*(1+cos(x))*x = 23.82417126

11:新增:

BinParameter: 定义0-1变量;

IntParameter: 定义正整数变量;

ParameterDomain:定义变量范围;

PlotXYZData:画三维数据图;

PlotMeshData:画三维网格数据图;

PlotPoint3D:画三维点图;

12:众多改进,运行更快捷、稳定。

错误纠正:

1:函数表达式中出现空格显错的问题。

2:拟合时,用“DataFile”调用外部数据文件出错。

3:用超过两次“DataSet- EndDataSet”定义数据时出错

4:拟合时,用“SkipStep“出错。

5:函数中出现诸如“2E+10“时显错的问题。

6: 其它诸多Bugs

  1 //There are many test examples located in the folder: examples\
  2 
  3 //Nonlinear regression: any No. of variables and parameters, any user-defined function
  4 Title "NLReg Demo - 1";
  5 Parameter b1, b2, b3, b4;
  6 Variable x, y;
  7 Function y=exp(b1*x)+exp(b2*x)+b3*sin(b4*x);
  8 Data;
  9 //x    y
 10 2    4
 11 2.1    4.1
 12 2.2    4.3
 13 2.3    4.5
 14 2.4    4.6
 15 2.5    4.8
 16 2.6    5.0
 17 2.7    5.1
 18 2.8    5.3
 19 2.9    5.5
 20 
 21 NewDivision "NLReg Demo - 2";
 22 //Data may be in codesheet, the simplified formation is like below:
 23 Function y=exp(b1*x)+exp(b2*x)+b3*sin(b4*x);
 24 DataFile "CodeSheet1[A2:B11]"; //Press F2 to view data
 25 
 26 NewDivision "NLReg Demo - 3";
 27 //The data may be in row type:
 28 Function y=exp(b1*x)+exp(b2*x)+b3*sin(b4*x);
 29 RowData;
 30 2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9;
 31 4,4.1,4.3,4.5,4.6,4.8,5.0,5.1,5.3,5.5;
 32 
 33 NewDivision "NLReg Demo - 4";
 34 //In program model (Pascal):
 35 Variable x, y;
 36 Parameter b(4);
 37 StartProgram [Pascal];
 38 Procedure MainModel;
 39 var i: integer;
 40 Begin
 41     for i := 0 to DataLength - 1 do
 42         y[i] := exp(b1*x[i])+exp(b2*x[i])+b3*sin(b4*x[i]);
 43 End;
 44 EndProgram;
 45 RowData;
 46 2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9;
 47 4,4.1,4.3,4.5,4.6,4.8,5.0,5.1,5.3,5.5;
 48 
 49 NewDivision "NLReg Demo - 5";
 50 //In program model (Basic):
 51 Variable x, y;
 52 Parameter b(4);
 53 StartProgram [Basic];
 54 Sub MainModel
 55    Dim i as integer
 56    for i = 0 to DataLength - 1
 57        y(i) = exp(b1*x(i))+exp(b2*x(i))+b3*sin(b4*x(i))
 58    Next
 59    ConstrainedResult = b1+b2+b3=1
 60 End Sub
 61 EndProgram;
 62 DataFile "CodeSheet1[A2:B11]"; //Press F2 to view data
 63 
 64 NewDivision "NLReg Demo - 6";
 65 //Constrained regression: b1, b2, b3 >=0; b1+b2+b3=1;
 66 Parameter b(3) =[0,];
 67 Function y=exp(b1*x)+exp(b2*x)+b3*sin(b4*x);
 68          b1+b2+b3=1;
 69 DataFile "CodeSheet1[A2:B11]"; //Press F2 to view data
 70 
 71 NewDivision "NLReg Demo - 7";
 72 //parameters are shared by various function
 73 SharedModel;
 74 Variable x,y1,y2;
 75 Function y1=a+g*t^2*x^2/(1+t^2*x^2)+c*x^d;
 76          y2=b+g*t*x/(1+t^2*x^2)+c*x^d1;
 77 DataFile "CodeSheet1[C2:E23]"; //Press F2 to view data
 78 
 79 NewDivision "NLReg Demo 8";
 80 //curve fitting with integration
 81 Variables x, y;
 82 Parameters a, b, c, d;
 83 Function y=a-b*exp(-c*x^d)*int((t+x)*sin(x),t=0.1:c);
 84 data;
 85 0.05 0.13
 86 0.15 0.13
 87 0.25 0.19
 88 0.35 0.34
 89 0.45 0.53
 90 0.55 0.71
 91 0.65 1.06
 92 0.75 1.6
 93 0.85 1.64
 94 0.95 1.83
 95 1.05 2.09
 96 1.15 2.05
 97 1.25 2.13
 98 1.35 2.12
 99 1.45 2.09
100 
101 NewDivision "NLReg Demo 9";
102 {Two times of x-y data with different T, k1, k2, k3, k4 are parameters,
103 regression equation: y=k1*k3*exp((k2+k4)/T)*x/(1+k3*exp(k4/T)*x)
104 
105 Data:
106    T= 288K                            T=303K
107 x                    y        x                     y
108 0                    0        0                     0
109 3.41586        0.04887        8.31345        0.0901
110 9.47655        0.13519        28.43464        0.26128
111 24.02448        0.29356        59.3231        0.4764
112 56.42759        0.51347        94.48793        0.66564
113 93.07483        0.7103        135.639        0.836
114 132.8176        0.8863        179.1531        0.97904
115 172.8579        1.03949        218.6459        1.0981
116 210.2345        1.16252        254.779        1.18808
117 238.6986        1.27173        283.5697        1.25296
118 272.3641        1.35695        308.7593        1.30915
119 297.1748        1.42801
120 313.8014        1.48757
121 
122 How to estimate paremeters of k?   }
123 Variable x,y;
124 Parameter k(4);
125 VarConstant t=[288,303];
126 StartProgram [Pascal];
127 Procedure MainModel;
128 var j: integer;
129 Begin
130      for j := 0 to DataLength -1 do
131          y[j] := k1*k3*exp((k2+k4)/T)*x[j]/(1+k3*exp(k4/T)*x[j]);
132 
133 End;
134 EndProgram;
135 Data;
136 //x    y
137 0    0
138 3.41586    0.04887
139 9.47655    0.13519
140 24.02448    0.29356
141 56.42759    0.51347
142 93.07483    0.7103
143 132.8176    0.8863
144 172.8579    1.03949
145 210.2345    1.16252
146 238.6986    1.27173
147 272.3641    1.35695
148 297.1748    1.42801
149 313.8014    1.48757
150 Data;
151 //x    y
152 0    0
153 8.31345    0.0901
154 28.43464    0.26128
155 59.3231    0.4764
156 94.48793    0.66564
157 135.639    0.836
158 179.1531    0.97904
159 218.6459    1.0981
160 254.779    1.18808
161 283.5697    1.25296
162 308.7593    1.30915
163 
164 NewDivision "NLReg Demo 10";
165 Function y=c*(1+Erf(((x-b)*exp(-a*(x/b)))/(sqrt(2)*a*b)));
166 Data;
167 0      0
168 50    0
169 100   0
170 150   0
171 200  0
172 250  0
173 300  0
174 350  0
175 400  0
176 450  0.04
177 500  0.08
178 550  0.14104
179 600  0.18635
180 650  0.24
181 700  0.3
182 750  0.38272
183 800  0.44474
184 850  0.5573
185 900  0.64532
186 950  0.69053
187 1000  0.76975
188 1050  0.82394
189 1100  0.86369
190 1150  0.90259
191 1200  0.93255
192 1250  0.96256
193 1300  0.98994
194 1350  0.99023
195 1400  0.99621
196 1450  0.99821
197 1500  1
198 1550  1
199 1600  1
200 
201 NewDivision "NLReg Demo 11";
202 Parameter a,b,c,d;
203 Function y = (A-D)/(1+(x/C)^B) + D;
204 Data;
205 0.01953125  0.624
206 0.078125   0.728
207 0.15625   0.827
208 0.3125   0.976
209 0.390625   1.138
210 0.625   1.243
211 2.5   1.292
212 5   1.414
213 10   1.496
214 
215 NewDivision "Equation Solve - 1";
216 Function x*0.090949*0.274666*(1 - y*Exp(-4*z)) - a = 0.00097;
217          x*0.206949*0.274666*(1 - y*Exp(-40*z)) - a = 0.00681;
218          x*0.230149*0.274666*(1 - y*Exp(-46*z)) - a = 0.00785;
219          x*0.241749*0.274666*(1 - y*Exp(-109*z)) - a = 0.01131;
220          
221 NewDivision "Equation Solve - 2";
222 Constant R=50,D=10,bta=0.75,p=10e6;
223 Parameter x,y,m,n;
224 Function
225 p+2*bta*R^3*x/(3*R+2*D-m)^3+2*bta*R^3*x/(3*R+2*D-m)^3+2*bta*R^3*y/(R+D-n)^3=R^3*y/(R-n)^3;
226 p+2*bta*R^3*x/(5*R+2*D-m)^3+2*bta*R^3*x/(R+D-m)^3+2*bta*R^3*y/(3*R+D-m)^3=R^3*y/(R+n)^3;
227 p+2*bta*R^3*x/(5*R+3*D-m)^3+2*bta*R^3*y/(3*R+2*D-n)^3+2*bta*R^3*y/(R+D+n)^3=R^3*x/(R-m)^3;
228 p+2*bta*R^3*x/(7*R+3*D-m)^3+2*bta*R^3*y/(5*R+2*D-n)^3+2*bta*R^3*y/(3*R+D+n)^3=R^3*x/(R+m)^3;
229 
230 NewDivision "Equation Solve - 3";
231 {System equations:
232 1-2*cos(a1)+2*cos(a2)-2*cos(a3)+2*cos(a4)-2*cos(a5)+2*cos(a6)=1.60;
233 1-2*cos(5*a1)+2*cos(5*a2)-2*cos(5*a3)+2*cos(5*a4)-2*cos(5*a5)+2*cos(5*a6)=0;
234 1-2*cos(7*a1)+2*cos(7*a2)-2*cos(7*a3)+2*cos(7*a4)-2*cos(7*a5)+2*cos(7*a6)=0;
235 1-2*cos(11*a1)+2*cos(11*a2)-2*cos(11*a3)+2*cos(11*a4)-2*cos(11*a5)+2*cos(11*a6)=0;
236 1-2*cos(13*a1)+2*cos(13*a2)-2*cos(13*a3)+2*cos(13*a4)-2*cos(13*a5)+2*cos(13*a6)=0;
237 1-2*cos(17*a1)+2*cos(17*a2)-2*cos(17*a3)+2*cos(17*a4)-2*cos(17*a5)+2*cos(17*a6)=0;}
238 ParameterDomain = [0,pi/2];
239 Constant p=[1,5,7,11,13,17], v=[1.6,0,0,0,0,0];
240 Function For(i=1:6,p,v)(1-2*cos(p*a1)+2*cos(p*a2)-2*cos(p*a3)+2*cos(p*a4)-2*cos(p*a5)+2*cos(p*a6)=v);
241 
242 NewDivision "ODE Function";
243 Variable t = [0,3], y=1, z=1;
244 Plot y[x], z;
245 ODEOptions = [SN=200,A=0,P=30];
246 ODEFunction y' = cos(z'-y')*t*y/(1+z);
247                       z' = (t*z+y*exp(y)*sin(y'))/2;
248 
249 NewDivision "Function Optimization - 1";
250 MinFunction Ba;
251             Ba*SO4=1;
252             BaOH/Ba*OH=4.8;
253             HSO4/SO4*H=0.98;
254             H*OH=1;
255             Ba+10^(-7)*BaOH=SO4+10^(-5)*HSO4;
256             2*Ba+1E-7*BaOH+1E-2H=2*SO4+1E-5*HSO4+1E-2*OH;
257             
258 NewDivision "Rosenbrok function";
259 Constant n=4;
260 Parameters x(1:n+1)[-1.5,1.5];
261 Minimum = true;
262 Function sum(i=1:n)(100*(x[i+1]-x[i]^2)^2+(1-x[i])^2);
263 
264 NewDivision "Ackley function 2 - Optimization";
265 Constant n = 4;
266 Parameters x(1:n)[-30,30];
267 Minimum = true;
268 Function sum(i=1:n-1)(3*(cos(2*x[i])+sin(2*x[i+1]))+sqrt(x[i+1]^2+x[i]^2));
269 
270 NewDivision "NLReg Demo 12";
271 //nonlinear regression with multi-files
272 Variable t,h;
273 Parameter a, a1, k, k1;
274 VarConstant b=[2,4,6,8];
275 StartProgram [Pascal];
276 Procedure MainModel;
277 var i: integer;
278     temb, h0: double;
279 Begin
280     temb := b;
281     h0 := 0;
282     for i := 0 to DataLength -1 do begin
283         h0 := h0+ a*(temb-a1*tanh(k1*h0))*exp(k*(temb-a1*tanh(k1*h0)))*250;
284         h[i] := h0;
285     end;
286 End;
287 EndProgram;
288 Data;
289 //0    0
290 250    0.226066238
291 500    0.281510409
292 750    0.314326458
293 1000    0.351110333
294 1250    0.375454391
295 1500    0.398296935
296 1750    0.417922218
297 2000    0.435617147
298 2250    0.451381719
299 Data;
300 //0    0
301 250    0.5653775
302 500    0.8946725
303 750    1.1468305
304 1000    1.3735105
305 1250    1.5691755
306 1500    1.7503255
307 1750    1.9100265
308 2000    2.0534495
309 2250    2.1794185
310 Data;
311 //0    0
312 250    1.760498
313 500    2.784063
314 750    3.657308
315 1000    4.438827
316 1250    5.171771
317 1500    5.860787
318 1750    6.513054
319 2000    7.140139
320 2250    7.746008
321 Data;
322 //0    0
323 250    4.03011
324 500    6.880921
325 750    9.285056
326 1000    11.364176
327 1250    13.288876
328 1500    14.892276
329 1750    16.389606
330 2000    17.784386
331 2250    19.036266
332 
333 NewDivision "ODE Regression";
334 //Eurle method
335 //x'=dx/dt=p1*(20-x)+p2*(p3-x);
336 //y'=dy/dt=p1*(x-y)+p2*(p3-y)
337 //z'=dz/dt=p1*(y-z)+p2*(p3-z)
338 Constant V = [10,15,20]; //Initial Values
339 Constant dt=1;
340 Parameter p(3);//=[0.5,100];
341 Variable t, x[OutPut], y[OutPut], z[OutPut];
342 StartProgram [Pascal];
343 Procedure MainModel;
344 var i: integer;
345     x0,y0,z0: double;
346 Begin
347     x0 := V[1];
348     y0 := V[2];
349     z0 := V[3];
350     for i := 0 to DataLength - 1 do begin
351         x0 := (p1*(20-x0)+p2*(p3-x0))*dt+x0;
352         y0 := (p1*(x0-y0)+p2*(p3-y0))*dt+y0;
353         z0 := (p1*(y0-z0)+p2*(p3-z0))*dt+z0;
354         x[i] := x0;
355         y[i] := y0;
356         z[i] := z0;
357     end;
358 End;
359 EndProgram;
360 Data;
361 //0    10    15    20
362 1    11.80    15.37    20.77
363 2    14.04    17.04    22.23
364 3    15.44    16.85    21.16
365 4    17.80    18.07    22.49
366 5    18.60    19.43    24.46
367 6    19.22    20.12    23.58
368 7    21.77    21.83    24.51
369 8    22.17    22.11    25.38
370 9    23.41    23.37    25.53
371 10    23.17    24.92    26.69
372 11    24.56    25.55    29.21
373 12    25.85    26.06    28.00
374 13    24.64    28.94    30.32
375 14    25.15    28.94    30.41
376 15    26.92    30.06    31.87
377 16    26.37    29.29    31.87
378 17    26.71    31.48    34.60
379 18    26.61    31.86    33.57
380 19    27.13    33.84    36.75
381 20    29.32    32.95    36.36
382 21    28.24    33.03    36.23
383 22    28.42    32.50    36.01
384 23    28.11    33.12    39.19
385 24    28.98    35.32    37.29
386 25    30.23    35.56    37.79
387 26    30.21    34.86    42.05
388 27    29.11    35.40    42.67
389 28    30.42    36.20    40.74
390 29    28.84    35.91    40.53
391 30    29.44    36.50    43.33
392 
393 NewDivision "ODE Regression";
394 //4th-order RK
395 Constant y1_1=10, y2_1=15, y3_1=20; //Initial Values
396 Constant m=3, dx=1;  //m: function number
397 Parameter p(3);//=[0.5,100];
398 Variable t, x[OutPut], y[OutPut], z[OutPut];
399 Minimum;
400 StartProgram [Pascal];
401 Procedure MainModel;
402 var i, j: integer;
403     y1_2, y2_2, y3_2: double;
404     y11, y21, y31: double;
405     rk1, rk2, rk3, rk4, y_y, yy, dydx: array[0..m-1] of double;
406     x, tx: double;
407     Procedure Drive(x_d: double; y_d: array of double; var dydx_d: array of double);
408     begin
409          dydx_d[0] := p1*(20-y_d[0])+p2*(p3-y_d[0]);
410          dydx_d[1] := p1*(y_d[0]-y_d[1])+p2*(p3-y_d[1]);
411          dydx_d[2] := p1*(y_d[1]-y_d[2])+p2*(p3-y_d[2]);
412     end;
413 begin
414     yy[0]:=y1_1;
415     yy[1]:=y2_1;
416     yy[2]:=y3_1;
417     y_y[0]:=y1_1;
418     y_y[1]:=y2_1;
419     y_y[2]:=y3_1;
420     for i := 0 to DataLength-1 do begin
421         for j := 0 to m-1 do y_y[j] := yy[j];
422         tx := dx*i;
423         x := tx;
424         Drive(x, yy, dydx);
425         for j := 0 to m-1 do rk1[j] := dydx[j];
426         x := tx+0.5*dx;
427         for j := 0 to m-1 do
428             yy[j] := y_y[j] + 0.5*rk1[j]*dx;
429         Drive(x, yy, dydx);
430         for j := 0 to m-1 do
431             rk2[j] := dydx[j];
432         x := tx+0.5*dx;
433         for j := 0 to m-1 do
434             yy[j] := y_y[j] + 0.5*rk2[j]*dx;
435         Drive(x, yy, dydx);
436         for j := 0 to m-1 do
437             rk3[j] := dydx[j];
438         x := tx+dx;
439         for j := 0 to m-1 do
440             yy[j] := y_y[j] + rk3[j]*dx;
441         Drive(x, yy, dydx);
442         for j := 0 to m-1 do
443             rk4[j] := dydx[j];
444         for j := 0 to m-1 do
445             yy[j] := y_y[j] + (1/6)*(rk1[j]+2*rk2[j]+2*rk3[j]+rk4[j])*dx;
446         x[i] := yy[0];
447         y[i] := yy[1];
448         z[i] := yy[2];
449     end;
450 end;
451 EndProgram;
452 Data;
453 //0    10    15    20
454 1    11.80    15.37    20.77
455 2    14.04    17.04    22.23
456 3    15.44    16.85    21.16
457 4    17.80    18.07    22.49
458 5    18.60    19.43    24.46
459 6    19.22    20.12    23.58
460 7    21.77    21.83    24.51
461 8    22.17    22.11    25.38
462 9    23.41    23.37    25.53
463 10    23.17    24.92    26.69
464 11    24.56    25.55    29.21
465 12    25.85    26.06    28.00
466 13    24.64    28.94    30.32
467 14    25.15    28.94    30.41
468 15    26.92    30.06    31.87
469 16    26.37    29.29    31.87
470 17    26.71    31.48    34.60
471 18    26.61    31.86    33.57
472 19    27.13    33.84    36.75
473 20    29.32    32.95    36.36
474 21    28.24    33.03    36.23
475 22    28.42    32.50    36.01
476 23    28.11    33.12    39.19
477 24    28.98    35.32    37.29
478 25    30.23    35.56    37.79
479 26    30.21    34.86    42.05
480 27    29.11    35.40    42.67
481 28    30.42    36.20    40.74
482 29    28.84    35.91    40.53
483 30    29.44    36.50    43.33
5.0版本例子

 


 

使用1.5的小例子:

比如我知道一个二次函数的一系列离散点,相求这个二次函数的系数:

 

Title "Type your title here";
//Parameters ;
//Variable ;
//Function ;
Variable x,y;
Parameters  a,b,c;
Function  y=a*x*x+b*x+c;
Data;
1    9.8
2    23.3
3    42.8
4    68.3
5    99.8
6    137.3
7    180.8
8    230.3
9    285.8
10    347.3
11    414.8
12    488.3
13    567.8
14    653.3
15    744.8
16    842.3
17    945.8
18    1055.3
19    1170.8
20    1292.3
21    1419.8
22    1553.3
23    1692.8
24    1838.3
25    1989.8
26    2147.3
27    2310.8
28    2480.3
29    2655.8
30    2837.3
31    3024.8

 是不是挺完美的,哈哈

实战:

 1 Title "Type your title here";
 2 //Parameters ;
 3 //Variable ;
 4 //Function ;
 5 Parameters a,b,c;
 6 Variable x,y;
 7 Function y=-(a+b*c)*LN(c-x)-b*x+(a+b*c)*LN(c);
 8 Data;
 9 //x y
10 38.3612    38.09276591
11 71.3481    96.65369746
12 101.926    154.780949
13 133.801    156.4442223
14 164.935    334.699552
15 195.698    594.6346182
16 232.391    1529.185089
论文取点

 

 

蓝线是离散点,红线是计算点

 

转载于:https://www.cnblogs.com/zhubinglong/p/7895420.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
世界领先的非线性曲线拟合,综合优化软件包 简体中文版 1stOpt(First Optimization)是七维高科有限公司(7D-Soft High Technology Inc.)独立开发,拥有完全自主知识产权的一套数学优化分析综合工具软件包。在非线性回归,曲线拟合,非线性复杂工程模型参数估算求解等领域傲视群雄,首屈一指,居世界领先地位。除去简单易用的界面,其计算核心是基于七维高科有限公司科研人员十数年的革命性研究成果【通用全局优化算法】 (Universal Global Optimization - UGO),该算法之最大特点是克服了当今世界上在优化计算领域中使用迭代法必须给出合适初始值的难题,即用户勿需给出参数初始值,而由1stOpt随机给出,通过其独特的全局优化算法,最终找出最优解。以非线性回归为例,目前世界上在该领域最有名的软件工具包诸如OriginPro,Matlab,SAS,SPSS,DataFit,GraphPad,TableCurve2D,TableCurve3D等,均需用户提供适当的参数初始值以便计算能够收敛并找到最优解。如果设定的参数初始值不当则计算难以收敛,其结果是无法求得正确结果。而在实际应用当中,对大多数用户来说,给出(猜出)恰当的初始值是件相当困难的事,特别是在参数量较多的情况下,更无异于是场噩梦。而1stOpt凭借其超强的寻优,容错能力,在大多数情况下(大于90%),从任一随机初始值开始,都能求得正确结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值