非線性方程的數值解法之二分法:
-
求解非線性方程的數值解主要有二分法、簡單迭代法以及類迭代法等,本文主要介紹二分法及其MATLAB程序實現。
-
假設已找到有根區間[, ],滿足,並且上述非線性方程在所給區間[, ]上只有一個根。下面用簡單的方法形成有根區間的序列。先設,,即[, ] [, ],對於一般的區間[, ],設其中點爲 ,若或者,其中爲根的容許誤差,則即爲所求,否則檢驗的符號,若它與同號,就取,。反之,取 ,。這樣必定有,所以[]就是新的有根區間。繼續上述過程即可。 -
MATLAB
%Date:2019-10-28
%Writer:無名十三
%% 本程序目的是利用二分法輸出非線性方程的數值解
function result = dichotomy(fun,x1,x2,eps) %參數fun爲待輸入函數,eps爲容許誤差,示例如下文
if nargin ~= 4
errordlg('輸入參數個數不符合要求!', 'Error!') %參數輸入報錯
elseif fun(x1) * fun(x2) >= 0
errordlg('二分法不能確定該區間內是否有根存在!', 'Warning!')
else
is_eps = (x2-x1) / 2;
x = (x2+x1) / 2;
while is_eps >= eps
if fun(x) == 0
fprintf('\n該方程的根爲%f.\n\n', x)
break
elseif fun(x1)*fun(x) < 0
x2 = x;
elseif fun(x2)*fun(x) < 0
x1 = x;
end
is_eps = (x2-x1) / 2;
x = (x2+x1) / 2;
end
if is_eps < eps
fprintf('\n該方程的近似根爲%f.\n\n', x)
end
end
end
%%
- 示例1:求非線性方程在區間[-0.7, 0.1]上的數值解。
>> dichotomy(@(x)sin(x), -0.7, 0.1, 0.0001)
該方程的近似根爲-0.000098.
- 示例2:求非線性方程在區間[-11, 29]上的數值解。
>> dichotomy(@(x)(9*x^3 - 13*x + 97), -11, 29, 0.0001)
該方程的近似根爲-2.426163.