24小时热门版块排行榜    

查看: 744  |  回复: 15
当前主题已经存档。

embrace5758

[交流] 【求助】同时采用pedpe()和ode()时的嵌套问题

大虾们好!
    本人是做生物化工的,对数值求解方面是彻彻底底的新手。因论文需要,最近建了一个数学模型,主体部分含一个偏微分方程和一个常微分方程。偏微分方程的边界条件中含有常微分方程的因变量,常微分方程中也含偏微分方程的因变量。现在学会的只是用pdepe和ode来分别求解这两个方程,却不知道应该如何嵌套在一起。所以运行时总有逻辑错误...
我的程序如下:
function Cha6demo1
m=0;
y0=0;
x=linspace(0,0.00037,60);
t=linspace(0,129600,60);
sol=pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
u=sol(:,:,1);
surf(x,t,u)
title('numerical solution computed with 20 mesh points.')
xlabel('Distance x')
ylabel('Time t')
figure
plot(x,u(end,: )),title('solution at t=129600')
xlabel('Distance x'),ylabel('u(x,129600)')
plot(t,v,'k-'),xlabel('t'),ylabel('cpl')
%--------------------------------------------------------
function[c,f,s]=pdex1pdex(x,t,u,DuDx)
c=(1+5.8*(0.2+u)^(-2))*10000000000;f=DuDx;s=2*x^(-1)*DuDx;
%----------------------------------------------------------
function u0=pdex1ic(x)
u0=0;
%----------------------------------------------------------
function [pl,ql,pr,qr]=pdex1bc(xl,ul,xr,ur,t)
y0=0;
t=linspace(0,129600,60);
[t,v]=ode23(@ODEfun1,t,y0);
pl=0;ql=1;pr=-5*10^(-6)*(v-ur)*1.6*10^10;qr=1;
%----------------------------------------------------
function DvDt=ODEfun1(t,v,ur)
DvDt=0.004*(ur-v)+2.7/(2.8/((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)+1+((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)/0.05)*(1-1.815*10^(-3)*v);

运行出错:
??? Input argument "ur" is undefined.

Error in ==> Cha6demo2>ODEfun1 at 30
DvDt=0.004*(ur-v)+2.7/(2.8/((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)+1+((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)/0.05)*(1-1.815*10^(-3)*v);

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ==> ode23 at 172
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in ==> Cha6demo2>pdex1bc at 26
[t,v]=ode23(@ODEfun1,t,y0);

Error in ==> pdepe at 247
[pL,qL,pR,qR] = feval(bc,xmesh(1),y0(:,1),xmesh(nx),y0(:,nx),t(1),varargin{:});

Error in ==> Cha6demo2 at 6


程序挺弱吧,新手一只,见笑了!
若需要看原方程,已粘于附件...
望大虾指点应该怎样改呢?
不胜感激!

[ Last edited by embrace5758 on 2009-3-30 at 10:44 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

JinZhang2093

新虫 (初入文坛)

★ ★
kuhailangyu(金币+2,VIP+0):多谢参与! 3-31 21:14
ur没定义吧
[t,v]=ode23(@ODEfun1,t,y0,[],ur);

function DvDt=ODEfun1(t,v,flag,ur)
好像这样
2楼2009-03-31 21:09:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

embrace5758

我试过了楼上的建议,还是没用哦~
But thank you all the same
3楼2009-04-01 10:43:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

windhair

铜虫 (小有名气)

★ ★
sunxiao(金币+2,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-2 05:00
ur 做为参数计算ODE的时候要在调用程序中指定的,
也就是
CODE:
[t,v]=ode23(@(t,v) ODEfun1(t,v,ur),t,y0);

这样就好了。
4楼2009-04-02 03:35:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

windhair

铜虫 (小有名气)


sunxiao(金币+1,VIP+0):建议不错 4-2 05:00
另:建议发源程度用 论坛的 code 格式发使用方法是

[c ode]
your code here
[/c ode]

** 去掉c 和 o 之间的空间
5楼2009-04-02 03:41:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

embrace5758

谢谢windhair的解答。
我按您的方法试了,结果没有出现“ur undefinded”的错误,但运行过程好像出现了更大的问题... 似乎有部分程序没运行到?
另外,可能是我对matlab的了解还太浅,我不是很明白ode函数还可写成
[t,v]=ode23(@(t,v) ODEfun1(t,v,ur),...)的形式,一般书上都是[t,v]=ode23(@ODEfun1,...)形式的呀,即没有在句柄函数名前加个输出变量(t,v)和空格之类的吧...
望指教
6楼2009-04-02 12:11:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woshilsh

荣誉版主 (职业作家)

优秀版主

好像那可以的啊
[center][url=http://www.91cool.net/][img]http://id.91cool.net/sign/?name=小木虫印&say=各位版主辛苦了![/img][/url][/center]
7楼2009-04-02 13:24:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

windhair

铜虫 (小有名气)


kuhailangyu(金币+1,VIP+0):xie xie can yu! 4-9 16:32
引用回帖:
Originally posted by embrace5758 at 2009-4-2 12:11:
谢谢windhair的解答。
我按您的方法试了,结果没有出现“ur undefinded”的错误,但运行过程好像出现了更大的问题... 似乎有部分程序没运行到?
另外,可能是我对matlab的了解还太浅,我不是很明白ode函数还可写 ...

关于这个写法你可参考一下matlab 帮助里的 function handles里的说明 看看
用这个的目的主要是把参数ur传给方程。至于计算问题,这个不好说,得根据你数学模型来调了
8楼2009-04-02 16:49:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

embrace5758

谢谢windhair的解答,我对程序稍稍修改了,把“ur undefined”的问题解决掉了(在ode45()函数中将pdepe()解得的ur直接传递给子函数)。这几天一直困扰的新问题是pdepe()函数所解得的偏微分方程的解u却是一个全零的矩阵,这是不合乎道理的。一直在寻bug,却至今都找不出来,问题究竟出在哪呢?

附:修改后的程序

function Cha6demo2
clear all; clc
m=0;
y0=0;
x=linspace(0,0.00037,60);
t=linspace(0,129600,60);
sol=pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
u=sol(:,:,1);
surf(x,t,u)
title('numerical solution computed with 20 mesh points.')
xlabel('Distance x')
ylabel('Time t')
figure
plot(x,u(end,: )),title('solution at t=129600')
xlabel('Distance x'),ylabel('u(x,129600)')
%--------------------------------------------------------
function[c,f,s]=pdex1pdex(x,t,u,DuDx)
c=(1+5.8/(0.2+u)^2)*10000000000;f=DuDx;s=(2/x)*DuDx;
%----------------------------------------------------------
function u0=pdex1ic(x)
u0=0;
%----------------------------------------------------------
function [pl,ql,pr,qr]=pdex1bc(xl,ul,xr,ur,t,v)
y0=0;
t=linspace(0,129600,60);
[t,v]=ode45(@ODEfun1,t,y0,[],ur);
pl=0;ql=1;pr=-5*10^(-6)*(v-ur)*1.6*10^10;qr=1; %pde方程的边界条件pr中含有ode方程的解向量v
%----------------------------------------------------
function DvDt=ODEfun1(t,v,ur)
DvDt=0.004*(ur-v)+2.7/(2.8/((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)+1+((-1)*10^(-14)*t^3+3*10^(-9)*t^2-0.0003*t+10.444)/0.05)*(1-1.815*10^(-3)*v);
%ode方程中含有pde解向量在右边界上的解ur


Thank you for your time!

[ Last edited by embrace5758 on 2009-4-6 at 20:01 ]
9楼2009-04-06 19:59:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

embrace5758

一般在哪种出错情况下会出现全零矩阵解呢? 有人遇到过吗?
10楼2009-04-09 14:18:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 embrace5758 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +10 yufeiwaner 2026-08-09 11/550 2026-08-10 18:47 by yufeiwaner
[基金申请] 关于代码变化问题,想知道的进来 +17 且听虎啸 2026-08-07 24/1200 2026-08-10 18:35 by zhangduo2008
[基金申请] 为什么网上很多人说本周 12号出结果 +3 瞬息宇宙 2026-08-10 3/150 2026-08-10 18:27 by Tide man
[基金申请] 静等基金结果 +5 gjjjzhong 2026-08-10 16/800 2026-08-10 17:19 by Tide man
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +14 Lanmanbaby 2026-08-09 22/1100 2026-08-10 14:57 by wwncly
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +11 archvillain 2026-08-04 13/650 2026-08-10 14:41 by seekfind
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 2026国自然放榜时间 +9 布布和一二 2026-08-08 9/450 2026-08-10 11:22 by xxxx2020
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 化学口download_prp&fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
信息提示
请填处理意见