| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4074 人关注过本帖
标题:脉冲微分方程的数值模拟
只看楼主 加入收藏
李玉红
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-7-14
收藏
 问题点数:0 回复次数:0 
脉冲微分方程的数值模拟
function [y1,y2,y3]=OdePP()    %画函数图像
PeriodT=0.5;p=2; %脉冲周期、脉冲量
NumOfStep=50;NumOfPer=4; %NumOfStep是每半个周期取多少点画图,NumOfPer 是画多少个周期的相图
Init_y1=1*10^6;Init_y2=1*10^3;Init_y3=0;Init_t=0;  %初值和初始时刻
NStep1=fix(NumOfStep*1);
NStep2=NumOfStep-NStep1;
y1=zeros((NumOfStep+2)*NumOfPer,1);%存放第一维数据的数组
y2=zeros((NumOfStep+2)*NumOfPer,1);%存放第二维数据的数组
y3=zeros((NumOfStep+2)*NumOfPer,1);%存放第三维数据的数组
t=zeros((NumOfStep+2)*NumOfPer,1);%存放时间值数据的数组
ppp=odeset('RelTol',1e-1,'AbsTol',1e-1);  %控制误差的参数
for i=1:NumOfPer     %循环一次画一个周期的轨线
     if i==1
       y1(1)=Init-y1;y2(1)=Init-y2;y3(1)=Init-y3 ;
     else   
         %下面3个语句确定在T时刻的脉冲值
       Init-y1=y1*((i-1)*(NumOfStep+2));
       Init-y2=y2*((i-1)*(NumOfStep+2));  
       Init-y3=y3*((i-1)*(NumOfStep+2))*(1-p);   
       y1*((i-1)*(NumOfStep+2)+1)=Init-y1;
       y2*((i-1)*(NumOfStep+2)+1)=Init-y2;
       y3*((i-1)*(NumOfStep+2)+1)=Init-y3;
end
     t((i-1)*(NumOfStep+2)+1)=(i-1)*PeriodT+Init-t;
     sol=ode45(@OdePP,[(i-1)*PeriodT+Init-t,(i-1+1)*PeriodT+Init-t],[Init-y1,Init-y2,Init-y3],ppp);
     j=linspace(PeriodT*(i-1)+Init-t,(i-1+1)*PeriodT+Init-t,NStep1);
     y1(((i-1)*(NumOfStep+2)+2):((i-1)*(NumOfStep+2)+1+NStep1))=deval(sol,j,1);
     y2(((i-1)*(NumOfStep+2)+2):((i-1)*(NumOfStep+2)+1+NStep1))=deval(sol,j,2);
     y3(((i-1)*(NumOfStep+2)+2):((i-1)*(NumOfStep+2)+1+NStep1))=deval(sol,j,3);
     t(((i-1)*(NumOfStep+2)+2):((i-1)*(NumOfStep+2)+1+NStep1))=j;
        %以上第一次脉冲完成   
end
save TrajData  %此语句用于保存所有内存数据
figure(1);     %此语句绘出相图
  plot3(y1,y2,y3,'k');
   box on   xlabel('y-1');ylabel('y-2');zlabel('y-3');
   hgsave('Traj');%此语句用于保存绘出的图
  figure(2);
   plot(t,y1,'k');
   xlabel('t');ylabel('y-1') ;
    hgsave('tseries-y1');%绘制并保存第一维的时间序列图
 function dydt=OdePP(t,y)  %决定方程的函数
r=1; k=3;a=3;b=4; d=0.2;p=0.4 ; q=0.45; e=0.2;  %系统参数
dy = zeros(3,1);
dy(1) =r*y(1)*(1-y(1)/k)-a*y(1)*y(2);
dy(2) =y(2)*((b-1)*a*y(1)-d-p*y(3));
dy(3) =y(3)*(q*y(2)-e);
   请问谁做过脉冲微分方程的数值模拟?以上是我根据网上的资源编的脉冲程序,不过有问题运行不出来,请有经验的高手帮我看看,这里先谢谢啦!如果成功的话,有重酬!

[此贴子已经被作者于2018-7-14 17:41编辑过]

搜索更多相关主题的帖子: 脉冲 周期 存放 数组 语句 
2018-07-14 17:39
快速回复:脉冲微分方程的数值模拟
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016551 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved