24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2957  |  回复: 11
【悬赏金币】回答本帖问题,作者ckm0811将赠送您 10 个金币

ckm0811

新虫 (初入文坛)

[求助] 1stopt 7参数拟合求助已有2人参与

需要根据两个式子(一个微分方程,一个代数方程)拟合7个未知参数fac(1)~fac(7),网上下载的软件有参数限制,想向有正版软件的朋友求助,帮忙拟合一下。写了两版,程序分别如下。完整程序和数据放在了文件里,不知为什么上传失败,只能贴一下网盘链接,麻烦大家了。
链接:https://pan.baidu.com/s/18yjg6HL9hhQ5hmjGdjFhEQ
提取码:8xmm

第一种:
//title "fit";
parameter fac(1:7);
variable t,lamb,pa,p,lambv;
odefunction lambv'=((1/3/fac(7))*(fac(1)*((lamb/lambv)^fac(2)-(lambv/lamb)^(0.5*fac(2)))+fac(3)*((lamb/lambv)^fac(4)-(lambv/lamb)^(0.5*fac(4)))+fac(5)*((lamb/lambv)^fac(6)-(lambv/lamb)^(0.5*fac(6)))));
p=(pa+fac(1)*((lamb/lambv)^fac(2)/lamb-(lambv/lamb)^(fac(2)*0.5)/lamb)+fac(3)*((lamb/lambv)^fac(4)/lamb-(lambv/lamb)^(fac(4)*0.5)/lamb)+fac(5)*((lamb/lambv).^fac(6)/lamb-(lambv/lamb)^(fac(6)*0.5)/lamb));


//根据上面两个式子拟合fac(1)~fac(7),共计7个参数。lambv为中间变量
data;
//t,lamb,pa,p

第二种:
//title "fit";
parameter fac(1:7);
variable t,lamb,pa,p;
conststr lambvdif=((1/3/fac(7))*(fac(1)*((lamb/lambv)^fac(2)-(lambv/lamb)^(0.5*fac(2)))+fac(3)*((lamb/lambv)^fac(4)-(lambv/lamb)^(0.5*fac(4)))+fac(5)*((lamb/lambv)^fac(6)-(lambv/lamb)^(0.5*fac(6)))));
function p=(pa+fac(1)*((lamb/lambv)^fac(2)/lamb-(lambv/lamb)^(fac(2)*0.5)/lamb)+fac(3)*((lamb/lambv)^fac(4)/lamb-(lambv/lamb)^(fac(4)*0.5)/lamb)+fac(5)*((lamb/lambv).^fac(6)/lamb-(lambv/lamb)^(fac(6)*0.5)/lamb));

//根据上面两个式子拟合fac(1)~fac(7),共计7个参数。lambv为中间变量
data;
//t,lamb,pa,p
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
微分变量作为中变变量好像无法实现。

可以考虑求解微分方程,得到  lambv 解析式带入 p 中进行非线性方程拟合。



还有一种就是对 p求导,组成微分方程组拟合  ?
数值计算
2楼2021-07-20 22:43:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ckm0811

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 独孤神宇 at 2021-07-20 22:43:35
微分变量作为中变变量好像无法实现。

可以考虑求解微分方程,得到  lambv 解析式带入 p 中进行非线性方程拟合。



还有一种就是对 p求导,组成微分方程组拟合  ?

您好,我用微分方程组的形式写了一下程序,可以麻烦您帮我跑一下看看吗
Parameter fac(1:7);

ConstStr lambdif=A*w*cos(w*t);
         lambvdif=((1/3/fac(7))*(fac(1)*((lamb/lambv)^fac(2)-(lambv/lamb)^(0.5*fac(2)))+fac(3)*((lamb/lambv)^fac(4)-(lambv/lamb)^(0.5*fac(4)))+fac(5)*((lamb/lambv)^fac(6)-(lambv/lamb)^(0.5*fac(6)))));

Variable t,lamb,pa,p;
Constant A=0.02,w=2*pi*0.1;

ODEFunction p'=pa+fac(1)*((fac(2)-1)*lamb^(fac(2)-2)*lambv^(-fac(2))*lambdif-fac(2)*lamb^(fac(2)-1)*lambv^(-fac(2)-1)*lambvdif+(0.5*fac(2)+1)*lamb^(-0.5*fac(2)-2)*lambv^(0.5*fac(2))*lambdif-0.5*fac(2)*lamb^(-0.5*fac(2)-1)*lambv^(0.5*fac(2)-1)*lambvdif)+fac(3)*((fac(4)-1)*lamb^(fac(4)-2)*lambv^(-fac(4))*lambdif-fac(4)*lamb^(fac(4)-1)*lambv^(-fac(4)-1)*lambvdif+(0.5*fac(4)+1)*lamb^(-0.5*fac(4)-2)*lambv^(0.5*fac(4))*lambdif-0.5*fac(4)*lamb^(-0.5*fac(4)-1)*lambv^(0.5*fac(4)-1)*lambvdif)+fac(5)*((fac(6)-1)*lamb^(fac(6)-2)*lambv^(-fac(6))*lambdif-fac(6)*lamb^(fac(6)-1)*lambv^(-fac(6)-1)*lambvdif+(0.5*fac(6)+1)*lamb^(-0.5*fac(6)-2)*lambv^(0.5*fac(6))*lambdif-0.5*fac(6)*lamb^(-0.5*fac(6)-1)*lambv^(0.5*fac(6)-1)*lambvdif);
//根据上面两个式子拟合fac(1)~fac(7),共计7个参数。lambv为中间变量

