人生的意义就是思考其意义分享 http://blog.sciencenet.cn/u/qianlivan 天体物理工作者,家乡云南昆明。

博文

数值逼近求解线性常微分方程

已有 6411 次阅读 2010-4-26 10:51 |个人分类:总结|系统分类:科研笔记| 编程, 数值计算

线性微分方程的求解方法很多,直接积分可以得到很高的精度。但是尝试一下用数值逼近的方法也是很有意思的。

下面以用Chebyshev多项式展开求解方程(x=[0,1]的一段)
dy/dx=y
y(0)=1
为例说明这个方法。

n阶Chebyshev定义为T(n,x)=cos(n arccos(x))。假设函数y(x)可以近似为
y(x)=sum^{n}_{i=1} a_i T(i,x)
那么,取需要求解的区间内的n-1个点,加上初始条件,方程可以表示为n元线性方程组,用线性代数的方法可以求解展开系数a_i。

下面是实现这个方法的一段代码

function trychebyshev2(n,t0,t1)% use first n Chebyshev polinomial to approximate
                               % t0:lower boundary; t1: upper boundary
A=zeros(n,n);
h=t0:(t1-t0)/n:t1;
t=h(2:end);
for j=1:n-1
    for i=1:n
    A(j,i)=chebT(i,t(j))-chebQ(i,t(j)); % the differential equation is y'=y, y(0)=1
    end
end
for i=1:n
    A(n,i)=chebT(i,0);
end
B=zeros(n,1);
B(n)=1;
x=linsolve(A,B);
z=0:0.05:1;
f1=0;
for i=1:n
    f1=f1+x(i)*chebT(i,z);
end
f2=exp(z);
plot(z,f1,'r',z,f2,'b');

function y=chebT(n,x)
y=cos(n.*acos(x));

function y=chebQ(n,x)
y=sin(n.*acos(x)).*n./sqrt(1-x.^2);



用5阶Chebyshev多项式时误差可以达到百分之几。

用10阶Chebyshev多项式近误差就小得多了。

不过,可以看到,在近似区间之外,近似函数和真实函数就完全不同了。




https://blog.sciencenet.cn/blog-117333-316214.html

上一篇:一篇地质文章的翻译
下一篇:近邻星系博览(一)
收藏 IP: .*| 热度|

2 吕海涛 beyskxw

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-8 02:39

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部