寫了一個自適應 Simpson 求積公式的代碼, 運行過程中出現(xiàn)了 abs命令或者變量的類型發(fā)生變化導致,無法求值 的錯誤, 如圖所示
我寫的 adapsimp 的代碼如下
function [s, err] = adapsimp(func, a, b, tol) s = comsimp(func, a, b, 2); c = (a + b) / 2; s1 = comsimp(func, a, c, 2); s2 = comsimp(func, c, b, 2); s12 = s1 + s2; err = abs(s12 - s) / 15; if err < tol s = s12; else [s1, err1] = adapsimp(func, a, c, tol/2); [s2, err2] = adapsimp(func, c, b, tol/2); s = s1 + s2; err = err1 + err2; end end
里面用到了 comsimp 函數(shù), 是這樣寫的
function s = comsimp(func, a, b, n) h = (b - a) / n; s0 = func(a) + func(b); s1 = 0; % summation of f(x_{2k-1}) s2 = 0; % summation of f(x_{2k}) for k = 1:n-1 x = a + k * h; if rem(k , 2) == 0 s2 = s2 + func(x); else s1 = s1 + func(x); end end s = h * (s0 + 4 * s1 + 2 * s2) / 3; end
這部分代碼在 octave 上運行是沒有問題的
用的版本是2.2.0最新版的.