Data;
//t,lamb,pa,p
0                        0.959926667213440        -0.218715993911157        -0.0609662220570843
0.0100000000000000        0.960060000419617        -0.217953308698164        -0.0601988575052841
0.0200000000000000        0.960183332761129        -0.217248055533299        -0.0586004556313694
0.0300000000000000        0.960310000181198        -0.216523956896799        -0.0598319351599084
0.0400000000000000        0.960420000155767        -0.215895323573625        -0.0592181922334017
0.0500000000000000        0.960559999942780        -0.215095494743585        -0.0577557643513868
0.0600000000000000        0.960676667292913        -0.214429178596415        -0.0563035568552177
0.0700000000000000        0.960810000101725        -0.213667918567369        -0.0562269347026404
0.0800000000000000        0.960936667521795        -0.212944948052557        -0.0564259238264651
0.0900000000000000        0.961046667098999        -0.212317295943482        -0.0537828971720869
0.100000000000000        0.961189999580383        -0.211499705156834        -0.0547939745570696
0.110000000000000        0.961310000419617        -0.210815425359240        -0.0536558808743694
0.120000000000000        0.961439999739329        -0.210074361156256        -0.0552049394966249
0.130000000000000        0.961553332805634        -0.209428498212864        -0.0533279895347856
0.140000000000000        0.961696667273839        -0.208611922930574        -0.0547945686849519
0.150000000000000        0.961800000270208        -0.208023415546762        -0.0532876594536559
0.160000000000000        0.961940000057221        -0.207226321745154        -0.0509894265270881
0.170000000000000        0.962063333988190        -0.206524344385847        -0.0501778902776873
0.180000000000000        0.962169999678930        -0.205917410019245        -0.0502746930628899
0.190000000000000        0.962316667238871        -0.205083123883024        -0.0495968417849477
0.200000000000000        0.962433333396912        -0.204419710035615        -0.0472132050693843
0.210000000000000        0.962576666275660        -0.203604919455239        -0.0484606909901491
0.220000000000000        0.962676665782928        -0.203036632647645        -0.0495768924563658
0.230000000000000        0.962816666762034        -0.202241257206550        -0.0508967558960456
0.240000000000000        0.962926666736603        -0.201616516537996        -0.0476233841843231
0.250000000000000        0.963063333431880        -0.200840559228892        -0.0468362780039746
0.260000000000000        0.963176666895549        -0.200197280019895        -0.0486882526110127
0.270000000000000        0.963316667079926        -0.199402888747258        -0.0454051383025184
0.280000000000000        0.963433334032695        -0.198741104393035        -0.0452764009626071
0.290000000000000        0.963550000190735        -0.198079514508925        -0.0448494356201968
0.300000000000000        0.963679999907811        -0.197342536339294        -0.0449833927792348
0.310000000000000        0.963783333698909        -0.196756897310271        -0.0426126775765766
0.320000000000000        0.963916666507721        -0.196001460068449        -0.0441506994685100
0.330000000000000        0.964036666949590        -0.195321772871168        -0.0425706893672636
0.340000000000000        0.964173332850138        -0.194547935703942        -0.0438506779501000
0.350000000000000        0.964290000597636        -0.193887538472069        -0.0417353759771666
0.360000000000000        0.964416666428248        -0.193170761056756        -0.0438396124512487
0.370000000000000        0.964553333918254        -0.192397635767639        -0.0429577403349063
0.380000000000000        0.964653333822886        -0.191832102284730        -0.0409461894762005
0.390000000000000        0.964793333609899        -0.191040588507138        -0.0417681424238785
0.400000000000000        0.964893333117167        -0.190475389506915        -0.0403640892202786
0.410000000000000        0.965033333698908        -0.189684336018058        -0.0395319429176814
0.420000000000000        0.965153333346049        -0.189006510522505        -0.0396276800113452
0.430000000000000        0.965280000766118        -0.188291237369717        -0.0385797461602765
0.440000000000000        0.965410000085831        -0.187557379585116        -0.0385647679180981
0.450000000000000        0.965513333479563        -0.186974219511924        -0.0377487349326589
0.460000000000000        0.965636665821075        -0.186278388275524        -0.0369432895124589
0.470000000000000        0.965739999214808        -0.185695550701227        -0.0385068828949284
0.480000000000000        0.965873333215713        -0.184943715898085        -0.0363684893042258
0.490000000000000        0.965996665954590        -0.184248493064694        -0.0350844423645908
0.500000000000000        0.966119999885559        -0.183553472396837        -0.0350422560310213
0.510000000000000        0.966236666838328        -0.182896214094321        -0.0357082890947156
0.520000000000000        0.966343333721161        -0.182295455797467        -0.0344226096619861
0.530000000000000        0.966483333508174        -0.181507199906605        -0.0344232075748849
0.540000000000000        0.966569999456406        -0.181019369758473        -0.0337612557794114
0.550000000000000        0.966713333129883        -0.180212790651351        -0.0328476531863676
0.560000000000000        0.966833333174388        -0.179537732473905        -0.0325253978559010
0.570000000000000        0.966953334013621        -0.178862866531231        -0.0332915932673917
0.580000000000000        0.967066667079926        -0.178225679580843        -0.0316902061386422
0.590000000000000        0.967166666587194        -0.177663602741103        -0.0315181295683456
0.600000000000000        0.967303333679835        -0.176895645311491        -0.0325612034572683
0.610000000000000        0.967396666606267        -0.176371336695062        -0.0309402003803836
0.620000000000000        0.967536666393280        -0.175585093835344        -0.0312076525270728
0.630000000000000        0.967653333346049        -0.174930092472352        -0.0308357845343375
0.640000000000000        0.967749999761581        -0.174387519925182        -0.0291192343976965
0.650000000000000        0.967886667251587        -0.173620644511959        -0.0285421873746685
0.660000000000000        0.967986666758855        -0.173059682888543        -0.0285225129376410
0.670000000000000        0.968120000362396        -0.172311939786930        -0.0267974070448110
0.680000000000000        0.968226666450501        -0.171713923202809        -0.0274131745724031
0.690000000000000        0.968336667617162        -0.171097370069903        -0.0267161701869239
0.700000000000000        0.968463333050410        -0.170387617041473        -0.0258419432819456
0.710000000000000        0.968573333422343        -0.169771420474682        -0.0258780128939212
0.720000000000000        0.968689999580383        -0.169118062356982        -0.0272440635226749
0.730000000000000        0.968783333698909        -0.168595501500778        -0.0253793840193742
0.740000000000000        0.968916666905085        -0.167849196856469        -0.0264425615317059
0.750000000000000        0.969016666809718        -0.167289625665833        -0.0244389879012050
0.760000000000001        0.969113333225250        -0.166748835804261        -0.0231584760478411
0.770000000000001        0.969256667693456        -0.165947198113151        -0.0226372159513464
0.780000000000001        0.969343333641688        -0.165462628897229        -0.0234939984434984
0.790000000000001        0.969470000267029        -0.164754588351801        -0.0222578608226590
0.800000000000001        0.969576666355133        -0.164158513908713        -0.0236720328297027
0.810000000000001        0.969686666329702        -0.163543968928945        -0.0237222206510110
0.820000000000001        0.969803333282471        -0.162892354435203        -0.0224004650836929
0.830000000000001        0.969893333117167        -0.162389807235336        -0.0229423136115953
0.840000000000001        0.970006666978200        -0.161757120283625        -0.0222135542939929
0.850000000000001        0.970126667022705        -0.161087406763220        -0.0196712365532339
0.860000000000001        0.970219999949137        -0.160566654131466        -0.0208444427607440
0.870000000000001        0.970350000063578        -0.159841510390568        -0.0204578825040124
0.880000000000001        0.970456666549047        -0.159246690825963        -0.0204792691967014
0.890000000000001        0.970543332497279        -0.158763514967417        -0.0210974633596056
0.900000000000001        0.970680000384649        -0.158001774299614        -0.0199519210110641
0.910000000000001        0.970739998817444        -0.157667441957929        -0.0186650262520735
0.920000000000001        0.970853333473206        -0.157036032333120        -0.0203374868130427
0.930000000000001        0.970970000028610        -0.156386238713585        -0.0181172809133346
0.940000000000001        0.971066666841507        -0.155847974178378        -0.0169719709803755
0.950000000000001        0.971189999580383        -0.155161407639427        -0.0173532514359965
0.960000000000001        0.971290000677109        -0.154604871681127        -0.0180488018864929
0.970000000000001        0.971386667092641        -0.154067020459030        -0.0162163311161226
0.980000000000001        0.971503334045410        -0.153418051556590        -0.0173059903417249
0.990000000000001        0.971593333482742        -0.152917546109150        -0.0184208892285034
1.00000000000000        0.971710000038147        -0.152268899101354        -0.0170676501959011
1.01000000000000        0.971816666523615        -0.151676008619299        -0.0166603744366234
1.02000000000000        0.971893333196640        -0.151249960854031        -0.0166160245944316
1.03000000000000        0.972013333241145        -0.150583259389362        -0.0168957538325589
1.04000000000000        0.972106666167577        -0.150064847876745        -0.0156172175962589
1.05000000000000        0.972200000286102        -0.149546544835947        -0.0164289790207038
1.06000000000000        0.972293333212535        -0.149028363438895        -0.0124780536604394
1.07000000000000        0.972416667540868        -0.148343791536867        -0.0156635767193904
1.08000000000000        0.972486666043600        -0.147955351407384        -0.0156777104654171
1.09000000000000        0.972583332856496        -0.147419027968815        -0.0115545728170080
1.10000000000000        0.972703333298365        -0.146753416936832        -0.0135089570168357
1.11000000000000        0.972770000696182        -0.146383712245781        -0.0139171974378706
1.12000000000000        0.972890000343323        -0.145718400396012        -0.0123677751928180
1.13000000000000        0.972993333339691        -0.145145644857007        -0.0139569902739622
1.14000000000000        0.973073333899180        -0.144702313019006        -0.0141943330078513
1.15000000000000        0.973186666965485        -0.144074409306987        -0.0134662011722303
1.16000000000000        0.973289999961853        -0.143502056278774        -0.0117485777997626
1.17000000000000        0.973360000054041        -0.143114411045784        -0.0128830006598376
1.18000000000000        0.973466666539510        -0.142523838823460        -0.0134831178344199
1.19000000000000        0.973553333282471        -0.142044107399573        -0.0131770224150591
1.20000000000000        0.973626666863759        -0.141638256602230        -0.0113454096282658
1.21000000000000        0.973736667235692        -0.141029612343732        -0.0119302482516657
1.22000000000000        0.973826666673024        -0.140531753167651        -0.0103566043799177
1.23000000000000        0.973903333743413        -0.140107729521413        -0.0103308521496187
1.24000000000000        0.974006667137146        -0.139536343542061        -0.0107882714921145
1.25000000000000        0.974090000391007        -0.139075650643072        -0.0109397122041476
1.26000000000000        0.974159998893738        -0.138688746536607        -0.0107228623140689
1.27000000000000        0.974263333479563        -0.138117700027004        -0.00990603193088691
1.28000000000000        0.974366667270660        -0.137546797074590        -0.00938155311232515
1.29000000000000        0.974436666568120        -0.137160140979443        -0.00888102709894390
1.30000000000000        0.974533332983653        -0.136626288218709        -0.00854232956056897
1.31000000000000        0.974633332888285        -0.136074153771862        -0.00832410978762717
1.32000000000000        0.974706666469574        -0.135669336065565        -0.00812692033021610
1.33000000000000        0.974786666234334        -0.135227799251810        -0.0105097329350413
1.34000000000000        0.974886666933696        -0.134675989657087        -0.00904439075924608
1.35000000000000        0.974969999790192        -0.134216253343974        -0.00983657760143915
1.36000000000000        0.975033333301544        -0.133866911028101        -0.00738664047619175
1.37000000000000        0.975126667022705        -0.133352184898144        -0.00842367234478137
1.38000000000000        0.975206666787466        -0.132911084075087        -0.00886986413280930
1.39000000000000        0.975273334185282        -0.132543558283832        -0.00866589172874738
1.40000000000000        0.975376667579015        -0.131974012957439        -0.00750438723484105
1.41000000000000        0.975456666549047        -0.131533175481924        -0.00879428215972221
1.42000000000000        0.975539999008179        -0.131074056710130        -0.00610070230975531
1.43000000000000        0.975593333641688        -0.130780257570378        -0.00624834869039909
1.44000000000000        0.975686666965485        -0.130266210111124        -0.00723096282337601
1.45000000000000        0.975770000219345        -0.129807334634805        -0.00829505475730286
1.46000000000000        0.975833334128062        -0.129458645731541        -0.00756171198412006
1.47000000000000        0.975899999141693        -0.129091673131676        -0.00422094164255660
1.48000000000000        0.975976667006810        -0.128669708450559        -0.00439203336395603
1.49000000000000        0.976066666841507        -0.128174463951086        -0.00567856775016018
1.50000000000000        0.976123333374659        -0.127862697050313        -0.00679508718595573
1.51000000000000        0.976206665833791        -0.127404295173509        -0.00606474724543268
1.52000000000000        0.976286667188009        -0.126964301415781        -0.00591084743659025
1.53000000000000        0.976373333136241        -0.126487746458794        -0.00515028595828926
1.54000000000000        0.976420000394185        -0.126231174577858        -0.00580364021825536
1.55000000000000        0.976506667137146        -0.125754763834189        -0.00399862953750100
1.56000000000000        0.976590000391007        -0.125296768436358        -0.00553045896313559
1.57000000000000        0.976653332710266        -0.124948756822278        -0.00525656545380120
1.58000000000000        0.976700000365575        -0.124692350624149        -0.00647749227391488
1.59000000000000        0.976790000200272        -0.124197943259200        -0.00561358559725699
1.60000000000000        0.976853334108988        -0.123850085447757        -0.00474168051791277
1.61000000000000        0.976913332939148        -0.123520592798238        -0.00422623112262671
1.62000000000000        0.976973333756129        -0.123191135376305        -0.00415277659066092
1.63000000000000        0.977050000429154        -0.122770234815717        -0.00463853748062707
1.64000000000000        0.977129999796550        -0.122331117983482        -0.00409135493502994
1.65000000000000        0.977176666657130        -0.122075001237547        -0.00440044737324113
1.66000000000000        0.977239999771118        -0.121727461439988        -0.00300569597944612
1.67000000000000        0.977296666701635        -0.121416545739723        -0.00316428837175479
1.68000000000000        0.977370000282923        -0.121014245698521        -0.00316819237219542
1.69000000000000        0.977439999977748        -0.120630299103985        -0.00333913222417426
1.70000000000000        0.977500000000000        -0.120301250283446        -0.00460603563632659
1.71000000000000        0.977553333441416        -0.120008800548805        -0.00286257019926090
1.72000000000000        0.977610000371933        -0.119698111670606        -0.00331784950939558
1.73000000000000        0.977679999272029        -0.119314383909412        -0.00272281543881660
1.74000000000000        0.977743332783381        -0.118967249068857        -0.00271987920981313
1.75000000000000        0.977786667346954        -0.118729759148057        -0.00291984239228051
1.76000000000000        0.977849999666214        -0.118382716954719        -0.00265887138358447
1.77000000000000        0.977900000015895        -0.118108766071159        -0.00304781865782646
1.78000000000000        0.977970000505447        -0.117725288324857        -0.00148861976742845
1.79000000000000        0.978019999663035        -0.117451420372089        -0.00414695289290331
1.80000000000000        0.978063333431880        -0.117214087498257        -0.00220443687694125
1.81000000000000        0.978119999567668        -0.116903771198761        -0.00244294833954917
1.82000000000000        0.978183333476385        -0.116556989029199        -0.00345659633596527
1.83000000000000        0.978249999682109        -0.116192016097293        -0.00379151467155537
1.84000000000000        0.978293333450953        -0.115954809956241        -0.00196670082839388
1.85000000000000        0.978330000638962        -0.115754114865117        -0.00343401219441312
1.86000000000000        0.978363333543142        -0.115571684543762        -0.00216514673934279
1.87000000000000        0.978426667054494        -0.115225100366517        -0.00420038864217331
1.88000000000000        0.978480000098546        -0.114933281902525        -0.00545496776253220
1.89000000000000        0.978540000518163        -0.114605025197891        -0.00257702464752724
1.90000000000000        0.978580000003179        -0.114386217112756        -0.00331731833707236
1.91000000000000        0.978616666396459        -0.114185659772170        -0.00366187336732322
1.92000000000000        0.978650000492732        -0.114003344176691        -0.00281248763212036
1.93000000000000        0.978706666231155        -0.113693452156162        -0.00116353042921872
1.94000000000000        0.978759999275208        -0.113401823051015        -0.00259436610191504
1.95000000000000        0.978813333511353        -0.113110223458788        -0.00136052060962499
1.96000000000000        0.978836666742961        -0.112982662679755        -0.00327923147466441
1.97000000000000        0.978883333603541        -0.112727559627789        -0.00205097254612820
1.98000000000000        0.978926666577657        -0.112490705851604        -0.00230172887355756
1.99000000000000        0.978969999551773        -0.112253875835701        -0.00210729800719165
2.00000000000000        0.979000000556310        -0.112089923660731        -0.00198181923896830
2.01000000000000        0.979033333460490        -0.111907776372595        -0.00249441638465463
2.02000000000000        0.979093333482742        -0.111579942315192        -0.00268167784802261
2.03000000000000        0.979123332897822        -0.111416045608207        -0.00196089962633099
2.04000000000000        0.979156666199366        -0.111233948118706        -0.00256024410494408
2.05000000000000        0.979183333317439        -0.111088277630700        -0.00151708933711475
2.06000000000000        0.979223333597183        -0.110869790913191        -0.000923168357227713
2.07000000000000        0.979253333806992        -0.110705939136850        -0.00299400499707772
2.08000000000000        0.979293333689372        -0.110487489950008        -0.00160234033408639
2.09000000000000        0.979319999615351        -0.110341871997018        -0.00176486855759767
2.10000000000000        0.979366666873296        -0.110087051869202        -0.00276634433341012
2.11000000000000        0.979386667013168        -0.109977852275790        -0.00395794073457375
2.12000000000000        0.979413333336512        -0.109832263560869        -0.00260090109512852
2.13000000000000        0.979450000524521        -0.109632088301100        -0.00230463167411342
2.14000000000000        0.979479999939601        -0.109468326676600        -0.00257592899462379
2.15000000000000        0.979503333568573        -0.109340960272890        -0.00100693017391792
2.16000000000000        0.979539999961853        -0.109140830962900        0
2.17000000000000        0.979563333590825        -0.109013482207766        -0.00231125194412904
2.18000000000000        0.979586666822433        -0.108886142482770        -0.00178229371672884
2.19000000000000        0.979620000123978        -0.108704239870753        -0.00255076939499388
2.20000000000000        0.979636666774750        -0.108613293814128        -0.000800200785157157
2.21000000000000        0.979660000801086        -0.108485971310552        -0.000316767290521802
2.22000000000000        0.979683332840602        -0.108358666504859        -0.00268006280942534
2.23000000000000        0.979709999561310        -0.108213175330761        -0.00203133868584265
2.24000000000000        0.979729999303818        -0.108104064451914        -0.00179167301339058
2.25000000000000        0.979743333260218        -0.108031322328111        -0.00116367640768096
2.26000000000000        0.979763333797455        -0.107922215506472        -0.00156989833625272
2.27000000000000        0.979779999653498        -0.107831303865221        -0.00365339419267337
2.28000000000000        0.979806667168935        -0.107685840805742        -0.00300195350119255
2.29000000000000        0.979830000400543        -0.107558572574959        -0.00323184272468884
2.30000000000000        0.979840000073115        -0.107504032692458        -0.00385283493548682
2.30999999999999        0.979853333234787        -0.107431313361154        -0.00231056792597243
2.31999999999999        0.979869999488195        -0.107340418425346        -0.00299487470305127
2.32999999999999        0.979886666138967        -0.107249524816260        -0.00212322679533941
2.33999999999999        0.979889999628067        -0.107231345646874        -0.00132322561968842
2.34999999999999        0.979920000632604        -0.107067741577775        -0.00443631902316722
2.35999999999999        0.979920000235240        -0.107067743744641        -0.00386215857562893
2.36999999999999        0.979926667213440        -0.107031388340310        -0.000483282900847752
2.37999999999999        0.979943333466848        -0.106940508774776        -0.00187664765755308
2.38999999999999        0.979959999720256        -0.106849632701372        -0.00233234564040181
2.39999999999999        0.979959999720256        -0.106849632701372        -0.00304278863589198
2.40999999999999        0.979966666301092        -0.106813282816397        -0.00187935668663900
2.41999999999999        0.979966666698456        -0.106813280649765        -0.00281146242896666
2.42999999999999        0.979986666043600        -0.106704236513409        -0.00159156917397298
2.43999999999999        0.979986666043599        -0.106704236513409        -0.00309777741903642
2.44999999999999        0.979996666510900        -0.106649711997507        -0.00203900509764005
2.45999999999999        0.979996666312218        -0.106649713080748        -0.00408489412568898
2.46999999999999        0.980006666580836        -0.106595190904958        -0.00278381246945792
2.47999999999999        0.979993332823118        -0.106667887779729        -0.00195502847452159
2.48999999999999        0.980009999871254        -0.106577017847792        -0.00317893233181643
2.49999999999999        0.980009999871254        -0.106577017847792        -0.00349145617646086
2.50999999999999        0.979996666312218        -0.106649713080748        -0.00456538891362015
2.51999999999999        0.980003333091736        -0.106613365184982        -0.00355205766559430
2.52999999999999        0.980013333161672        -0.106558844930255        -0.00402700105724367
2.53999999999999        0.980003333290418        -0.106613364101758        -0.00414957433208478
2.54999999999999        0.979989999532700        -0.106686061535112        -0.00433136644381113
2.55999999999999        0.979996666510900        -0.106649711997507        -0.00434235118370288
2.56999999999999        0.979986666440964        -0.106704234346875        -0.00503767446651542
2.57999999999999        0.979983332951864        -0.106722409464822        -0.00485320112882950
2.58999999999999        0.979979999462764        -0.106740584722440        -0.00551132775232146
2.59999999999999        0.979960000117620        -0.106849630534705        -0.00544259878187995
2.60999999999999        0.979963332811991        -0.106831458772374        -0.00652889340628113
2.61999999999999        0.979946666558584        -0.106922334147430        -0.00512049086528040
2.62999999999999        0.979943333466848        -0.106940508774776        -0.00446788097646257
2.63999999999999        0.979926666418711        -0.107031392673975        -0.00550887395682280
2.64999999999999        0.979913333654404        -0.107104097540977        -0.00578570436040206
2.65999999999999        0.979910000562668        -0.107122273565258        -0.00790339269069499
2.66999999999999        0.979896666606267        -0.107194987727357        -0.00566738792194890
2.67999999999999        0.979883332649867        -0.107267704125400        -0.00789672304202340
2.68999999999999        0.979879999160767        -0.107285883574300        -0.00702927783211347
2.69999999999999        0.979856667121252        -0.107413130626981        -0.00667694024627001
2.70999999999999        0.979840000073115        -0.107504032692458        -0.00668806982554102
2.71999999999999        0.979820000727971        -0.107613113715511        -0.00945740192394345
2.72999999999999        0.979806666771571        -0.107685842973174        -0.00812179898087077
2.73999999999999        0.979789999723435        -0.107776755523851        -0.00917126175905406
2.74999999999999        0.979766666889191        -0.107904033332083        -0.00972369676888354
2.75999999999999        0.979743333260218        -0.108031322328111        -0.00978176787343009
2.76999999999999        0.979739999771118        -0.108049507649231        -0.0106328714583969
2.77999999999998        0.979706666469574        -0.108231359882885        -0.0113300882239846
2.78999999999998        0.979693333307902        -0.108304103826230        -0.00936222048583495
2.79999999999998        0.979660000403722        -0.108485973478719        -0.0117506887026474
2.80999999999998        0.979639999866486        -0.108595106323666        -0.0119864429172659
2.81999999999998        0.979606666564941        -0.108777000536710        -0.0116921036422925
2.82999999999998        0.979589999914169        -0.108867952892690        -0.0123121088826255
3楼2021-07-21 10:38:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

