- 积分
- 7
- 注册时间
- 2002-9-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2009-10-9 14:45:11
|
显示全部楼层
来自 山东淄博
用Forcal求解为:
-
- //这里是代码窗口,请将Forcal代码写在下面
- i: OutVector(p:k,i)= k=FCDLen(p),printff{"\r\n"},i=0,(i<k).while{printff{"{1,r,14.6}",get[p,i]},i++},printff{"\r\n"}; //输出一维数组
- g(x,dt,A,k)=A*x/(k+x)*dt+x; //函数定义
- k(A,k:s,d)={ //目标函数定义
- s=0,
- d=g(8.099469866,1,A,k), s=s+[d-12.04826079]^2,
- d=g(d,1,A,k), s=s+[d-17.46831287]^2,
- d=g(d,1,A,k), s=s+[d-17.62752046]^2,
- d=g(d,1,A,k), s=s+[d-10.35408296]^2,
- d=g(d,1,A,k), s=s+[d-6.246065848]^2,
- d=g(d,1,A,k), s=s+[d-5.577315848]^2,
- d=g(d,1,A,k), s+[d-8.379678199]^2
- };
- main(:d,u,v,x,eps,k,xx,g,i)=
- {
- x=new[rtoi(real_s),rtoi(3)], //申请工作数组
- xx=new[rtoi(real_s),rtoi(2),rtoi(3)], //申请工作数组
- g=new[rtoi(real_s),rtoi(3)], //申请工作数组
- eps=1e-100, d=1,u=1.8,v=0.4,k=200, //变换d、u、v进一步求解,k为允许的最大迭代次数
- i=XSLSF::jsim[HFor("k"),d,u,v,x,eps,k,xx,g], //求n维极值的单形调优法
- printff{"\r\n实际迭代次数={1,r}\r\n",i}, //输出实际迭代次数
- OutVector[x], //输出最优参数值及目标函数终值
- delete[x],delete[xx],delete[g] //销毁申请的对象
- };
- 验证(A,k:d)={ //验证函数
- printff{"\r\n1:8.099469866\r\n"},
- printff{"2:{1,r}\r\n",d=g(8.099469866,1,A,k)},
- printff{"3:{1,r}\r\n",d=g(d,1,A,k)},
- printff{"4:{1,r}\r\n",d=g(d,1,A,k)},
- printff{"5:{1,r}\r\n",d=g(d,1,A,k)},
- printff{"6:{1,r}\r\n",d=g(d,1,A,k)},
- printff{"7:{1,r}\r\n",d=g(d,1,A,k)},
- printff{"8:{1,r}\r\n",d=g(d,1,A,k)}
- };
- 验证(-0.780295 , -8.84985);
复制代码
结果:
-
- 实际迭代次数=79.
- -0.780295 -8.84985 50.8546
- 1:8.099469866
- 2:16.521835481412822
- 3:14.841448357609906
- 4:12.908623883236952
- 5:10.426954550887418
- 6:5.2680698740873844
- 7:6.4157250728703215
- 8:8.4723813027699961
复制代码
即A=-0.780295 k=-8.84985 目标函数终值=50.8546
所求结果不如1stOpt精确,但对于微分方程dx/dt=p1*x/(p2+x),按此法求解似乎也不妥? |
|