[英]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.