24小时热门版块排行榜    

查看: 685  |  回复: 4

ahbiao

木虫 (小有名气)


[交流] forcal 代码运行后出错

运行了别人的Forcal代码,出现了“Forcal表达式运行错误!
实数表达式名称:main 所在模块:-1
实数函数名:fcopt::SimOpt 错误代码:3”为什么?能不能帮忙调试下,指出问题所在!!谢谢~~
代码:!using["sys","IMSL","fcopt"];
f(t,HCp,dHCp : R : k1,a,E1, Acid,T)=
{ R=8.3144,
  dHCp=-k1*Acid^a*exp[-E1/(R*T)]*HCp
};
优化(_k1, _a, _E1 : i, j, s, t1, t2, HCp, IDO : k1,a,E1, Acid,T, hf, tArray, max, TempArray,AcidArray,maxHCp)=
{
  k1=_k1, a=_a, E1=_E1,
  s=0,
  j=0, (j   Acid=AcidArray.A(j), T=TempArray.A(j),
  IDO=1, t1=tArray.A(0,0), HCp=tArray.A(0,j+1),
  i=1, (i   t2=tArray.A(i,0),
  IVPRK(&IDO, hf, &t1, t2, 1e-6, 0, &HCp),
  s=s+[HCp-tArray.A(i,j+1)]^2,
  i++
  },
  IVPRK(3, hf, &t1, t2+0.1, 1e-6, 0, &HCp),
  j++
  },
  s
};
main(:i, k1, a, E1, min : hf, tArray, max, TempArray,AcidArray,maxHCp)=
{
  ClearImslErr(), //清空IMSL的错误输出
  ERSET(0, 0, 0), //关闭IMSL错误输出
  hf=HFor("f",
  max=10, maxHCp=8,//实验数据组数
  tArray=new{rtoi(real_s),rtoi(max),rtoi(maxHCp+1)}.free().io::arrayns{ //存放实验数据
  "
0 14.277 12.892 13.880 12.859 13.526 15.058 14.705 14.042  
5 14.057 12.721 12.986 12.576 13.138 11.872 14.530 12.709  
10 13.418 11.721 11.350 11.616 12.309 9.015 13.831 12.133  
20 11.691 9.383 10.122 9.069 10.231 7.119 12.748 9.872  
30 9.220 7.622 7.795 7.321 7.870 5.223 10.619 5.949  
40 7.875 6.287 6.781 5.880 6.358 4.451 8.678 4.741  
60 6.554 4.687 6.101 4.076 5.310 3.162 8.043 3.527  
80 5.776 4.946 4.416 3.784 2.915 2.284 5.270 3.196  
100 4.646 3.586 3.434 2.716 2.502 2.070 4.072 2.489  
120 2.998 3.101 1.985 2.458 2.370 1.933 3.866 2.989
  "
  },
  TempArray=new{rtoi(real_s),rtoi(maxHCp)}.free().io::arrayns{"413.15 413.15 423.15 423.15 433.15 433.15 443.15 443.15"},
  AcidArray=new{rtoi(real_s),rtoi(maxHCp)}.free().io::arrayns{"0.7 0.9 0.5 0.7 0.3 0.5 0.1 0.3"},
  min=1.1, k1=0.3, a=1.2, E1=1e5, //提供一组合适的初值
  i=SimOpt[HFor("优化", optstep,0, optexpand,1.5, optcontract,0.5, optmax,5000 : &k1, &a, &E1, &min], //求n维极值的单形调优法
  printff{"\r\n实际迭代次数={1,i}, k1={2,r}, a={3,r}, E1={4,r}, 目标函数终值={5,r}\r\n",i, k1, a, E1, min},
  ERSET(0, 2, 2), ERSET(0, 1, 0) //打开IMSL错误输出
};

[ Last edited by ahbiao on 2011-3-27 at 21:41 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

forcal

禁虫 (初入文坛)

ahbiao(金币+10): 谢谢~~ 2011-03-30 08:10:16
本帖内容被屏蔽

2楼2011-03-29 10:10:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ahbiao

木虫 (小有名气)


引用回帖:
Originally posted by forcal at 2011-03-29 10:10:20:
由于fcopt库更新,以上代码已比较老,故出现错误。
新的代码为:
[code]!using["math","IMSL","fcopt"];
f(t,HCp,dHCp : R : k1,a,E1, Acid,T)=
{ R=8.3144,
  dHCp=-k1*Acid ...

使用Opt函数,如何用啊,麻烦您具体说下!
3楼2011-03-30 08:12:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

forcal

禁虫 (初入文坛)

ahbiao(金币+40): 2011-03-31 08:34:11
本帖内容被屏蔽

4楼2011-03-30 15:03:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ahbiao

木虫 (小有名气)


恩,谢谢!
5楼2011-03-31 08:34:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ahbiao 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见