//这里是代码窗口,请在下面写Forcal代码
I:outvector(p:k,I )=k=FCDLen(p ) p ),printff(r(n ),i=0,) I
! using['XSLSF']; //使用命名空间XSLSF
//函数定义用于计算微分方程组各方程的右端函数值,连分式法对微分方程组进行一步积分的函数pbs1调用该函数f。
//t是自变量,x是函数值,dx是右端的函数值,也就是微分方程式的值。
//调用此函数时使用参数a,k,这两个参数正好是拟合参数,并通过模块变量传递。
f(t,x,dx:A,k )={
dx=A*x/(k x )
(;
//计算相邻两组实验数据的理论值和实验值的误差。 将第1组数据作为理论值的起点,计算终点处的理论值,并与第2组数据表示的实验值进行比较。
//hf是函数f的句柄,预先得到该句柄; a是功的数值;step是积分步数; eps为积分精度; t1、t2是积分的起点和终点
//x1是与t1对应实验数据,即积分开始点的函数值; x_1是对应于t2的实验数据,与积分终点的函数值进行比较。
//h,I是自动变量。
t_I_j(HF,a,step,eps,t1,t2,x1,x_1:h,I )=
{
a .为a.setra(0,x1 )、//工作组分配初始值
计算h=(T2-T1 )/step,//积分步长
{ pbs1[hf、t1、a、h、eps]、//pbs1是用连分式法对微分方程组进行一阶段积分函数
t1=t1 h //积分起点的重新计算
}.Until[ABS(T1-T2 ) ]
a .用a.getra(0,x1 )//引用方式得到积分终点处的函数值
(x1-x_1)2//计算并返回理论值与实验值之差的平方和
(;
//目标函数的定义,自变量_A,_k是优化的参数,需要传递给对应的模块变量a,k。
//模块变量hf是函数f的句柄,并预先获得该句柄; Array是工作的数值; 步骤为积分步数; eps是积分精度。
k(a,_k:hf,Array,step,eps,a,k )={
A=_A,k=_k,/将优化参数_A,_k传递给对应的模块变量a,k
t_I_j(HF,Array,step,EPS :1,2:8.09946986336012.04826079 ) ) ) ) ) ) ) ) ) )
) ) ) )
) ) ) )
t_I_j(HF,Array,step,EPS :4,5:17.62752046336010.35408296 )
t_I_j(HF,Array,step,EPS :5,6:10.354082963360.246065848 ) ) )。
t_I_j(HF,Array,step,EPS :6,7:6.2460658483360.577315848 ) ) )
t_I_j(HF,Array,step,EPS :7,8:5.5773158483360.379678199 ) ) )
t_I_j(HF,Array,step,EPS :8,20:8.3796781993360.32249814 )
(;
main(3360d,u,v,x,_eps,k,xx,g,i:hf,Array,step,eps )=
{
hf=HFor(f )、//模块变量HF保存函数f的句柄,并预先通过函数hfor获取该句柄
array=new[rtoi(real_s ),rtoi ) 15,//工作组的申请
步骤=20、eps=1e-6、//积分步长数step越大,积分精度eps越小,精度越好,用于对微分方程组积分一次函数pbs1
x=new[rtoi(3(real_s ),rtoi )3],//工作组的申请
xx=new[rtoi(real_s )、rtoi(3)、rtoi(3) ],//工作组的申请
g=new[rtoi(3(real_s ),rtoi )3],//工作组的申请
_eps=1e-50,d=1,u=1.6,v=0.4,k=500,//变换d,u,v进一步求解。 k是允许的最大反复次数:得到的各解的差很大
I=jsim [求hfor (' k ',d,u,v,x,_eps,k,xx,g ),//n维极值的单形调谐法
printff{'rn实际迭代次数={1,r}rn ',i},/输出实际迭代次数
OutVector[x],//输出最佳参数值和目标函数的最终值
申请delete[x]、delete[xx]、delete[g]、delete[Array] //销毁的对象
(;