引用回帖:
3楼: Originally posted by ckm0811 at 2021-07-21 10:38:20
您好,我用微分方程组的形式写了一下程序,可以麻烦您帮我跑一下看看吗
Parameter fac(1:7);

ConstStr lambdif=A*w*cos(w*t);
         lambvdif=((1/3/fac(7))*(fac(1)*((lamb/lambv)^fac(2)-(lambv/lamb)^( ...

这个可能需要企业版才能计算吧。

这个是否有可能 求解x的解析解? ,这样就可以直接带入p方程拟合

Parameter fac(1:7);
Variable t,lamb,pa,p;
ParVariable lambv;
Constant A=0.02,w=2*pi*0.1;
ConstStr lambdif=A*w*cos(w*t),
         lambvdif=((1/3/fac7)*(fac1*((lamb/lambv)^fac2-(lambv/lamb)^(0.5*fac2))+fac3*((lamb/lambv)^fac4
         -(lambv/lamb)^(0.5*fac4))+fac5*((lamb/lambv)^fac6-(lambv/lamb)^(0.5*fac6))));
//InitialODEValue  t=0,p=-0.060966222;
OdeFunction p'=pa+fac1*((fac2-1)*lamb^(fac2-2)*lambv^(-fac2)*lambdif-fac2*lamb^(fac2-1)*lambv^(-fac2-1)*lambvdif
+(0.5*fac2+1)*lamb^(-0.5*fac2-2)*lambv^(0.5*fac2)*lambdif-0.5*fac2*lamb^(-0.5*fac2-1)*lambv^(0.5*fac2-1)*lambvdif)
+fac3*((fac4-1)*lamb^(fac4-2)*lambv^(-fac4)*lambdif-fac4*lamb^(fac4-1)*lambv^(-fac4-1)*lambvdif+(0.5*fac4+1)*lamb^(-0.5*fac4-2)*lambv^(0.5*fac4)*lambdif
-0.5*fac4*lamb^(-0.5*fac4-1)*lambv^(0.5*fac4-1)*lambvdif)+fac5*((fac6-1)*lamb^(fac6-2)*lambv^(-fac6)*lambdif
-fac6*lamb^(fac6-1)*lambv^(-fac6-1)*lambvdif+(0.5*fac6+1)*lamb^(-0.5*fac6-2)*lambv^(0.5*fac6)*lambdif
-0.5*fac6*lamb^(-0.5*fac6-1)*lambv^(0.5*fac6-1)*lambvdif);
Data;
0        0.959926667        -0.218715994        -0.060966222
0.25        0.963063333        -0.200840559        -0.046836278
0.5        0.96612        -0.183553472        -0.035042256
0.75        0.969016667        -0.167289626        -0.024438988
1        0.97171        -0.152268899        -0.01706765
1.25        0.97409        -0.139075651        -0.010939712
1.5        0.976123333        -0.127862697        -0.006795087
1.75        0.977786667        -0.118729759        -0.002919842
2        0.979000001        -0.112089924        -0.001981819
2.25        0.979743333        -0.108031322        -0.001163676
2.5        0.98001        -0.106577018        -0.003491456
2.75        0.979766667        -0.107904033        -0.009723697

» 本帖已获得的红花(最新10朵)

数值计算
4楼2021-07-21 20:06:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ckm0811

新虫 (初入文坛)

送红花一朵
引用回帖:
4楼: Originally posted by 独孤神宇 at 2021-07-21 20:06:35
这个可能需要企业版才能计算吧。

这个是否有可能 求解x的解析解? ,这样就可以直接带入p方程拟合

Parameter fac(1:7);
Variable t,lamb,pa,p;
ParVariable lambv;
Constant A=0.02,w=2*pi*0.1;
Cons ...

我用matlab求解了一下,这个应该是没有解析解。还是谢谢您
5楼2021-07-22 19:31:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

引用回帖:
5楼: Originally posted by ckm0811 at 2021-07-22 19:31:12
我用matlab求解了一下,这个应该是没有解析解。还是谢谢您...

可以参考一下这个结果。 数据点太多了,数据趋势明显,可以抽取部分数据拟合。

均方差(RMSE): 8.9424225760802E-18
残差平方和(SSR): 1.91920611670053E-33
相关系数(R): 0.458333333333333
相关系数之平方(R^2): 0.210069444444444
修正R平方(Adj. R^2): 0.261904761904762
确定系数(DC): 0.458333333333333
F统计(F-Statistic): -5.22814936168938E29

参数                  最佳估算
--------------------        -------------
fac1        3.03402198409604
fac2        0.426767353785268
fac3        -0.162134252603988
fac4        0
fac5        0
fac6        2.21639117580836
fac7        0.00666909053919589
lambv0        -0.0642609952712269
lambv1        -0.122299617461866
lambv2        -0.179059212190809
lambv3        -0.221947016217867
lambv4        -0.260568155058273
lambv5        -0.288634667671384
lambv6        -0.316783379508389
lambv7        -0.323931620009045
lambv8        -0.33038253736283
lambv9        -0.311755103592339
lambv10        -0.262350065039908
lambv11        0

====== 结果输出 ======

文件: 数据文件-1
No        t        目标 p        计算 p        目标 lambv        计算 lambv
1        0.25        -0.046836278        -0.046836278        0        0
2        0.5        -0.035042256        -0.035042256        0        0
3        0.75        -0.024438988        -0.024438988        0        0
4        1        -0.01706765        -0.01706765        0        0
5        1.25        -0.010939712        -0.010939712        0        0
6        1.5        -0.006795087        -0.00679508699999998        0        0
7        1.75        -0.002919842        -0.002919842        0        0
8        2        -0.001981819        -0.00198181899999999        0        0
9        2.25        -0.001163676        -0.001163676        0        0
10        2.5        -0.003491456        -0.00349145600000001        0        0
11        2.75        -0.009723697        -0.00972369699999999        0        0
数值计算
6楼2021-07-22 21:40:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wlfc

新虫 (初入文坛)

【答案】应助回帖

尝试用OpenLu(可从www.forcal.net下载)求解,与大家探讨。
使用 1楼 给出的第一种公式。未知中间变量lambv用解方程法求解,但不知这种方法有没有问题?
仍类似于 4楼 使用部分数据拟合,以减少运行时间。

Lu脚本代码:

!!!using["luopt","math"]; //使用命名空间

g(lambv :: fac1,fac2,fac3,fac4,fac5,fac6,fac7,lamb)= ((1.0/3/fac7)*(fac1*((lamb/lambv)^fac2-(lambv/lamb)^(0.5*fac2))+fac3*((lamb/lambv)^fac4-(lambv/lamb)^(0.5*fac4))+fac5*((lamb/lambv)^fac6-(lambv/lamb)^(0.5*fac6))))-lambv;

f(t,_lamb,lambv,pp : x : fac1,fac2,fac3,fac4,fac5,fac6,fac7,lamb) =
    lamb=_lamb, x=lamb,
    if{pqrt[@g,&x,1e-6]<=0, return(1)},          //连分式法解方程,返回迭代次数,迭代次数<=0,求解失败
    lambv=x,
    0;  //成功返回0

pp(pa,p,lamb,lambv :: fac1,fac2,fac3,fac4,fac5,fac6,fac7) =
  (pa+fac1*((lamb/lambv)^fac2/lamb-(lambv/lamb)^(fac2*0.5)/lamb)+fac3*((lamb/lambv)^fac4/lamb-(lambv/lamb)^(fac4*0.5)/lamb)+fac5*((lamb/lambv)^fac6/lamb-(lambv/lamb)^(fac6*0.5)/lamb)) - p;

目标函数(_fac1,_fac2,_fac3,_fac4,_fac5,_fac6,_fac7 : i,s,tf : t_A, t_lamb, t_pa, t_p, max, fac1,fac2,fac3,fac4,fac5,fac6,fac7,la)=
{
    fac1=_fac1, fac2=_fac2, fac3=_fac3, fac4=_fac4, fac5=_fac5, fac6=_fac6, fac7=_fac7,  //传递优化变量
    la[0]=t_lamb[0,0],
    //最后一个参数50表示gsl_ode函数在计算时,最多循环计算50次,这样可以提高速度
    tf=gsl_ode[@f, nil, 0.0, t_A, la,  1e-6, 1e-6, gsl_rkf45, 1e-6,50],
    i=-1, s=0, while{++i<max,
        s=s+pp[t_pa(i,0),t_p(i,0),t_lamb(i,0),tf(i,1)]^2.0
    },
    s
};

main(: tArray : t_A, t_lamb, t_pa, t_p, max, la)=
{
    tArray=matrix{ //存放实验数据//t,lamb,pa,p
        "0        0.959926667        -0.218715994        -0.060966222
0.25        0.963063333        -0.200840559        -0.046836278
0.5        0.96612        -0.183553472        -0.035042256
0.75        0.969016667        -0.167289626        -0.024438988
1        0.97171        -0.152268899        -0.01706765
1.25        0.97409        -0.139075651        -0.010939712
1.5        0.976123333        -0.127862697        -0.006795087
1.75        0.977786667        -0.118729759        -0.002919842
2        0.979000001        -0.112089924        -0.001981819
2.25        0.979743333        -0.108031322        -0.001163676
2.5        0.98001        -0.106577018        -0.003491456
2.75        0.979766667        -0.107904033        -0.009723697"
    },
    len[tArray,0,&max], t_A=tArray(all:0), t_lamb=tArray(all:1), t_pa=tArray(all:2), t_p=tArray(all:3), //用len函数取矩阵的行数,t_A等取矩阵的列
    la=ra1[0], //预先申请数组
    Opt1[@目标函数,  optwaysimdeep, optwayconfra] //Opt1函数全局优化
};

微分方程+解方程,耗时长,未多次求解,故结果不是最优的:

1.953313036693719         -2.867510001653266e-002   -0.2767401112856916       -3.629687916321768        -0.2763230915848823       7.260677042953397         -0.3201568717886613       2.502852593689372e-002
7楼2021-08-09 08:09:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wlfc

新虫 (初入文坛)

【答案】应助回帖

Lu 脚本 绘图代码,但不知道如何贴图?可以看到,第一个点没有拟合好。

!!!using["luopt","math","win"]; //使用命名空间

g(lambv :: fac1,fac2,fac3,fac4,fac5,fac6,fac7,lamb)= ((1.0/3/fac7)*(fac1*((lamb/lambv)^fac2-(lambv/lamb)^(0.5*fac2))+fac3*((lamb/lambv)^fac4-(lambv/lamb)^(0.5*fac4))+fac5*((lamb/lambv)^fac6-(lambv/lamb)^(0.5*fac6))))-lambv;

f(t,_lamb,lambv,pp : x : fac1,fac2,fac3,fac4,fac5,fac6,fac7,lamb) =
    lamb=_lamb, x=lamb,
    if{pqrt[@g,&x,1e-6]<=0, return(1)},          //连分式法解方程,返回迭代次数,迭代次数<=0,求解失败
    lambv=x,
    0;  //成功返回0

pp(pa,lamb,lambv :: fac1,fac2,fac3,fac4,fac5,fac6,fac7) =
  (pa+fac1*((lamb/lambv)^fac2/lamb-(lambv/lamb)^(fac2*0.5)/lamb)+fac3*((lamb/lambv)^fac4/lamb-(lambv/lamb)^(fac4*0.5)/lamb)+fac5*((lamb/lambv)^fac6/lamb-(lambv/lamb)^(fac6*0.5)/lamb));

set(_fac1,_fac2,_fac3,_fac4,_fac5,_fac6,_fac7 ::  fac1,fac2,fac3,fac4,fac5,fac6,fac7)=
{
    fac1=_fac1, fac2=_fac2, fac3=_fac3, fac4=_fac4, fac5=_fac5, fac6=_fac6, fac7=_fac7  //传递优化变量
};
init(main :  tArray, tf, i, k, t_pp,t_lambv : t_A, t_lamb, t_pa, t_p, max)=
{
    tArray=matrix{ //存放实验数据//t,lamb,pa,p
        "0        0.959926667        -0.218715994        -0.060966222
0.25        0.963063333        -0.200840559        -0.046836278
0.5        0.96612        -0.183553472        -0.035042256
0.75        0.969016667        -0.167289626        -0.024438988
1        0.97171        -0.152268899        -0.01706765
1.25        0.97409        -0.139075651        -0.010939712
1.5        0.976123333        -0.127862697        -0.006795087
1.75        0.977786667        -0.118729759        -0.002919842
2        0.979000001        -0.112089924        -0.001981819
2.25        0.979743333        -0.108031322        -0.001163676
2.5        0.98001        -0.106577018        -0.003491456
2.75        0.979766667        -0.107904033        -0.009723697"
    },
    len[tArray,0,&max], t_A=tArray(all:0), t_lamb=tArray(all:1), t_pa=tArray(all:2), t_p=tArray(all:3), //用len函数取矩阵的行数,t_A等取矩阵的列

    set[1.953313036693719    ,     -2.867510001653266e-002 ,  -0.2767401112856916   ,    -3.629687916321768   ,     -0.2763230915848823  ,     7.260677042953397   ,      -0.3201568717886613 ],

    t_pp=new[real_s,max], t_lambv=new[real_s,max],
    //最后一个参数50表示gsl_ode函数在计算时,最多循环计算50次,这样可以提高速度
    tf=gsl_ode[@f, nil, 0.0, t_A, ra1(t_lamb[0,0]),  1e-6, 1e-6, gsl_rkf45, 1e-6,50],
    i=-1, while{++i<max,  t_pp=pp[t_pa(i,0),t_lamb(i,0),tf(i,1)],   t_lambv=tf(i,1)},
    t_A=reshape(t_A),
    o[t_lambv, t_pp],
    cwAttach[typeSplit], cwResizePlots(1,2,2), //左二右二分裂
    k=cwAddCurve{t_A, t_p.reshape(), max, 0},    //给0子图添加曲线
    cwSetScatter(k,0),                  //设置绘制点
    cwSetDataLineSize(5, k, 0),   //设置点的大小
    cwAddCurve{t_A, t_pp, max, 0},                       //给0子图添加曲线
    cwAddCurve{t_A, t_lamb.reshape(), max, 1},  //给1子图添加曲线
    cwAddCurve{t_A, t_pa.reshape(), max, 2},      //给2子图添加曲线
    cwAddCurve{t_A, t_lambv, max, 3}                 //给3子图添加曲线
};
ChartWnd[@init];
8楼2021-08-09 08:16:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wlfc

新虫 (初入文坛)

图形参考:https://blog.csdn.net/wlfc/article/details/119539076
9楼2021-08-09 15:37:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wlfc

新虫 (初入文坛)

【答案】应助回帖

使用 3楼、4楼 的公式进行求解。

有两个难点:
1、微分方程求解时要传递中间变量lamb, pa。
2、lambv为未知中间变量,需要求解。
第一个难点对Lu脚本来说不是问题,gsl支持的Lu扩展数学库中求解微分方程的函数gsl_ode中提供了该功能。
进一步讨论:微分方程求解传递中间变量时,按时间t的改变量进行插值,可提高求解精度。例如,进行线性插值:lamb=lamb0+(lamb1-lamb0)*[(t-t0)/(t1-t0)], pa=pa0+(pa1-pa0)*[(t-t0)/(t1-t0)]。
第二个难点若使用6楼的办法,当数据量大时似乎难以实现。故在这里使用幂级数逼近lambv,进行拟合的方法,需增加k0,k1,k2,k3四个拟合参数;当然拟合参数多时精度高,但耗时长。

仍使用部分数据拟合,以减少时间。

Lu脚本代码:

!!!using["luopt","math"]; //使用命名空间
f(t,p,dp, i : lamb,pa, A,w,lambdif,lambvdif,lambv: t_A, t_lamb, t_pa, fac1,fac2,fac3,fac4,fac5,fac6,fac7,k0,k1,k2,k3,k4) =
{
    lamb=t_lamb+(t_lamb[i+1]-t_lamb)*[(t-t_A)/(t_A[i+1]-t_A)], pa=t_pa+(t_pa[i+1]-t_pa)*[(t-t_A)/(t_A[i+1]-t_A)], //线性插值计算lamb,pa
    lambv=k0+k1*lamb+k2*lamb*lamb+k3*lamb^3+k4*lamb^4, //lambv=f(lamb,k0,k1,k2,k3,k4),使用幂级数逼近
    A=0.02,w=2*pi*0.1,
    lambdif=A*w*cos(w*t),
    lambvdif=((1.0/3/fac7)*(fac1*((lamb/lambv)^fac2-(lambv/lamb)^(0.5*fac2))+fac3*((lamb/lambv)^fac4-(lambv/lamb)^(0.5*fac4))+fac5*((lamb/lambv)^fac6-(lambv/lamb)^(0.5*fac6)))),

    dp=pa+fac1*((fac2-1)*lamb^(fac2-2)*lambv^(-fac2)*lambdif-fac2*lamb^(fac2-1)*lambv^(-fac2-1)*lambvdif
        +(0.5*fac2+1)*lamb^(-0.5*fac2-2)*lambv^(0.5*fac2)*lambdif-0.5*fac2*lamb^(-0.5*fac2-1)*lambv^(0.5*fac2-1)*lambvdif)
        +fac3*((fac4-1)*lamb^(fac4-2)*lambv^(-fac4)*lambdif-fac4*lamb^(fac4-1)*lambv^(-fac4-1)*lambvdif+(0.5*fac4+1)*lamb^(-0.5*fac4-2)*lambv^(0.5*fac4)*lambdif
        -0.5*fac4*lamb^(-0.5*fac4-1)*lambv^(0.5*fac4-1)*lambvdif)+fac5*((fac6-1)*lamb^(fac6-2)*lambv^(-fac6)*lambdif
        -fac6*lamb^(fac6-1)*lambv^(-fac6-1)*lambvdif+(0.5*fac6+1)*lamb^(-0.5*fac6-2)*lambv^(0.5*fac6)*lambdif
        -0.5*fac6*lamb^(-0.5*fac6-1)*lambv^(0.5*fac6-1)*lambvdif),

    0 //必须返回0
};
目标函数(_fac1,_fac2,_fac3,_fac4,_fac5,_fac6,_fac7,_k0,_k1,_k2,_k3,_k4 : i,s,tf: t_A, t_p, fac1,fac2,fac3,fac4,fac5,fac6,fac7,k0,k1,k2,k3,k4)=
{
    fac1=_fac1, fac2=_fac2, fac3=_fac3, fac4=_fac4, fac5=_fac5, fac6=_fac6, fac7=_fac7, k0=_k0, k1=_k1, k2=_k2, k3=_k3, k4=_k4, //传递优化变量
    //最后一个参数50表示gsl_ode函数在计算时,最多循环计算50次,这样可以提高速度
    tf=gsl_ode[@f, nil, nil, t_A, ra1(-0.060966222), 1e-6, 1e-6, gsl_rkf45, 1e-6,50],
    sum{[tf(all:1).reshape()-t_p].^2.0} //代码矢量化加速,特别适合大数据量
};
main(: tArray : t_A, t_lamb, t_pa, t_p)=
{
    tArray=matrix{ //存放实验数据//t,lamb,pa,p
    "0 0.959926667 -0.218715994 -0.060966222
    0.25 0.963063333 -0.200840559 -0.046836278
    0.5 0.96612 -0.183553472 -0.035042256
    0.75 0.969016667 -0.167289626 -0.024438988
    1 0.97171 -0.152268899 -0.01706765
    1.25 0.97409 -0.139075651 -0.010939712
    1.5 0.976123333 -0.127862697 -0.006795087
    1.75 0.977786667 -0.118729759 -0.002919842
    2 0.979000001 -0.112089924 -0.001981819
    2.25 0.979743333 -0.108031322 -0.001163676
    2.5 0.98001 -0.106577018 -0.003491456
    2.75 0.979766667 -0.107904033 -0.009723697"
    },
    t_A=tArray(all:0).reshape(), t_lamb=tArray(all:1).reshape(), t_pa=tArray(all:2).reshape(), t_p=tArray(all:3).reshape(), //t_A等取矩阵的列,并转为一维数组
    Opt1[@目标函数, optwaysimdeep, optwayconfra] //Opt1函数全局优化
};

结果(fac1~fac7,k0,k1,k2,k3,k4,最小值):

17.38947868627771 0.3416680168065553 -31901.02726305072 1.871542771429994e-004 2.297270203567084e-003 8.207606707403809 -41.52220237484659 -1.705988163594953 -0.3001058349255158 2.1410790976942 4.419612473682794 -4.029380465220802 2.405714024195563e-006

绘图代码:

!!!using["luopt","math","win"]; //使用命名空间
f(t,p,dp, i : lamb,pa, A,w,lambdif,lambvdif,lambv: t_A, t_lamb, t_pa, fac1,fac2,fac3,fac4,fac5,fac6,fac7,k0,k1,k2,k3,k4) =
{
    lamb=t_lamb+(t_lamb[i+1]-t_lamb)*[(t-t_A)/(t_A[i+1]-t_A)], pa=t_pa+(t_pa[i+1]-t_pa)*[(t-t_A)/(t_A[i+1]-t_A)], //线性插值计算lamb,pa
    lambv=k0+k1*lamb+k2*lamb*lamb+k3*lamb^3+k4*lamb^4, //lambv=f(lamb,k0,k1,k2,k3,k4),使用幂级数逼近
    A=0.02,w=2*pi*0.1,
    lambdif=A*w*cos(w*t),
    lambvdif=((1.0/3/fac7)*(fac1*((lamb/lambv)^fac2-(lambv/lamb)^(0.5*fac2))+fac3*((lamb/lambv)^fac4-(lambv/lamb)^(0.5*fac4))+fac5*((lamb/lambv)^fac6-(lambv/lamb)^(0.5*fac6)))),

    dp=pa+fac1*((fac2-1)*lamb^(fac2-2)*lambv^(-fac2)*lambdif-fac2*lamb^(fac2-1)*lambv^(-fac2-1)*lambvdif
        +(0.5*fac2+1)*lamb^(-0.5*fac2-2)*lambv^(0.5*fac2)*lambdif-0.5*fac2*lamb^(-0.5*fac2-1)*lambv^(0.5*fac2-1)*lambvdif)
        +fac3*((fac4-1)*lamb^(fac4-2)*lambv^(-fac4)*lambdif-fac4*lamb^(fac4-1)*lambv^(-fac4-1)*lambvdif+(0.5*fac4+1)*lamb^(-0.5*fac4-2)*lambv^(0.5*fac4)*lambdif
        -0.5*fac4*lamb^(-0.5*fac4-1)*lambv^(0.5*fac4-1)*lambvdif)+fac5*((fac6-1)*lamb^(fac6-2)*lambv^(-fac6)*lambdif
        -fac6*lamb^(fac6-1)*lambv^(-fac6-1)*lambvdif+(0.5*fac6+1)*lamb^(-0.5*fac6-2)*lambv^(0.5*fac6)*lambdif
        -0.5*fac6*lamb^(-0.5*fac6-1)*lambv^(0.5*fac6-1)*lambvdif),

    0 //必须返回0
};
set(_fac1,_fac2,_fac3,_fac4,_fac5,_fac6,_fac7,_k0,_k1,_k2,_k3,_k4 :: fac1,fac2,fac3,fac4,fac5,fac6,fac7,k0,k1,k2,k3,k4)=
{
    fac1=_fac1, fac2=_fac2, fac3=_fac3, fac4=_fac4, fac5=_fac5, fac6=_fac6, fac7=_fac7, k0=_k0, k1=_k1, k2=_k2, k3=_k3, k4=_k4 //传递优化变量
};
init(init: tArray,t_lambv,i,tf,k,lamb : t_A, t_lamb, t_pa, t_p, max, fac1,fac2,fac3,fac4,fac5,fac6,fac7,k0,k1,k2,k3,k4)=
{
    tArray=matrix{ //存放实验数据//t,lamb,pa,p
    "0 0.959926667 -0.218715994 -0.060966222
    ... ...  数据省略
    2.75 0.979766667 -0.107904033 -0.009723697"
    },
    len[tArray,0,&max], t_A=tArray(all:0).reshape(), t_lamb=tArray(all:1).reshape(), t_pa=tArray(all:2).reshape(), t_p=tArray(all:3).reshape(),

    set[17.38947868627771, 0.3416680168065553, -31901.02726305072, 1.871542771429994e-004, 2.297270203567084e-003, 8.207606707403809, -41.52220237484659, -1.705988163594953, -0.3001058349255158, 2.1410790976942, 4.419612473682794, -4.029380465220802 ],

    t_lambv=new[real_s,max],
    i=-1, while{++i<max, lamb=t_lamb, t_lambv=k0+k1*lamb+k2*lamb*lamb+k3*lamb^3+k4*lamb^4},
    tf=gsl_ode[@f, nil, nil, t_A, ra1(-0.060966222), 1e-6, 1e-6, gsl_rkf45, 1e-6,50],

    cwAttach[typeSplit], cwResizePlots(1,2,2), //左二右二分裂
    k=cwAddCurve{t_A, t_p, max, 0}, //给0子图添加曲线
    cwSetScatter(k,0),         //设置绘制点
    cwSetDataLineSize(5, k, 0),    //设置点的大小
    cwAddCurve{t_A, tf(all:1).reshape(), max, 0}, //给0子图添加曲线
    cwAddCurve{t_A, t_lamb, max, 1}, //给1子图添加曲线
    cwAddCurve{t_A, t_pa, max, 2},   //给2子图添加曲线
    cwAddCurve{t_A, t_lambv, max, 3} //给3子图添加曲线
};
ChartWnd[@init];

图形:
https://blog.csdn.net/wlfc/article/details/119607664

» 本帖已获得的红花(最新10朵)

10楼2021-08-11 16:09:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ckm0811 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
信息提示
请填处理意见