24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1765  |  回复: 16

wdxiao

银虫 (正式写手)

[求助] 最优化计算求助!(1stopt或者Matlab)

本人有一个最优化计算的问题。用1stopt1.5注册版编写的代码。但是运行的时候总是没有任何显示。故意将代码改错,编译的时候的确能报告出错。

另外,貌似1stopt的pascal编程与标准pascal语言有很多不同,比如:
不能自定义结构类型数据,不能自定义函数,自定义过程貌似也有问题。等等。

请大侠帮忙看看。另外,不知道MatLab能否处理这一问题?

先大致说说这个问题的物理本质和程序的思路。

本质就是计算三个分子间的范德华力相互作用能。
每个分子有24个原子。每个原子有x,y坐标和范德华力相关参数两个。
所有信息存放在三维数组里面。数组的第一指标表示不同分子;第二指标表示分子内各个原子;第三指标表示每个原子有x,y坐标和范德华力相关参数两个。

M0为分子标准的位置(0,0)和角度。
M1,M2,M3具有相同的分子角度,即将M0的标准角度绕(0,0)点旋转phi角度,
M1,M2,M3分别为放置在(0,0), (b,0),和(a*cos(theta),a*sin(theta))位置。
然后分别计算不同分子各个原子对间的范德华力作用能。

程序是用Pascal语言编写,如下:

Title "Type your title here"
Parameters a[1,4], b[1,4],theta[0,pi/2],phi[-pi/8,pi/8];
Minimum;
StartProgram;
const xx: array[1..24] of double
        =(0.703,1.698,1.698,0.703,-0.703,-1.698,-1.698,-0.703,1.246,3.008,3.008,1.246,-1.246,
        -3.008,-3.008,-1.246,0,-2.926,-4.138,-2.926,0,2.926,4.138,2.926);
      yy: array[1..24] of double
        =(1.698,0.703,-0.703,-1.698,-1.698,-0.703,0.703,1.698,3.008,1.246,-1.246,-3.008,-3.008,
        -1.246,1.246,3.008,4.138,2.926,0,-2.926,-4.138,-2.926,0,2.926);
var i,j: Integer;
    Etot,r,angle,out1,out2,out3: double;
    Ax,Ay,Ar,Ae,Bx,By,Br,Be,dist,rou: double;
    M: array[0..3,1..24,1..4] of double;
Begin
for i:=1 to 24 do
    begin
        M[0,i,1]:=xx;
        M[0,i,2]:=yy;
    end;
for i:=1 to 8 do
    begin
         M[0,i,3]:= 1.9;
         M[0,i,4]:= 0.044;
         M[0,i+8,3]:= 1.9;
         M[0,i+8,4]:= 0.044;
         M[0,i+16,3]:= 2.11;
         M[0,i+16,4]:= 0.202;
    end;
M[1]:=M[0];
for i:=1 to 24 do
  begin
         r:=sqrt(M[1,i,1]*M[1,i,1]+M[1,i,2]*M[1,i,2]);
         if M[1,i,1]>=0 then
              angle:=arcsin(M[1,i,2]/r)
            else
              angle:= (M[1,i,2]/abs(M[1,i,2]))*(pi-abs(arcsin(M[1,i,2]/r)));
          angle:=angle+phi;
          M[1,i,1]:=r*cos(angle);
          M[1,i,2]:=r*sin(angle);
  end;
M[2]:=M[1];
M[3]:=M[1];
for i:=1 to 24 do
  begin
    M[2,i,1]:=M[1,i,1]+b;
    M[3,i,1]:=M[1,i,1]+a*cos(theta);
    M[3,i,2]:=M[1,i,2]+a*sin(theta);
  end;
Etot:=0;
for i:=1 to 24 do
    for j:=1 to 24 do
       begin
            Ax:=M[1,i,1];
            Ay:=M[1,i,2];
            Ar:=M[1,i,3];
            Ae:=M[1,i,4];
            Bx:=M[2,j,1];
            By:=M[2,j,2];
            Br:=M[2,j,3];
            Be:=M[2,j,4];
            dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
            rou:=dist/(Ar+Br);
            if dist>3.311 then
                out1:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
            else
                out1:= 336.176*sqrt(Ae*Be)/(rou*rou);
            Bx:=M[3,j,1];
            By:=M[3,j,2];
            Br:=M[3,j,3];
            Be:=M[3,j,4];
            dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
            rou:=dist/(Ar+Br);
            if dist>3.311 then
                out2:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
            else
                out2:= 336.176*sqrt(Ae*Be)/(rou*rou);
            Ax:=M[2,i,1];
            Ay:=M[2,i,2];
            Ar:=M[2,i,3];
            Ae:=M[2,i,4];
            dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
            rou:=dist/(Ar+Br);
            if dist>3.311 then
                out3:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
            else
                out3:= 336.176*sqrt(Ae*Be)/(rou*rou);
         Etot:=out1+out2+out3+Etot;
        end;
FunctionResult:= Etot;
End;
EndProgram;

[ Last edited by wdxiao on 2012-3-26 at 14:06 ]
回复此楼

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

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

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

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
不知道你的M值是在哪赋值的?
2楼2012-03-26 14:28:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

引用回帖:
2楼: Originally posted by dingd at 2012-03-26 14:28:57:
不知道你的M值是在哪赋值的?

xx,yy数组分别赋值给M[0,1..24,1]和M[0,1..24,2],表示标准位置的分子内各个原子的x,y坐标。对应的表示范德华力的参数M[0,1..24,3]和M[0,1..24,4]由第一个for...do循环赋值。(分子的1~16号原子是同一种原子,17~24号原子是另一种原子)。

