本篇是在課程學習中自己程式設計實現的二分法計算非線性方程或者超越方程近似根的演算法,寫一下,後邊便於複習和期末課程設計引用。
% 二分法求根的matlab演算法
function [x0,n]
=dichotomy
(a,b,err,f_x)%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%輸入引數a為根的區間左端點 %
%輸入引數b為根的區間右端點 %
%輸入引數err為誤差精度 %
% 輸入引數f_x為待求根函式 %
%輸出引數x0為滿足精度要求的根 %
% 輸出引數n為迭代的次數 %%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%n=ceil((
log(
(b-a)
./err)./
log(2)
-1))
;%求迭代次數
while
(sign
(f_x
(a))==0
)%如果a的函式值為0停止迭代輸出x0為a的值,迭代次數為0
x0=a;
n=0;
return
;end
while
(sign
(f_x
(b))==0
)%如果b的函式值為0停止迭代輸出x0為b的值,迭代次數為0
x0=b;
n=0;
return
;end
while
(sign
(f_x
(a))~=
sign
(f_x
(b))
)%a、b符號不同進行區間二分
x0=a/
2+b/2;
%區間中點
if(sign
(f_x
(a))~=
sign
(f_x
(x0)))
%判斷區間中點函式值與區間端點符號
b=x0;
%將中點賦值給符號相同的端點
if(b-a<=err||
abs(
f_x(x0)
)<=err)
%判斷是否滿足精度要求
x0=a/
2+b/2;
return
;else
%不滿足精度迴圈呼叫二分法
dichotomy
(a,b,err,f_x)
; end
else
a=x0;
%將中點賦值給符號相同的端點
if(b-a<=err||
abs(
f_x(x0)
)<=err)
%判斷是否滿足精度要求
x0=a/
2+b/2;
return
;else
%不滿足精度迴圈呼叫二分法
dichotomy
(a,b,err,f_x)
; end
endend
引用實列:求解函式f(x)=x^3-x-1在區間[1,1.5]上的乙個零點,誤差不超過0.005
f=@(x)x^3-x-1
[x0,n]=dichotomy(1,1.5,0.005,f)
結果
二分法 MATLAB實現
matlab中eps是乙個函式,可以返回某乙個數n的最小浮點數精度,形式例如eps n 一般直接用eps即可。eps eps 1 2.2204e 16 1 1 eps false 1 1 eps 0.51 false 1 1 eps 0.5 true 0.5 時為true 自定義函式的途徑 m檔案函...
二分法的使用之MATLAB實現
今天數值計算上機做了乙個驗證二分法計算非線性方程的實驗。以前沒有想過這個問題,今天作業一下感覺這個方法確實不錯,隨記下來。首先給出要計算的方程 f x x 2 m 然後編寫演算法 matlab code 其中a,b表示查詢根存在的範圍,m表示要求解函式的值 function y f2 a,b,m k...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...