如何在用射击方法求解BVP时实现猜测校正算法?

时间:2015-05-23 07:44:40

标签: matlab differential-equations

我有一个边界值问题(如下图所示),应该用拍摄方法解决。请注意,我在处理这个问题时正在使用MATLAB。我非常确定我已经将微分方程从二阶微分方程重写为一阶微分方程组,并且当x = 0时使用正割方法正确地近似该微分方程导数的缺失值,但你可以验证这一点,以便你确定。

enter image description here

我已经用拍摄方法解决了这个BVP,我目前针对这个问题的代码如下:

clear, clf;
global I;
I = 0.1; %Strength of the electricity on the wire
L = 0.400; %The length of the wire
xStart = 0; %Start point
xSlut = L/2; %End point
yStart = 10; %Function value when x=0
err = 5e-10; %Error tolerance in calculations
g1 = 128; %First guess on y'(x) when x=0
g2 = 89; %Second guess on y'(x) when x=0
state = 0;
X = [];
Y = [];

[X,Y] = ode45(@calcWithSec,[xStart xSlut],[yStart g1]');
F1 = Y(end,2);
iter = 0;
h = 1;
currentY = Y;

while abs(h)>err && iter<100
    [X,Y] = ode45(@calcWithSec,[xStart xSlut],[yStart g2]');
    currentY = Y;
    F2 = Y(end,2);
    Fp = (g2-g1)/(F2-F1);
    h = -F2*Fp;
    g1 = g2;
    g2 = g2 + h;
    F1 = F2;
    iter = iter + 1;
end

if iter == 100
    disp('No convergence')
else
    plot(X,Y(:,1))
end

calcWithSec:

function fp = calcWithSec(x,y)    
    alpha = 0.01; %Constant
    beta = 10^13; %Constant
    global I;

    fp = [y(2) alpha*(y(1)^4)-beta*(I^2)*10^(-8)*(1+y(1)/32.5)]';
end

我对这个程序的问题在于,对于微分方程中的不同给定的I,我得到的奇怪曲线在物理意义上没有任何意义。例如,唯一的&#34;好&#34;我得到的图是当我= 0.1时。这些微分方程的图如下:

enter image description here

但是当我设置I = 0.2时,我会得到一个如下图:

enter image description here

同样,在物理意义上并根据给定的分配,这不应该发生,因为它越来越热,你越接近所提到的电线的中间。我希望能够计算0.1到20之间的所有I,其中I是电力的强度。

我有一个理论认为它与我的猜测值有关,因此,我的问题是关于是否有可能实施一种强制程序调整猜测值的算法,这样我就可以获得一个图形& #34;正确&#34;在物理意义上?或者是不可能实现这一目标?如果是这样,那么解释原因。

我现在连续几天都在努力完成这项任务,所以我现在可以通过这项任务得到的所有帮助对我来说都是值得的。

先谢谢大家帮我解决这个问题!

0 个答案:

没有答案