matlab变参量微分方程参数识别【DOC精选】.doc

matlab变参量微分方程参数识别【DOC精选】.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
matlab变参量微分方程参数识别【DOC精选】

1 变参数微分方程数值求解 例子 function dydt=fun(t,y,u,v) r=u+2;s=v-2; dydt=[r+y(2); s*y(1)-2*s*y(2)]; u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; y0=[0 2]; yy=y0; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); y0=y(end,: ); yy=[yy;y0]; end plot(tspan,yy,-o) 2.1 匿名函数法 f=@(t,y,u,v) [u+2+y(2); (v-2)*y(1)-2*(v-2)*y(2)] u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; y0=[0 2]; yy=y0; for i=1:length(tspan)-1 [t,y]=ode45(f,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); y0=y(end,: ); yy=[yy;y0]; end plot(tspan,yy,-o) 2.2 修改加上时间tt(显示所有计算值) clear u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; y0=[0 2]; tt =[];yy=[]; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); y0=y(end,: ); tt=[tt;t]; yy=[yy;y]; end plot(tt,yy);%所有的计算数值。 2.3 同过差值可以调节精度。如果u,v随着t是时刻变化的,但是通过测试手段只能测得某一时刻的u,v. clear global yy t1=0:0.1:4;%如果u,v随着t是时刻变化的,可以通过此数值来调节精度 tspan=0:1:4; u=[1;5;15;20;25]; u1=spline(tspan,u,t1); v=[6;12;18;24;30];v1= spline(tspan,v,t1); y0=[0 2]; yy=y0; for i=1:length(t1)-1 [t,y]=ode45(@fun,[t1(i),t1(i+1)],y0,[],u1(i),v1(i)); y0=y(end,: ); yy=[yy;y0]; end plot(t1,yy) 2 适用matlab对一个常微分方程进行参数回归 问题如下: 已知实验数据x,y,并且x,y的关系满足以下常微分方程 Dy/dx=-k*(y-y0)*y^2 其中 k是需要回归的参数,y0是一个常数,通常等于y向量中的最后一个数值。要求: 1.通过lsqcurvefit或者lsqnonlin回归出系数k 2.画出模型预测值和实验值的对比图,模型预测值可以通过得到常微分方程数值解后三次样条spline插值得到。我已经写好的程序如下,里面有错误,我自己找不出来,请高手帮帮忙,谢谢啊 可以加我的QQ交流======================================= function odetest clc;clear; global Je J0 data=xlsread(flux.xls); xdata=data(:,1);ydata=data(:,2); beta0=0.1;Je=ydata(end);J0=ydata(1); options=optimset(TolFun,1e-20,TolX,1e-20,MaxFunEvals,100,Algorithm,trust-region-reflective); beta=lsqcurvefit(@cakefun,beta0,xdata,ydata,[],[],options); Jc=cakefun(beta,xdata); plot(xdata,ydata,o,xdata,Jc); function y=cakefun(beta,x) global J0 tspan=[0 max(x)]; [m,n]=size(x); [tt yy] = ode23s(@modeleqs,tspan,J0,[],beta); yc=spline(tt,yy,x); y=yc; function dydt = modeleqs(t,y,beta) global Je dydt =-beta*(y-Je)*y.^2; =====================

文档评论(0)

taotao0b + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档