[关闭]
@su 2014-06-01T16:14:36.000000Z 字数 1482 阅读 4595

分数阶常微分方程 微分变换法

微分方程 matlab

分数阶常微分方程数值解法-微分变换法

信计12        苏泽明
学号:2110902035

一、 题目

考虑方程

Dμ=y2+1,m1<μm,0<x<1
初始条件为:
y(k)(0)=0,k=0,,m1

二、 分析

对方程进行微分变换,获得的结果如下:

Y(k+μα)=Γ(1+kα)[k1=0kY(k1)Y(kk1)+δ(k)]Γ(1+μ+kα)
对初始条件进行微分变换,得到:
Y(k)=0,k=0,1,,μα1
现在可以利用由黎曼-刘维尔公式定义的分数阶微分扩展连续函数 f(x) 的分数幂级数上的形式:
f(x)=k=0F(K)(xx0)kα
其中 F(k) 是微分变换下相应的系数,所以只需要计算出相应的 F(k) 便可以利用以上的公式求出函数在某点处的近似值,编写程序代码如下计算

三、代码

我们取N=30,α=2,μ=0.5&1.5,t=0.0,0.1,,1.0
Matlab 代码如下:

  1. function [] = main(N,alpha,miu )
  2. % 分数阶常微分方程数值方法之微分变换法 方程为 D(u)(y(x))=y^2 +1
  3. % 输入的参数为 N,alpha miu 三种其中 N 大于 0的整数,alpha 为大于0的整数,miu 为大于零的小数;
  4. %% 首先对数据进行初始化;startp 代表微分方程的定义域的左端,endp 代表微分方程定义域的右端点;ydao 代表 存储 F(k)的数值;N 代表级数的个数;
  5. [startp,endp] = deal(0,1);
  6. ydao = zeros(N,1);
  7. xarr = startp:0.1:endp;
  8. miualpha= miu*alpha;
  9. %% 通过循环计算函数的导数的值并存入向量中;
  10. for t = miualpha:1:N+3;
  11. k = t-miualpha;
  12. upgamma1 = gamma(1+k/alpha);
  13. upright=0;
  14. if k==0;
  15. upright = upright +1;
  16. end
  17. for k1=0:k
  18. upright = upright + ydao(k1+1)*ydao(k-k1+1);
  19. end
  20. ydao(t+1)=upgamma1*upright/gamma(1+miu+k/alpha);
  21. end
  22. %disp(ydao);
  23. %% 通过循环计算函数在定义域的近似数值;
  24. leng = length(xarr);
  25. y=zeros(leng,1);
  26. for m=1:1:leng;
  27. for k = 1:N+1;
  28. y(m) = y(m)+ydao(k)*(xarr(m)-startp)^((k-1)/alpha);
  29. end
  30. end
  31. disp(y);
  32. end

四、结果

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注