matlab序列时移公式,求解Matlab微分方程组中的时移问题!!!

!using["XSLSF"]; //使用命名空间XSLSF

//数组xArray存放x的值;ti为当前有效值的个数;tmax为ti对应的时间;tmin为起始时间。

xt(t:k:xArray,ti,tmax,tmin)=

{

k=(t-tmin)/(tmax-tmin)*ti-1,

if[k<0, k=0], if[k>=ti, k=ti-1],

xArray.getrai[k]

};

//数组yArray存放y的值;ti为当前有效值的个数;tmax为ti对应的时间;tmin为起始时间。

yt(t:k:yArray,ti,tmax,tmin)=

{

if{tmax==tmin,return[yArray.getrai(0)]},

k=(t-tmin)/(tmax-tmin)*ti-1,

if[k<0, k=0], if[k>=ti, k=ti-1],

yArray.getrai[k]

};

//函数定义,用于计算微分方程组中各方程右端函数值,连分式法对微分方程组积分一步函数pbs1将调用该函数f。

//t为自变量,x,y为函数值,dx,dy为右端函数值(即微分方程的值)。

f(t,x,y,dx,dy)=

{

dx=-x*exp(1-t)+0.8*yt(t-0.1),

dy=x-y^3

};

//用连分式法对微分方程组进行积分,获得理论值。

//t1,t2为积分的起点和终点。

//h,s为自动变量。

//模块变量:hf为函数f的句柄,要预先获得该句柄;Array为工作数组;step为积分步长;eps为积分精度。

积分(t1,t2:h,s:hf,Array,step,eps)=

{

s=ceil[(t2-t1)/step], //计算积分步数

h=(t2-t1)/s, //重新计算积分步长

{ pbs1[hf,t1,Array,h,eps], //对微分方程组积分一步

t1=t1+h //积分步长增加

}.until[abs(t1-t2)

};

数据(:i,h,t1,t2,x,y,static,free:hf,Array,step,eps,max,xArray,yArray,ti,tmax,tmin)= //微分方程组积分获得数据

{

if[free,delete(Array),delete(xArray),delete(yArray),return(0)],

hf=HFor("f"), //模块变量hf保存函数f的句柄,预先用函数HFor获得该句柄

step=0.01,eps=1e-6, //积分步长step要合适,积分精度eps越小越精确,用于对微分方程组积分一步函数pbs1

Array=new[rtoi(real_s),rtoi(2*15)], //申请工作数组

max=1001,

xArray=new[rtoi(real_s),rtoi(max)], //申请工作数组

yArray=new[rtoi(real_s),rtoi(max)], //申请工作数组

Array.setra(0,0,2), //设置积分初值,通过模块变量Array传递,Array是一个数组

xArray.setra(0,0), //设置xArray的第一个值

yArray.setra(0,2), //设置yArray的第一个值

ti=1, h=step*2, tmin=0, tmax=0, t1=0, t2=h,

i=1,(i

积分(&t1,t2), //从t1积分到t2

Array.getra(0,&x,&y), //从数组Array获得t2时的积分值

xArray.setra(i,x), yArray.setra(i,y), //将积分值保存到数组

ti=i+1, tmax=t1, t2=t2+h,

i++

}

};

//绘制函数图形

(::hxt,hyt)= hxt=HFor("xt"), hyt=HFor("yt"); //获得函数xt和yt的句柄,保存在模块变量中

gleDrawScene[HFor("Scene")],stop(); //设置场景绘制函数后退出

Scene(::hxt,hyt,tmax,tmin)=

{

glClear[], //清除屏幕以及深度缓存

glLoadIdentity[], //重置视图

glTranslated[0,0,-20], //移动坐标,向屏幕里移动10个单元

glColor3d[0,0,1], //设置颜色

fgPlot[hxt,tmin,tmax,FG_Y,0,10], //绘制一元函数图象

glColor3d[1,0,0], //设置颜色

fgPlot[hyt,tmin,tmax,FG_Y,0,10] //绘制一元函数图象

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值