24小时热门版块排行榜    

CyRhmU.jpeg
查看: 462  |  回复: 4
当前主题已经存档。

只做陌生人

铁虫 (初入文坛)

[交流] 【求助】2阶常微分方程的初值or边值的求解问题

我现在要解一个2阶的常微分方程,非线性的
但是已知的条件是x=0.y’=0;x=1,y=1
想用matlab求解的
但是这样的初始已知条件的,可以用ode45函数或者bvp4c()这样的函数来解吗?
大家教教我吧
谢谢了

[ Last edited by luoqiquan on 2009-12-19 at 17:38 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

只做陌生人

铁虫 (初入文坛)

没有人解答呀。
不过
嗯,昨天晚上我又想了个法子
就是试差,假设一个x=0时y的值,用ode45来算,最后得到一个x=1时y的值,然后一对照,等不等于1,
本来是要做个循环的,但是用循环调了好多遍程序
没有通
就用这个笨办法了。
2楼2009-06-12 08:58:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

haixing2008

荣誉版主 (文坛精英)

友情顶贴,祝好运!
平平淡淡才是真!
3楼2009-06-13 08:38:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
q68(金币+2,VIP+0):有程序就不错! 6-28 11:40
先给你一个差分法的程序吧,你自己看看

function FDMperfect
% 此程序用差分法计算一般常微分方程二阶边值问题;
% 方程形式为:-D2u+p(x)*Du+q(x)*u=f(x);
%            α1*Du(a)+α2*u(a)=α;
%            β1*Du(b)+β2*u(b)=β;
% 其中p(x),q(x),f(x)属于C[a,b],α1^2+α2^2~=0,β1^2+β2^2~=0;

clear all
clc
format long

a=0;
b=1;
xspan=[a,b];
hpoint=[0.05,0.02];
alpha=[0 1 1];
beta=[1 1 3/2];
px=@(x)(-1+0*x);
qx=@(x)(0+0*x);
fx=@(x)(-x);
for m=1:length(hpoint)
    h=hpoint(m);
    [x,u]=FDM_Oh2(xspan,h,px,qx,fx,alpha,beta);
    [x2,u2]=FDM_Oh4(xspan,h,px,qx,fx,alpha,beta);
    u_true=x.^2/2-x+2-exp(-x);
    figure(m)
    plot(x(1:2:end),u(1:2:end),'b+',x2(1:2:end),u2(1:2:end),'ro',x,u_true,'k-')
    title(['h= ',num2str(h)])
    xlabel('x')   
    ylabel('u')
    legend('O(h^2) FDM Value','O(h^4) FDM Value','True Value','location','Northwest');
    legend boxoff
    fprintf('\n\th=%.2f,the Values of u:\n\n',h)
    fprintf('\tx\t\tO(h^2)FDM Value\t\tO(h^4)FDM Value\t\tTrue Value\n')
    for i=1:length(x)
        fprintf('\t%.2f\t%.10f\t\t%.10f\t\t%.10f\n',x(i),u(i),u2(i),u_true(i))
    end
end
   
function [x,u]=FDM_Oh2(xspan,h,px,qx,fx,alpha,beta)
x=xspan(1):h:xspan(2);
p=px(x);    q=qx(x);    f=fx(x);
n=length(x);
A=zeros(n,n);
B=zeros(n,1);
A(1,1:3)=[-3/2*alpha(1)+h*alpha(2),2*alpha(1),-alpha(1)/2];
B(1)=alpha(3)*h;
for i=2:n-1
    A(i,i-1:i+1)=[-(1+h*p(i)/2),2+q(i)*h^2,-(1-h*p(i)/2)];
    B(i)=f(i)*h^2;
end
A(n,n-2:n)=[beta(1)/2,-2*beta(1),3/2*beta(1)+h*beta(2)];
B(n)=beta(3)*h;
A=sparse(A);
x=x';
u=A\B;

function [x,u]=FDM_Oh4(xspan,h,px,qx,fx,alpha,beta)
x=xspan(1):h:xspan(2);
p=px(x);    q=qx(x);    f=fx(x);
n=length(x);
A=zeros(n,n);
B=zeros(n,1);
A(1,1:5)=[-25/12*alpha(1)+h*alpha(2),4*alpha(1),-3*alpha(1),4/3*alpha(1),-1/4*alpha(1)];
A(2,1:5)=[-35-25*h*p(1),104+48*h*p(1),-114-36*h*p(1),56+16*h*p(1),-11-3*h*p(1)];
B(1)=alpha(3)*h;
B(2)=12*h^2*f(1);
for i=3:n-2
    A(i,i-2:i+2)=[1+h*p(i),-16-8*h*p(i),30+12*h^2*q(i),-16+8*h*p(i),1-h*p(i)];
    B(i)=12*h^2*f(i);
end
A(n-1,n-4:n)=[-11+3*h*p(n-1),56-16*h*p(n-1),-114+36*h*p(n-1),104-48*h*p(n-1),-35+25*h*p(n-1)];
B(n-1)=12*h^2*f(n-1);
A(n,n-4:n)=[1/4*beta(1),-4/3*beta(1),3*beta(1),-4*beta(1),25/12*beta(1)+h*beta(2)];
B(n)=h*beta(3);
A=sparse(A);
x=x';
u=A\B;
4楼2009-06-28 10:43:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

luoqiquan

木虫 (著名写手)

斑内整理,帖子挪个位,谢谢!
5楼2009-12-19 17:39:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 只做陌生人 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见