我怎么能让bvp4c解决方案更稳定?
29日视图(30天)
显示旧的评论
你好,社区,
我有一个问题的稳定BVP4C-solution当导数变得很小。方程系统描述了四个组件的摩尔流沿着膜。每个物种的梯度沿膜的产品各自的渗透率Q和高压侧之间的分压差(滞留物)和低压侧(渗透)。出现问题时快速扩散的分压组件双方或多或少是相等的。
我解决边值问题的形式
y ' = dy / dx = f (y,哟)
摩尔流的y是一个向量的4种滞留物膜。在x = 0,我必须解决一个隐式方程系统归来的一组参数
g(哟,归来)= 0
并计算导数
y ' (x = 0) = f(哟,归来)
你是y (x = 0),一个未知的参数(我的左边界值——滞留物摩尔流末尾的膜)符合bvp4c-solver。我知道正确的边值在x = 1饲料进入膜滞留物一侧。
ODE非常简单:
函数就要= ydot (x, y,哟,n)
Q = [2.3369 e-08;1.17095 e-06;3.81087 e-08;2.36619 e-07] * n;
公关= 1 e6;
页= 1 e5;
如果x = = 0
选择= optimset (“显示”,“没有”);
归来= fsolve(@(归来)PermOmega(归来),Q /笔(Q)选项);
就要=问:* (y /笔(y) * pR-yPo *页);
其他的
就要=问:* (y /笔(y) *公关- (y-yo) / sum (y-yo) *页);
结束
函数g = PermOmega(归来)
%渗透成分x = 0
g = yPo-Q。*(哟/笔(哟)* pR-yPo *页)/笔(问:*(哟/笔(哟)* pR-yPo *页));
结束
结束
我最初想的解决方案之间的直线筛孔尺寸的两个边界值10。的问题是在第二行代码,渗透率的增加膜的数量n, n = 1的解决方案是稳定的(膜),但当我分压增加膜的数量变得相似,ODE变得不稳定(见图片)
我能做些什么来提高稳定性当梯度膜的小?
到目前为止我已经提供了雅可比矩阵(使用隐函数微分在x = 0),这使它速度变快,但不会更准确。我已经改变了相对和绝对误差BVP4C-solver的公差。我有试过BVP5C。我归结我原来ODE-system与三个阶段每个7变量(在滞留物和渗透压力加上滞留物温度)基本系统只有4变量。
我需要稳定的原因是,我想要使用的解决方案在一个FMINCON-optimizer有时会选择参数会导致不稳定的解决方案。金宝搏官方网站
什么好主意吗?
0评论
接受的答案
Torsten
2018年2月9日
编辑:Torsten
2018年2月9日
谢谢你的详细的解释这个问题。
我用下列问题公式化COMSOL多重物理量,它没有问题:
解决变量:
y,哟
方程:
就要=问:* (y /笔(y) *公关- (y-yo) / sum (y-yo) *页)
dyodx = 0
初始条件:
y = yo0 + x * (yalpha-yo0)
哟= yo0
边界条件:
哟(x = 0) = y
y (x = 1) = yalpha
请注意,我解出8未知函数,不仅4。
注意进一步ydot只在内部网格点,称为x = 0。因此除零不会发生。
最好的祝愿
Torsten。
0评论
更多的答案(6)
JK
2018年2月7日
1评论
Torsten
2018年2月8日
试一试
%初始条件在x = 1(滞留物入口)
yalpha = (0.3; 0.25; 0.01; 0.01);
%估计滞留物值的膜(x = 0)
yo0 = (0.95; 0.60; 0.92; 0.70)。* yalpha;
%边值解算器
bcfun = @公元前(是的,yb,哟)(是的,yb,哟,n, yalpha);
initguess = @ (x) yo0 + x * (yalpha-yo0);
odefun = @ (x, y,哟)ydot (x, y,哟,n);
solinit = bvpinit (linspace (0, 1, 11), initguess, yo0);
选择= bvpset (“统计数据”,“上”,“RelTol”1 e - 3);
索尔= bvp4c (odefun bcfun、solinit选项);
函数就要= ydot (x, y,哟,n)
Q = [2.3369 e-08;1.17095 e-06;3.81087 e-08;2.36619 e-07] * n;
公关= 1 e6;
页= 1 e5;
就要=问:* (y /笔(y) *公关- (y-yo) / sum (y-yo) *页);
结束
函数res = bc(是的,yb,哟,n, yalpha)
Q = [2.3369 e-08;1.17095 e-06;3.81087 e-08;2.36619 e-07] * n;
公关= 1 e6;
页= 1 e5;
选择= optimset (“显示”,“没有”);
归来= fsolve(@(归来)PermOmega(归来),Q /笔(Q)选项);
res = [ya-yPo; yb-yalpha];
函数g = PermOmega(归来)
%渗透成分x = 0
g = yPo-Q。*(哟/笔(哟)* pR-yPo *页)/笔(问:*(哟/笔(哟)* pR-yPo *页));
结束
结束