我不知道這個問題的可能的是,不是所有的時間間隔 - 每個步長h
- 具有相同的a
和b
只是因爲x
的構造方式。試着用另外的fprintf
聲明如下:
for h = 0.01:0.1:1
x = a:h:b;
fprintf('a=%f b=%f\n',x(1),x(end));
v = y(x);
Itrap = (sum(v)-v(1)/2-v(end)/2)*h;
Error = abs(Itrap-Iref);
end
根據您的a
和b
(我選擇a=0
和b=5
)所有a
值是相同的(如預期),但b
變化從4.55至5.0。
我認爲您總是希望保持區間[a,b]
對於您選擇的每個步長都相同,以便更好地比較每次迭代。因此,不是遍歷步長,而是反覆遍歷[a,b]
內的等間隔子區間數n
。
不是
for h = 0.01:0.1:1
x = a:h:b;
你可以做更多的東西一樣
% iterate over each value of n, chosen so that the step size
% is similar to what you had before
for n = [501 46 24 17 13 10 9 8 7 6]
% create an equally spaced vector of n numbers between a and b
x = linspace(a,b,n);
% get the step delta
h = x(2)-x(1);
v = y(x);
Itrap = (sum(v)-v(1)/2-v(end)/2)*h;
Error = abs(Itrap-Iref);
fprintf('a=%f b=%f len=%d h=%f Error=%f\n',x(1),x(end),length(x),h,Error);
end
當你評估上面的代碼,你會發現,a
和b
是每個迭代一致,h
大致是什麼你之前選擇了,隨着步長的增加Error
確實增加。
嘗試以上,看看會發生什麼!