当前位置: 首页 > 计算模拟 >求助!三个未知数 四个方程用1stopt(Anto2Fit)约束优化

求助!三个未知数 四个方程用1stopt(Anto2Fit)约束优化

作者 fugitivesk
来源: 小木虫 500 10 举报帖子
+关注

计算小白,新来的没啥金币
用的Anto2Fit 5.5试用版(明明三个parameters为啥说超出四个了)
方程都比较长
不知道为什么三个未知数会出现四个结果
第四个结果好像是我给的常数变量或者变参量(偷梁换柱?)
贴上mathematica里写的表达式(这个软件里运行过三个方程三个变量的求解,方程本身没问题)


Constant  cc = 3*10^8;
                 la = cc/10^9;
                 k0 = 2*pi/la;
                 r1 =0.17532;
                 r2 =0.21216;
                 t1 =0.77139;
                 t2 =-0.3507;
                 
Parameter k1[30,60],k2[-2,0],dz[0.5,0.7];
         
Function a=sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz));
b=cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz));
c=cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz));
d=sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz));
kk=2*(k1^2+k2^2);
(r1*c)-(r2*d)+r1*(b*k1-a*k2)/(2*k0)+r1*(a*k0*k2+b*k0*k1)/kk-r2*(a*k1+b*k2)/(2*k0)-r2*(a*k0*k1-b*k0*k2)/kk-(b*k1-a*k2)/(2*k0)+(a*k0*k2+b*k0*k1)/kk;
(r2*c)+(r1*d)+r1*(a*k1+b*k2)/(2*k0)+r1*(a*k0*k1-b*k0*k2)/kk+r2*(b*k1-a*k2)/(2*k0)+r2*(a*k0*k2+b*k0*k1)/kk-(a*k1+b*k2)/(2*k0)-(b*k0*k2-a*k0*k1)/kk;
(t1*c)-(t2*d)+t1*(b*k1-a*k2)/(2*k0)+t1*(a*k0*k2+b*k0*k1)/kk-t2*(a*k1+b*k2)/(2*k0)-t2*(a*k0*k1-b*k0*k2)/kk+2;
(t2*c)+(t1*d)+t1*(a*k1+b*k2)/(2*k0)+t1*(a*k0*k1-b*k0*k2)/kk+t2*(b*k1-a*k2)/(2*k0)+t2*(a*k0*k2+b*k0*k1)/kk;

//方程我用了两种写法第二种太长了

Function
(r1*cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)))-(r2*sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz)))+r1*(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k1-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k2)/(2*k0)+r1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k2+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k1)/2*(k1^2+k2^2)-r2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k1+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k2)/(2*k0)-r2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k1-cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k2)/2*(k1^2+k2^2)-(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k1-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k2)/(2*k0)+(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k2+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k1)/2*(k1^2+k2^2);

(r2*cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)))+(r1*sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz)))+r1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k1+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k2)/(2*k0)+r1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k1-cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k2)/2*(k1^2+k2^2)+r2*(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k1-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k2)/(2*k0)+r2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k2+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k1)/2*(k1^2+k2^2)-(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k1+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k2)/(2*k0)-(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k2-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k1)/2*(k1^2+k2^2);

(t1*cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)))-(t2*sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz)))+t1*(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k1-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k2)/(2*k0)+t1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k2+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k1)/2*(k1^2+k2^2)-t2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k1+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k2)/(2*k0)-t2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k1-cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k2)/2*(k1^2+k2^2)+2;

(t2*cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)))+(t1*sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz)))+t1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k1+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k2)/(2*k0)+t1*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k1-cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k2)/2*(k1^2+k2^2)+t2*(cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k1-sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k2)/(2*k0)+t2*(sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz))*k0*k2+cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz))*k0*k1)/2*(k1^2+k2^2);

求助!三个未知数 四个方程用1stopt(Anto2Fit)约束优化
22.JPG@月只蓝 返回小木虫查看更多

