24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 2222  |  回复: 10

fugitivesk

铁虫 (初入文坛)

[求助] 求助!三个未知数 四个方程用1stopt(Anto2Fit)约束优化已有2人参与

计算小白,新来的没啥金币
用的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@月只蓝
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shikang999

新虫 (小有名气)

【答案】应助回帖


fugitivesk: 金币+1, 有帮助 2020-06-28 19:26:45
按你第一种写法, 如果最后四个方程是等于0的约束的话,求得一个如下的解(其中四个方程的误差平方和为2.07045657911154E-05)(注意,下面不是1stopt的结果,所以不保证和1stopt的结果一致)
k1 = 48.5939462992421,  k2 = -0.161774554371271,  dz = 0.588775267394145
我还是那个我,过去如此,未来亦如此!
2楼2020-06-28 15:36:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fugitivesk

铁虫 (初入文坛)

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

请问求解思路是什么,用matlab还是mathemetica求解的吗?
3楼2020-06-28 19:11:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fugitivesk

铁虫 (初入文坛)

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

我原先就只是四选三作为方程组求解,感觉不能保证误差。四个方程的约束用什么方法比较合适呢?

发自小木虫Android客户端
4楼2020-06-28 19:24:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shikang999

新虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
独孤神宇: 金币+5, 鼓励交流 2020-06-28 20:41:18
fugitivesk: 金币+7, ★★★很有帮助 2020-06-28 21:14:32
引用回帖:
3楼: Originally posted by fugitivesk at 2020-06-28 19:11:15
请问求解思路是什么,用matlab还是mathemetica求解的吗?...

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

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

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : MathSword.2020.06.27.rar
  • 2020-06-28 20:08:56, 2.97 M
  • 附件 2 : solve.vb
  • 2020-06-28 20:09:09, 6.46 K
我还是那个我,过去如此,未来亦如此!
5楼2020-06-28 20:26:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
fugitivesk: 金币+12, ★★★★★最佳答案 2020-06-28 21:13:55
代码写的有问题。

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;
数值计算
6楼2020-06-28 20:40:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fugitivesk

铁虫 (初入文坛)

7楼2020-06-28 21:15:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

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

8楼2020-06-28 22:22:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fugitivesk

铁虫 (初入文坛)

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

2. ...

感谢,回头参考参考

发自小木虫Android客户端
9楼2020-06-28 23:01:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fugitivesk

铁虫 (初入文坛)

引用回帖:
8楼: Originally posted by dingd at 2020-06-28 22:22:03
1stOpt正确代码如下,4个方程3个未知数,只能有近似解。

Constant  cc = 3*10^8,
         la = cc/10^9,
         k0 = 2*pi/la,
         r1 =0.17532,
         r2 =0.21216,
         t1 =0.77139,
   ...

感谢

发自小木虫Android客户端
10楼2020-06-28 23:01:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fugitivesk 的主题更新
信息提示
请填处理意见