M0赋值给M1。然后M1旋转phi角度后,赋值给M2和M3。然后M2和M3的各个原子坐标经过平移变换。
3楼2012-03-26 14:47:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

引用回帖:
2楼: Originally posted by dingd at 2012-03-26 14:28:57:
不知道你的M值是在哪赋值的?

xx,yy数组分别赋值给M[0,1..24,1]和M[0,1..24,2],表示标准位置的分子内各个原子的x,y坐标(第一个for....do循环)。对应的表示范德华力的参数M[0,1..24,3]和M[0,1..24,4]由第二个for...do循环赋值。(分子的1~16号原子是同一种原子,17~24号原子是另一种原子)。

M0赋值给M1。然后M1旋转phi角度后,赋值给M2和M3。然后M2和M3的各个原子坐标经过平移变换。
4楼2012-03-26 14:50:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

引用回帖:
2楼: Originally posted by dingd at 2012-03-26 14:28:57:
不知道你的M值是在哪赋值的?

xx,yy数组分别赋值给M[0,1..24,1]和M[0,1..24,2],表示标准位置的分子内各个原子的x,y坐标(第一个for....do循环)。对应的表示范德华力的参数M[0,1..24,3]和M[0,1..24,4]由第二个for...do循环赋值。(分子的1~16号原子是同一种原子,17~24号原子是另一种原子)。

M0赋值给M1。然后M1旋转phi角度后(第三个for...do循环),赋值给M2和M3。然后M2和M3的各个原子坐标经过平移变换(第四个for.....do 循环)。

另外,很奇怪的是,我的源程序上第一个for.....do 循环为:

for i:=1 to 24 do
    begin
        M[0,i,1]:=xx;
        M[0,i,2]:=yy;
    end;

发帖的时候自动去掉了,不知道为啥。
5楼2012-03-26 14:56:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

引用回帖:
5楼: Originally posted by wdxiao at 2012-03-26 14:56:46:
xx,yy数组分别赋值给M和M,表示标准位置的分子内各个原子的x,y坐标(第一个for....do循环)。对应的表示范德华力的参数M和M由第二个for...do循环赋值。(分子的1~16号原子是同一种原子,17~24号原子是另一种原子 ...

for i:=1 to 24 do
    begin
        M[1,i,1]:=xx ;
        M[1,i,2]:=yy ;
    end;
6楼2012-03-26 15:10:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

奇怪,还是没法写成xx, yy
7楼2012-03-26 15:11:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

"xx, yy"
8楼2012-03-26 15:11:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

xx【i】
yy【i】
9楼2012-03-26 15:12:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wdxiao

银虫 (正式写手)

真奇怪,发帖的时候没法用英文的中括号写xx i 。
10楼2012-03-26 15:12:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wdxiao 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料工程281还有调剂机会吗 +14 xaw. 2026-04-11 14/700 2026-04-11 20:46 by 蓝云思雨
[考研] 293求调剂 +8 勇远库爱314 2026-04-06 8/400 2026-04-11 20:25 by 蓝云思雨
[考研] 270求调剂 +14 杨乐369 2026-04-11 14/700 2026-04-11 20:16 by 蓝云思雨
[考研] 本人女孩 +7 吼吼, 2026-04-10 9/450 2026-04-11 14:45 by ACS Nano——
[考研] 262求调剂 +12 天下第一文 2026-04-04 15/750 2026-04-11 14:09 by 释放天性
[考研] 化工调剂求导师收留!一志愿失利,踏实肯干,有植物提取科研经历 +17 yzyzx 2026-04-09 18/900 2026-04-11 10:48 by 环化材-小生
[考研] 求调剂 +13 雪逢冬 2026-04-10 13/650 2026-04-11 09:58 by 猪会飞
[考研] 本科211 工科085400 280分求调剂 可跨专业 +11 LZH(等待调剂中 2026-04-10 11/550 2026-04-11 08:39 by zhq0425
[考研] 266求调剂 +29 阳阳哇塞 2026-04-07 29/1450 2026-04-10 16:20 by 高维春
[考研] 一志愿中国科学院上海有机所,有机化学356分找调剂 +11 Nadiums 2026-04-09 11/550 2026-04-09 18:04 by lijunpoly
[考研] 283电子信息求调剂 +4 三石WL 2026-04-08 4/200 2026-04-09 10:21 by wp06
[考研] 专硕0854初试考材科基,求调剂 +7 3220548044 2026-04-06 10/500 2026-04-08 21:59 by hypershenger
[考研] 生物学学硕,初试351分,求调剂 +4 …~、王…~ 2026-04-08 5/250 2026-04-08 21:49 by limeifeng
[考研] 318求调剂 +13 ykyhsa 2026-04-05 15/750 2026-04-08 21:37 by wj165256
[考研] 323求调剂 +3 林zlu 2026-04-07 4/200 2026-04-07 23:21 by lbsjt
[考研] 专硕085403,291分,有两篇专利,一国一奖 +3 哈吉咪哈吉咪 2026-04-07 3/150 2026-04-07 18:21 by 蓝云思雨
[考研] 327考研调剂推荐 +6 呜呜呜呜呢 2026-04-06 6/300 2026-04-06 21:39 by 啵啵啵0119
[考研] 307求调剂 +3 所念及所望 2026-04-06 3/150 2026-04-06 17:30 by 土木硕士招生
[考研] 362求调剂一志愿中国石油大学 +4 我要考大 2026-04-06 6/300 2026-04-06 14:11 by 无际的草原
[考研] 332求调剂 +17 小小孟... 2026-04-05 18/900 2026-04-06 09:51 by 蓝云思雨
信息提示
请填处理意见