簡體   English   中英

為什么這種數值方法的MATLAB輸出精度沒有變得更准確?

[英]Why is the MATLAB output of this numerical method precision not getting more accurate?

在這里發布vs math.stackexchange因為我認為我的問題是語法:

我正在嘗試使用中間方法的MATLAB代碼分析二階ODE:y''+ 2y'+ 2y = e ^( - x)* sin(x)。 我首先將ODE轉換為一階方程組,然后嘗試在下面應用它,但隨着離散化[m]增加,輸出停止在.2718。 例如,m = 11得出:

ans =

0.2724

並且m = 101:

ans =

0.2718

並且m = 10001

ans =

0.2718

這是代碼:

function [y,t] = ODEsolver_midpointND(F,y0,a,b,m)

    if nargin < 5, m = 11; end
    if nargin < 4, a = 0; b = 1; end
    if nargin < 3, a = 0; b = 1; end
    if nargin < 2, error('invalid number of inputs'); end

    t = linspace(a,b,m)';
    h = t(2)-t(1);

    n = length(y0);

    y = zeros(m,n);
    y(1,:) = y0;
    for i=2:m
    Fty = feval(F,t(i-1),y(i-1,:));
    th = t(i-1)+h/2;

    y(i,:) = y(i-1,:) + ...
        h*feval(F,th,y(i-1,:)+(h/2)*Fty );
    end

單獨的文件:

function F = Fexample1(t,y)

F1 = y(2);
F2 = exp(-t).*sin(t)-2.*y(2)-2.*y(1);
F = [F1,F2];

第三檔:

[Y,t] = ODEsolver_midpointND('Fexample1',[0 0],0,1,11);
Ye = [(1./2).*exp(-t).*(sin(t)-t.*cos(t)) (1./2).*exp(-t).*((t-1).*sin(t)-  t.*cos(t))];
norm(Y-Ye,inf)

你的ODE求解器看起來像它應該工作 - 但是你要比較的分析解決方案中有一個拼寫錯誤。 它應該是

Ye = [(1./2).*exp(-t).*(sin(t)-t.*cos(t)) (1./2).*exp(-t).*((t-1).*sin(t)+  t.*cos(t))];

即在導數中的t.*cos(t)項之前加上+號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM