| 5 | 1/1 | 返回列表 |
| 查看: 1705 | 回復(fù): 6 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | |||
[交流]
使用lsqnonlin函數(shù)優(yōu)化動力學(xué)參數(shù),總是得不到合理的結(jié)果
|
|||
|
大家好: 我最近在使用matlab回歸動力學(xué)參數(shù),首先是使用4階龍哥庫塔算法進行積分,之后使用lsqnonlin進行非線性最小二乘擬合,運行已經(jīng)寫好的m文件,總是得不到合理的結(jié)果,不知道是不是自己程序編寫有問題,請大神指導(dǎo),謝謝。 下面粘貼上自己的m文件: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function zqq100 % 動力學(xué)ODE方程模型的參數(shù)估計 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all clc kz0 = [1.73 -3 4.3 3.4 29.4 26.46 22.8 29.4]; % 參數(shù)初值 lb = []; % 參數(shù)下限 ub = []; % 參數(shù)上限 x0 = [72516.987800 7922.540990 2213.519110 2440.339360]; KineticsData; yexp = ExpData(:,2:5); % yexp: 實驗數(shù)據(jù)[x1 x2 x3 x4] %再參數(shù)化 a = 0; b = 0.022146; d=0.000022146; tt=a:d:b; z = func(tt); Tintegral = quadl(@func,a,b); % 實際上應(yīng)該是(1000/T)integral Taverage = Tintegral/(b-a) ; % 實際上應(yīng)該是(1000/T)average % 優(yōu)化參數(shù)設(shè)置 options=optimset ('Display','iter','TolX',1e-25,'TolFun',1e-25,'LargeScale','off','MaxIter',2,'MaxFunEvals',inf); % 使用函數(shù)lsqnonlin()進行參數(shù)估計 [kz,resnorm,residual,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc4LNL,kz0,lb,ub,options,x0,yexp,Taverage); ci = nlparci(kz,residual,jacobian); %把回歸參數(shù)轉(zhuǎn)化為自己需要的參數(shù) k01 = exp(kz(1)+kz(5)*Taverage); ke1 = exp(ci(1,2)-kz(1)+(ci(5,2)-kz(5))*Taverage); Ea1 = kz(5)*1000*8.314; Ee1 = (ci(5,2)-kz(5))*1000*8.314; k02 = exp(kz(2)+kz(6)*Taverage); ke2 = exp(ci(2,2)-kz(2)+(ci(6,2)-kz(6))*Taverage); Ea2 = kz(6)*1000*8.314; Ee2 = (ci(6,2)-kz(6))*1000*8.314; k03 = exp(kz(3)+kz(7)*Taverage); ke3 = exp(ci(3,2)-kz(3)+(ci(7,2)-kz(7))*Taverage); Ea3 = kz(7)*1000*8.314; Ee3 = (ci(7,2)-kz(7))*1000*8.314; k04 = exp(kz(4)+kz(8)*Taverage); ke4 = exp(ci(4,2)-kz(4)+(ci(8,2)-kz(8))*Taverage); Ea4 = kz(8)*1000*8.314; Ee4 = (ci(8,2)-kz(8))*1000*8.314; % ------------------------------------------------------------------ % 輸出結(jié)果 fprintf('\n\n使用函數(shù)lsqnonlin()估計得到的參數(shù)值為:\n') fprintf('\tk01 = %.4f ± %.4f\n',k01,ke1) fprintf('\tk02 = %.4f ± %.4f\n',Ea1,Ee1) fprintf('\tk03 = %.4f ± %.4f\n',k02,ke2) fprintf('\tk04 = %.4f ± %.4f\n',Ea2,Ee2) fprintf('\tEa1 = %.4f ± %.4f\n',k03,ke3) fprintf('\tEa2 = %.4f ± %.4f\n',Ea3,Ee3) fprintf('\tEa3 = %.4f ± %.4f\n',k04,ke4) fprintf('\tEa4 = %.4f ± %.4f\n',Ea4,Ee4) fprintf(' The sum of the squares is: %.1e\n\n',resnorm) % ------------------------------------------------------------------ function f = ObjFunc4LNL(kz,x0,yexp,Taverage) tspan = [0.000000 0.006021 0.009538 0.012340 0.014647 0.016594 0.018268 0.019730 0.020395 0.021021 0.021613 0.022146]; [t x] = ode45(@KineticEqs,tspan,x0,[],kz,Taverage); y(:,1:4)=x(:,1:4); f1 = y(:,1) - yexp(:,1); f2 = y(:,2) - yexp(:,2); f3 = y(:,3) - yexp(:,3); f4 = y(:,4) - yexp(:,4); f = [f1; f2; f3; f4]; % ------------------------------------------------------------------ function dxdt = KineticEqs(t,x,kz,Taverage) T = 2E+09*t.^4 - 8E+07*t.^3 + 1E+06*t.^2 + 1593.6*t + 823.94; D = 1000./T-Taverage; k(1)=exp(kz(1)-kz(5)*D); k(2)=exp(kz(2)-kz(6)*D); k(3)=exp(kz(3)-kz(7)*D); k(4)=exp(kz(4)-kz(8)*D); dxdt = ... [ ( - k(1)*x(1) ) ( - k(1)*x(1) - k(3)*x(3) + k(2)*x(2) ) ( - k(1)*x(1) + k(3)*x(3) + k(4)*x(3) ) ( - k(2)*x(2) - k(3)*x(3) - k(4)*x(3) ) ]; % ------------------------------------------------------------------ function z = func(tt) z =1000./( 2E+09*tt.^4 - 8E+07*tt.^3 + 1E+06*tt.^2 + 1593.6*tt + 823.94); 數(shù)據(jù)文件 % 動力學(xué)數(shù)據(jù): % t y1 y2 y3 y4 ExpData = ... [ 0.000000 72516.987800 7922.540990 2213.519110 2440.339360 0.006021 42499.607900 22206.384100 3306.398400 3606.838600 0.009538 29000.355000 29930.619400 3600.077060 3836.127990 0.012340 20185.280200 35570.546400 3528.468400 3684.127360 0.014647 14159.635500 39715.404600 3262.616960 3307.931340 0.016594 9923.223120 42747.821100 2919.806950 2824.661990 0.018268 6889.657400 44873.256100 2561.423650 2313.346410 0.019730 4712.646380 46269.306400 2219.932610 1823.752130 0.020395 3871.540620 46727.452000 2061.574630 1592.788930 0.021021 3166.514550 47033.087200 1914.970250 1369.417740 0.021613 2580.686780 47184.935100 1784.008050 1149.425230 0.022146 2121.809490 47180.789300 1679.141140 937.562404 ] [ Last edited by zhangqq72270 on 2013-8-14 at 10:15 ] |
» 搶金幣啦!回帖就可以得到:
+1/980
+1/90
+1/86
+1/56
+1/37
+1/35
+1/24
+1/18
+1/17
+1/11
+1/9
+1/8
+1/6
+1/6
+1/5
+1/2
+1/2
+1/2
+1/2
+1/1
| 強非線性的是不是需要用其他算法,比如GA這類全局搜索的,這種問題如果給的初值不在平衡點的吸引域內(nèi)是不是就沒法獲得很好的效果。 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 320分,材料與化工專業(yè),求調(diào)劑 +11 | 一定上岸aaa 2026-03-27 | 15/750 |
|
|---|---|---|---|---|
|
[考研] 一志愿211,335分,0856,求調(diào)劑院校和導(dǎo)師 +11 | 傾____蕭 2026-03-27 | 12/600 |
|
|
[考研] 求生物學(xué)調(diào)劑 +7 | 15172915737 2026-04-01 | 7/350 |
|
|
[考研] 材料專碩調(diào)劑 +14 | 椰椰。 2026-03-29 | 14/700 |
|
|
[考研] 330分求調(diào)劑 +11 | qzenlc 2026-03-29 | 11/550 |
|
|
[考研] 材料專業(yè)求調(diào)劑 +7 | 月月鳥木 2026-04-01 | 7/350 |
|
|
[考研] 314求調(diào)劑 +6 | 1xiaojun23 2026-03-31 | 6/300 |
|
|
[考研] 化學(xué)0703 調(diào)劑 306分 一志愿211 +12 | 26要上岸 2026-03-28 | 12/600 |
|
|
[碩博家園] 博一被送出聯(lián)培感覺不適應(yīng)怎么辦 +3 | 全村的狗 2026-03-31 | 3/150 |
|
|
[考研] 358求調(diào)劑 +3 | 王向陽花 2026-03-31 | 3/150 |
|
|
[考研] 求調(diào)劑,一志愿 南京航空航天大學(xué) ,080500材料科學(xué)與工程學(xué)碩,總分289分 +10 | @taotao 2026-03-29 | 10/500 |
|
|
[考研] 085602 307分 求調(diào)劑 +10 | 不知道叫什么! 2026-03-26 | 10/500 |
|
|
[考研] 346求調(diào)劑 一志愿070303有機化學(xué) +11 | 蘿卜燉青菜 2026-03-28 | 12/600 |
|
|
[考研] 調(diào)劑求院校招收 +7 | 鶴鯨鴿 2026-03-28 | 7/350 |
|
|
[考研] 279求調(diào)劑 +4 | 蝶舞輕繞 2026-03-29 | 4/200 |
|
|
[考研] 339求調(diào)劑,想調(diào)回江蘇 +6 | 烤麥芽 2026-03-27 | 8/400 |
|
|
[考研] 081200-314 +3 | LILIQQ 2026-03-27 | 4/200 |
|
|
[考研] 308求調(diào)劑 +7 | 墨墨漠 2026-03-27 | 7/350 |
|
|
[考研] 321求調(diào)劑 +6 | wasdssaa 2026-03-26 | 6/300 |
|
|
[考研] 中國科學(xué)院深圳先進技術(shù)研究院-光纖傳感課題組招生-中國科學(xué)院大學(xué)、深圳理工大學(xué)聯(lián)培 +5 | YangTyu1 2026-03-26 | 5/250 |
|