注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

浅析微分方程的数值解法  

2011-07-11 14:43:25|  分类: M&M |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这实际上使用的是欧拉法(Euler's Method),这个公式很简单:
浅析微分方程的数值解法 - Castor - 趁年轻,多折腾~~
 其实质就是有限差分逼近。
因此,如果能够显式地知道该微分方程的导数,就能够很简单地用数值方法求得其解。
下面是一个简单的程序:
%=============================================
%针对常微分方程的简单数值计算函数
%参数
%dydx:导数
%n:分段数,理论上讲,分段数越多,计算越精确
%x0,xn:自变量取值范围,即[x0,xn]
%y0:函数在x=x0时的值
%x,y:输出参数,分别是自变量和应变量的值
function [x y]=spode(dydx,n,x0,xn,y0)
    dx=(xn-x0)/n;
    x=x0:dx:xn;
    y=x0;
    y(1)=y0;
    for i=1:n
        y(i+1)=y(i)+dydx(x(i))*dx;
    end
end
%=============================================
现在看看一个简单的问题,例如我们知道一个简单的微分方程:
浅析微分方程的数值解法 - Castor - 趁年轻,多折腾~~
 很显然这个微分方程的解是y=x^2-2x-3,我们用上面的函数计算一下这个微分方程:
>> format compact
>> df=@(x) 2*x-2
df = 
    @(x)2*x-2
>> [x y]=spode(df,100,-1,3,0);
>> plot(x,y,'r');
>> hold on;
>> plot(x,x.*x-2*x-3,'g');
绘制图形如下:
浅析微分方程的数值解法 - Castor - 趁年轻,多折腾~~
红色的是数值计算的结果,而绿色的是理论解,可见两者图形重合得比较好。
事实上像MATLAB内置的ode45、ode23等都是采用了类似的原理(不一定是使用Euler法,也不一定是定步长),不过使用的方法要更高级,控制的选项也很多。

 
  评论这张
 
阅读(701)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016