今日热帖
  • 精华评论
  • shikang999

    按你第一种写法, 如果最后四个方程是等于0的约束的话,求得一个如下的解(其中四个方程的误差平方和为2.07045657911154E-05)(注意,下面不是1stopt的结果,所以不保证和1stopt的结果一致)
    k1 = 48.5939462992421,  k2 = -0.161774554371271,  dz = 0.588775267394145

  • fugitivesk

    引用回帖:
    2楼: Originally posted by shikang999 at 2020-06-28 15:36:14
    按你第一种写法, 如果最后四个方程是等于0的约束的话,求得一个如下的解(其中四个方程的误差平方和为2.07045657911154E-05)(注意,下面不是1stopt的结果,所以不保证和1stopt的结果一致)
    k1 = 48.5939462992421 ...

    请问求解思路是什么,用matlab还是mathemetica求解的吗?

  • shikang999

    引用回帖:
    3楼: Originally posted by fugitivesk at 2020-06-28 19:11:15
    请问求解思路是什么,用matlab还是mathemetica求解的吗?...

    1. 主要使用自己写的MathSword软件进行求解。(PS:附件可以下载MathSword,在打开程序界面最上端选择【高级优化】,在优化模块右键选择上传的附件 solve.vb文件,然后点击求解,就能看到你问题的答案了。)

    2. 至于你说的方程用什么约束比较合适,不太明白你的意思。因为一个方程本身就是一个约束,有约束就可以构建误差,一般的优化器内部会根据你构建的1个或多个误差进行优化。

  • 独孤神宇

    代码写的有问题。

    k1: 48.5939435307918
    k2: -0.161774549680272
    dz: 0.588775301298235

    ------------------------------------------------

    Constant  cc = 3*10^8,
    r1 =0.17532,
    r2 =0.21216,
    t1 =0.77139,
    t2 =-0.3507,
    la = cc/10^9,
    k0 = 2*pi/la;
    Parameter k1=[30,60],k2=[-2,0],dz=[0.5,0.7];
    ConstStr  kk=2*(k1^2+k2^2),
    a=sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz)),
    b=cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz)),
    c=cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)),
    d=sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz));
    Function
    (r1*c)-(r2*d)+r1*(b*k1-a*k2)/(2*k0)+r1*(a*k0*k2+b*k0*k1)/kk-r2*(a*k1+b*k2)/(2*k0)-r2*(a*k0*k1-b*k0*k2)/kk-(b*k1-a*k2)/(2*k0)+(a*k0*k2+b*k0*k1)/kk=0;
    (r2*c)+(r1*d)+r1*(a*k1+b*k2)/(2*k0)+r1*(a*k0*k1-b*k0*k2)/kk+r2*(b*k1-a*k2)/(2*k0)+r2*(a*k0*k2+b*k0*k1)/kk-(a*k1+b*k2)/(2*k0)-(b*k0*k2-a*k0*k1)/kk=0;
    (t1*c)-(t2*d)+t1*(b*k1-a*k2)/(2*k0)+t1*(a*k0*k2+b*k0*k1)/kk-t2*(a*k1+b*k2)/(2*k0)-t2*(a*k0*k1-b*k0*k2)/kk+2=0;
    (t2*c)+(t1*d)+t1*(a*k1+b*k2)/(2*k0)+t1*(a*k0*k1-b*k0*k2)/kk+t2*(b*k1-a*k2)/(2*k0)+t2*(a*k0*k2+b*k0*k1)/kk=0;

  • fugitivesk

    感谢大神

  • dingd

    1stOpt正确代码如下,4个方程3个未知数,只能有近似解。

    CODE:
    Constant  cc = 3*10^8,
             la = cc/10^9,
             k0 = 2*pi/la,
             r1 =0.17532,
             r2 =0.21216,
             t1 =0.77139,
             t2 =-0.3507;

    Parameter k1=[30,60],k2=[-2,0],dz=[0.5,0.7];

    ConstStr  a=sin(k1*dz)*(exp(-k2*dz)+exp(k2*dz)),
            b=cos(k1*dz)*(exp(-k2*dz)-exp(k2*dz)),
            c=cos(k1*dz)*(exp(-k2*dz)+exp(k2*dz)),
            d=sin(k1*dz)*(exp(-k2*dz)-exp(k2*dz)),
            kk=2*(k1^2+k2^2);
    Function
    (r1*c)-(r2*d)+r1*(b*k1-a*k2)/(2*k0)+r1*(a*k0*k2+b*k0*k1)/kk-r2*(a*k1+b*k2)/(2*k0)-r2*(a*k0*k1-b*k0*k2)/kk-(b*k1-a*k2)/(2*k0)+(a*k0*k2+b*k0*k1)/kk;
    (r2*c)+(r1*d)+r1*(a*k1+b*k2)/(2*k0)+r1*(a*k0*k1-b*k0*k2)/kk+r2*(b*k1-a*k2)/(2*k0)+r2*(a*k0*k2+b*k0*k1)/kk-(a*k1+b*k2)/(2*k0)-(b*k0*k2-a*k0*k1)/kk;
    (t1*c)-(t2*d)+t1*(b*k1-a*k2)/(2*k0)+t1*(a*k0*k2+b*k0*k1)/kk-t2*(a*k1+b*k2)/(2*k0)-t2*(a*k0*k1-b*k0*k2)/kk+2;
    (t2*c)+(t1*d)+t1*(a*k1+b*k2)/(2*k0)+t1*(a*k0*k1-b*k0*k2)/kk+t2*(b*k1-a*k2)/(2*k0)+t2*(a*k0*k2+b*k0*k1)/kk;

    结果:
    CODE:
    k1: 48.5939431819858
    k2: -0.161774549476569
    dz: 0.588775305571065


猜你喜欢