您当前的位置:matlab资源网文章中心资料 → 文章内容

bvp4c-shockbvp

作者:mdeng1985  来源:转载http://mdeng1985.blog.163.com/blog/static/33299179200832341750555/  发布时间:2008-5-12 9:23:38

方程:e*y'' + x*y' = -e*pi^2*cos(pi*x) - pi*x*sin(pi*x)   0<e<<1时

边界条件:y(-1) = -2 and y(1) = 0

开启vectorized

微分方程

function dydx=ode(x,y,e)
%开启vectorized,能够减少运行时间
%和没有开启相比,把相应的y(m)变成y(m,:),*和/换成点乘点即可
pix=pi*x
dydx=[y(2,:) 
    -x.*y(2,:)/e+pi^2*cos(pix)-pix.*sin(pix)/e];

边界条件

function res=bcfun(ya,yb,e)
res=[ya(1)+2
    yb(1)];

微分方程的雅克比矩阵
% [df1/dy(1)  df1/dy(2)
%  df2/dy(1)  df2/dy(2)]
function JJ=shockJac(x,y,e) %e为已知的传递参数
JJ=[0 1
    0 -x/e];

边界条件的雅克比矩阵,两个矩阵
% dBC/dya
% dBC/dyb
function [dBCdya,dBCdyb]=shockBCjac(ya,yb,e)
dBCdya=[1 0
    0 0];
dBCdyb=[0 0
    1 0];

主程序

options = bvpset('FJacobian',@shockJac,'BCJacobian',@shockBCJac,'Vectorized','on');
sol= bvpinit([-1 -0.5 0 0.5 1],[1 0]);
e=1e-4
sol = bvp4c(@ode,@bcfun,sol,options,e);
figure;
plot(sol.x,sol.y(1,:));
axis([-1 1 -2.2 2.2]);
title(['There is a shock at x = 0 when \epsilon =' sprintf('%.e',e) '.']);
xlabel('x');
ylabel('solution y');

自己编写的源文件

function example
options = bvpset('FJacobian',@shockJac,'BCJacobian',@shockBCJac,'Vectorized','on');
sol= bvpinit([-1 -0.5 0 0.5 1],[1 0]);
e=1e-4
sol = bvp4c(@ode,@bcfun,sol,options,e);
figure;
plot(sol.x,sol.y(1,:));
axis([-1 1 -2.2 2.2]);
title(['There is a shock at x = 0 when \epsilon =' sprintf('%.e',e) '.']);
xlabel('x');
ylabel('solution y');
%微分方程
function dydx=ode(x,y,e)
%开启vectorized
%和没有开启相比,把相应的y(m)变成y(m,:),*和/换成点乘点即可
pix=pi*x
dydx=[y(2,:) 
    -x.*y(2,:)/e+pi^2*cos(pix)-pix.*sin(pix)/e];
   
%边界条件
function res=bcfun(ya,yb,e)
res=[ya(1)+2
    yb(1)];

%微分方程的雅克比矩阵
% [df1/dy(1)  df1/dy(2)
%  df2/dy(1)  df2/dy(2)]
function JJ=shockJac(x,y,e)
JJ=[0 1
    0 -x/e];

%边界条件的雅克比矩阵,两个矩阵
% dBC/dya
% dBC/dyb
function [dBCdya,dBCdyb]=shockBCJac(ya,yb,e)
dBCdya=[1 0
    0 0];
dBCdyb=[0 0
    1 0];

matlab提供的源文件:MATLAB6p5\toolbox\matlab\demos\shockbvp.m

文章评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -