找回密码
 注册
Simdroid-非首页
查看: 55|回复: 0

讨论 带有嵌套共享函数的微分方程组如何进行参数拟合

[复制链接]
发表于 2016-3-25 10:08:14 | 显示全部楼层 |阅读模式 来自 江苏苏州
我现在需要对一组数据进行模型的参数识别,模型如下:

其中,时程变量有:σ ε,相关数据参见附件,时间步为0.01s
参数变量有




因为这个模型中涉及了两5个中间变量,其中有3个可以用线性消掉,但还有z e,是微分方程
我之前尝试着用最小二乘法来拟合,但总有报错,代码如下:
  1. % % 使用如下参数得到的试验数据alpha=0.02;k0(E)=500;A0=1;n=1;beta=2;gamma=2;deltaA=0;detlaNu=0.01;detlaEta=0.01;

  2. function friction   
  3. clear all
  4. clc


  5. load x.mat;load dx.mat;
  6. Z=load('F.mat');
  7. Z=Z.F;
  8. tspan=0:0.01:20;
  9. lb = -[1 1 1 1 1 1 1 1 1]*1e8;
  10. ub = [1 1 1 1 1 1 1 1 1]*1e8;
  11. k0=[0 550 1.2 0.5 1 1 0 0.001 0.001];
  12. [k,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(@objfun,k0,lb,ub,[],tspan,Z);
  13. fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
  14. fprintf('\tk1 = %.9f \n',k(1))
  15. fprintf('\tk2 = %.9f \n',k(2))
  16. fprintf('\tk3 = %.9f \n',k(3))
  17. fprintf('\tk4 = %.9f \n',k(4))
  18. fprintf('\tk5 = %.9f \n',k(5))
  19. fprintf('\tk6 = %.9f \n',k(6))
  20. fprintf('\tk6 = %.9f \n',k(7))
  21. fprintf('\tk6 = %.9f \n',k(8))
  22. fprintf('\tk6 = %.9f \n',k(9))
  23. figure(1)
  24. [Ts Ys]=ode15i(@kinetics,tspan,0,0,[],k);

  25.         FF=k(1)*k(2)*x(Ts)+(1-k(1))*k(2)*Ys;
  26. plot(Ts,FF,'r')
  27. hold on
  28. plot(Ts,Z)
  29. function dy=kinetics(t,y,fy,k)
  30.         dy=fy-[(k(6)-k(7)*y(2)-pow(fabs(y(1)),k(4))*(k(5)+k(3)*signum(dx*y(1)))*(1.0+ k(8)*y(2)))*dx/(1+k(9)*y(2));
  31.         (1-k(1))*k(2)*dx*y(1)];
  32.        
  33.        
  34. function ff=objfun(k,tspan,Z)
  35.     [T Y]=ode15i(@kinetics,tspan,0,0,[],k);
  36.         FF=k(1)*k(2)*dx+(1-k(1))*k(2)*Y;
  37.     ff=Z-FF;
复制代码

大家帮我看看,这个代码的问题在哪里?或者有没有别的解决办法,可供参考?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-18 09:57 , Processed in 0.027402 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表