matlab微分方程

matlab微分方程,matlab,math,polynomial-math,differential-equations,Matlab,Math,Polynomial Math,Differential Equations,我有一个我无法解的微分方程 我们对方程了解如下: Dr是一个三级多项式 D'1=D'2=0 D2=2D1 u1=450 u'2=-K*u2 Te 其中K和Te是常数 我想用一个矩阵来近似这个问题,我设法解决了 相似方程:u1和u'2的极限条件相同。 在这个方程上,我用中心差近似u'和u,并在r=1到r=2之间使用有限差分法。然后,我将结果放入matlab中的矩阵a和matlab中的向量Y中的极限条件,并运行u=a\Y以获得u值的变化情况。以下是我的matlab代码,用于我设法解决的方程:

我有一个我无法解的微分方程

我们对方程了解如下:

Dr是一个三级多项式

D'1=D'2=0

D2=2D1

u1=450

u'2=-K*u2 Te

其中K和Te是常数

我想用一个矩阵来近似这个问题,我设法解决了 相似方程:u1和u'2的极限条件相同。 在这个方程上,我用中心差近似u'和u,并在r=1到r=2之间使用有限差分法。然后,我将结果放入matlab中的矩阵a和matlab中的向量Y中的极限条件,并运行u=a\Y以获得u值的变化情况。以下是我的matlab代码,用于我设法解决的方程:

    clear
    a=1;
    b=2;
    N=100;
    h = (b-a)/N;
    K=3.20;
    Ti=450;
    Te=20;

    A = zeros(N+2);
    A(1,1)=1;
    A(end,end)=1/(2*h*K);
    A(end,end-1)=1;
    A(end,end-2)=-1/(2*h*K);


    r=a+h:h:b;

    %y(i)
    for i=1:1:length(r)
       yi(i)=-r(i)*(2/(h^2));
    end
    A(2:end-1,2:end-1)=A(2:end-1,2:end-1)+diag(yi);

    %y(i-1)
    for i=1:1:length(r)-1
        ymin(i)=r(i+1)*(1/(h^2))-1/(2*h);
    end
    A(3:end-1,2:end-2) = A(3:end-1,2:end-2)+diag(ymin);

    %y(i+1)
    for i=1:1:length(r)
       ymax(i)=r(i)*(1/(h^2))+1/(2*h);
    end
    A(2:end-1,3:end)=A(2:end-1,3:end)+diag(ymax);


    Y=zeros(N+2,1);
    Y(1) =Ti;
    Y(2)=-(Ti*(r(1)/(h^2)-(1/(2*h))));
    Y(end) = Te;
    r=[1,r];
    u=A\Y;
    plot(r,u(1:end-1));

我的问题是,如何解第一个微分方程?

正如特洛伊哈斯金在评论中指出的那样,我们可以确定D为常数因子,而常数因子在D'/D中抵消。换句话说:我们可以假设D1=1是一个方便的数字,因为D可以乘以任何常数。现在很容易找到系数,多项式结果是

Dr=-2r^3+9r^2-12r+6

导数D'r=-6r^2+18r-12。还有一种更聪明的方法是从D'开始寻找多项式,D'是已知根的二次方

我可能会立即使用这些信息,计算一阶导数的系数k:

r = a+h:h:b;
k = 1+r.*(-6*r.^2+18*r-12)./(-2*r.^3+9*r.^2-12*r+6);
似乎k在区间[1,2]上总是正的,所以如果您想最小化对现有代码的更改,只需在其中用ri/ki替换ri即可

顺便说一下,不是像这样的循环

for i=1:1:length(r)
   yi(i)=-r(i)*(2/(h^2));
end
一个人通常做得很简单

yi=-r*(2/(h^2));

这种矢量化使代码更加紧凑,并且对性能也有好处,但在您的示例中,解决线性系统是瓶颈。另一个好处是yi被正确初始化,而在循环构造中,如果yi碰巧已经存在并且长度大于lengthr,则生成的数组将具有无关的条目。这是难以跟踪的bug的潜在来源

虽然我可以从上下文中猜出来,但我可以问你的问题是什么,你能把它添加到问题中吗?@TroyHaskin Done!:明白了。第一个微分方程实际上是三次曲线拟合。请允许我给你一个提示:既然你知道D立方的形式,并且有四个条件,你可以用你喜欢的任何工具对四个立方系数进行代数求解,以获得你所需的比率,而无需任何进一步的信息。@TroyHaskin我试图这样做,用Ar^3+Br^2+Cr+D替换Dr,然后根据条件从那里开始。然而,我无法解决Dr。我知道如何使用的唯一条件是D'1=D'2=0和D2=2D1。只有三个条件,所以我无法解决。我应该使用的第四个条件是什么?第三个条件实际上是两个条件:D1=alpha和D2=2*alpha,其中alpha是任意常数,你可以任意调用它;我选择了阿尔法。