24小时热门版块排行榜    

查看: 639  |  回复: 0

898766282

新虫 (正式写手)

[求助] 复杂动力学多参数拟合程序

function Akinetics
clear all
clc
global R C
a0=[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]                       %参数初值
lb=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];                                               %参数下限
ub=[+inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf];        %参数上限
sulv = ...
   [0.1260    0.0960    0.0630    0.2680    0.0210    0.0189    0.0126    0.0168    0.0147
    0.1260    0.1280    0.0630    0.2800    0.0210    0.0189    0.0126    0.0168    0.0147
    0.1220    0.1460    0.0610    0.2840    0.0203    0.0183    0.0122    0.0163    0.0142
    0.1400    0.1740    0.0700    0.2960    0.0233    0.0210    0.0140    0.0187    0.0163
    0.1700    0.1980    0.0850    0.3280    0.0283    0.0255    0.0170    0.0227    0.0198
    0.1700    0.2160    0.0850    0.3320    0.0283    0.0255    0.0170    0.0227    0.0198
    0.1760    0.2300    0.0880    0.3400    0.0293    0.0264    0.0176    0.0235    0.0205
    0.2140    0.2480    0.1070    0.4560    0.0357    0.0321    0.0214    0.0285    0.0250
    0.2440    0.2780    0.1220    0.4680    0.0407    0.0366    0.0244    0.0325    0.0285
    0.2620    0.2980    0.1310    0.5560    0.0437    0.0393    0.0262    0.0349    0.0306]

nondu = ...
   [0.0252    0.0192    0.0126    0.0536    0.0042    0.0038    0.0025    0.0034    0.0029
    0.0252    0.0256    0.0126    0.0560    0.0042    0.0038    0.0025    0.0034    0.0029
    0.0244    0.0292    0.0122    0.0568    0.0041    0.0037    0.0024    0.0033    0.0028
    0.0280    0.0348    0.0140    0.0592    0.0047    0.0042    0.0028    0.0037    0.0033
    0.0340    0.0396    0.0170    0.0656    0.0057    0.0051    0.0034    0.0045    0.0040
    0.0340    0.0432    0.0170    0.0664    0.0057    0.0051    0.0034    0.0045    0.0040
    0.0352    0.0460    0.0176    0.0680    0.0059    0.0053    0.0035    0.0047    0.0041
    0.0428    0.0496    0.0214    0.0912    0.0071    0.0064    0.0043    0.0057    0.0050
    0.0488    0.0556    0.0244    0.0936    0.0081    0.0073    0.0049    0.0065    0.0057
    0.0524    0.0596    0.0262    0.1112    0.0087    0.0079    0.0052    0.0070    0.0061]
R=sulv(:,1:9);C=nondu(:,1:9);               %实验数据

%使用lsqnonlin()进行参数估计
[a,resnorm,residual ,exitflag,output,lambda,jacobian]=lsqnonlin(@objfun,a0,lb,ub,R,C);
ci=nlparci(a,residual,jacobian);

function f=objfun(a)
global R C
f=R-r(a,C)

function rr=r(a,C)
rr=...
  [(-a(15).*(C(1).^a(1)).*C(2).^a(2)-a(16).*(C(1).^a(3)).*C(2).^a(4)-a(17).*(C(1).^a(5)).*C(4).^a(6)-a(18).*(C(1).^a(7)).*C(4).^a(8))
   (-a(15).*(C(1).^a(1)).*C(2).^a(2)-a(16).*(C(1).^a(3)).*C(2).^a(4)-a(17).*(C(1).^a(5)).*C(4).^a(6)-a(19).*(C(3).^a(9)).*C(2).^a(10)-a(21).*(C(3).^a(13)).*C(2).^a(14))
   (+a(15).*(C(1).^a(1)).*C(2).^a(2)-a(19).*(C(3).^a(9)).*C(2).^a(10)-a(20).*(C(3).^a(11)).*C(4).^a(12)-a(21).*(C(3).^a(13)).*C(2).^a(14))
   (+a(15).*(C(1).^a(1)).*C(2).^a(2)+a(18).*(C(1).^a(7)).*C(4).^a(8)-a(17).*(C(1).^a(5)).*C(4).^a(6)+a(19).*(C(3).^a(9)).*C(2).^a(10)-a(20).*(C(3).^a(11)).*C(4).^a(12))
   (+a(16).*(C(1).^a(3)).*C(2).^a(4)+a(20).*(C(3).^a(11)).*C(4).^a(12))
   (+a(18).*(C(1).^a(7)).*C(4).^a(8))
   (+a(17).*(C(1).^a(5)).*C(4).^a(6))
   (+a(19).*(C(3).^a(9)).*C(2).^a(10))
   (+a(21).*(C(3).^a(13)).*C(2).^a(14))]

Warning: Struct field assignment overwrites a value with class "double". See MATLAB R14SP2 Release Notes, Assigning Nonstructure Variables As Structures Displays Warning, for details.
> In createOptionFeedback at 34
  In prepareOptionsForSolver at 31
  In lsqnonlin at 168
  In Akinetics at 34
Error using Akinetics>objfun
Too many input arguments.

Error in lsqnonlin (line 194)
            initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Error in Akinetics (line 34)
[a,resnorm,residual ,exitflag,output,lambda,jacobian]=lsqnonlin(@objfun,a0,lb,ub,R,C);

Caused by:
    Failure in initial user-supplied objective function evaluation. LSQNONLIN cannot continue.

求指导,程序哪里出错了,或者求大神重新赐予我新的程序,感觉我的程序拟合不出这么多的参数,21个参数。非常感谢。
动力学模型是:
R(1)=(-a(15).*(C(1).^a(1)).*C(2).^a(2)-a(16).*(C(1).^a(3)).*C(2).^a(4)-a(17).*(C(1).^a(5)).*C(4).^a(6)-a(18).*(C(1).^a(7)).*C(4).^a(8))

  R(2)=(-a(15).*(C(1).^a(1)).*C(2).^a(2)-a(16).*(C(1).^a(3)).*C(2).^a(4)-a(17).*(C(1).^a(5)).*C(4).^a(6)-a(19).*(C(3).^a(9)).*C(2).^a(10)-a(21).*(C(3).^a(13)).*C(2).^a(14))

R(3)= (+a(15).*(C(1).^a(1)).*C(2).^a(2)-a(19).*(C(3).^a(9)).*C(2).^a(10)-a(20).*(C(3).^a(11)).*C(4).^a(12)-a(21).*(C(3).^a(13)).*C(2).^a(14))
  
R(4)=(+a(15).*(C(1).^a(1)).*C(2).^a(2)+a(18).*(C(1).^a(7)).*C(4).^a(8)-a(17).*(C(1).^a(5)).*C(4).^a(6)+a(19).*(C(3).^a(9)).*C(2).^a(10)-a(20).*(C(3).^a(11)).*C(4).^a(12))
  
R(5)=(+a(16).*(C(1).^a(3)).*C(2).^a(4)+a(20).*(C(3).^a(11)).*C(4).^a(12))
  
R(6)= (+a(18).*(C(1).^a(7)).*C(4).^a(8))
  
R(7)= (+a(17).*(C(1).^a(5)).*C(4).^a(6))

R(8)= (+a(19).*(C(3).^a(9)).*C(2).^a(10))
  
R(9)= (+a(21).*(C(3).^a(13)).*C(2).^a(14))]
回复此楼

» 猜你喜欢

已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 898766282 的主题更新
信息提示
请填处理意见