二分法 MATLAB實現

2021-10-05 11:31:27 字數 2531 閱讀 4378

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檔案函式(m file function)

匿名函式(anonymous function)

1.m檔案函式

範例function c=myadd(a,b)

%這裡可以寫函式的使用說明,前面以%開頭

%在工作區中,help myadd將顯示此處的說明

c=a+b;

%end %非必須的

第一行function告訴matlab這是乙個函式,a,b是輸入,c是輸出,myadd是函式名。以m檔案定義的函式必須儲存為函式名的形式,上例中,函式應儲存為myadd.m。要使用myadd函式,該函式必須在matlab的搜尋路徑中。

呼叫方式:

在matlab命令符後輸入

a=1;b=2;

c=myadd(a,b)

關於m檔案定義函式還有許多的說明,暫時略去。。。

通常作為引數傳遞給另外乙個函式。比如fminsearch,lsqcurvefit等函式需要以函式作為引數。

f=inline(『x.^2』,『x』);

建立了函式f(x)=x^2。要計算f(3),在工作區輸入f(3)即可。f([2 3 4])計算在x=2 3 4時的值

f=inline(『x+y』,『x』,『y』)

建立了二元函式f(x,y)=x+y,工作區輸入f(2,3)計算2+3,等同於feval_r(f,2,3)。

3.匿名函式(anonymous function)

匿名函式使用函式控制代碼來表示匿名函式,定義形式為

函式控制代碼=@(變數名) 函式表示式

例如:f=@(x) x.^2

定義了函式f(x)=x^2,f(2)計算在x=2處的值。

匿名函式可以呼叫matlab函式,也可以使用工作區中存在的變數,例如

a=2;

f=@(x) x.^2+a

f(2) %計算時引用了變數a

a=0;

f(2) %仍然引用的是a=2

匿名函式也可以由matlab的內建函式或m檔案函式建立,例如

f=@sin %f(x)=sin(x)

f(pi/2) %sin(pi/2)

functions(f) %檢視函式資訊

利用單元陣列可以建立多個函式的控制代碼,例如

f=f(pi/2) %計算sin(pi/2)

f(pi) %計算cos(pi)

函式控制代碼的另乙個重要特徵是可以用來表示子函式、私有函式和巢狀函式。

在建立匿名函式時,matlab記錄了關於函式的資訊,當使用控制代碼呼叫該函式的時候,matlab不再進行搜尋,而是立即執行該函式,極大提高了效率。

clear all;

clc;

format long;

fstr=input('please enter the function with f-left format: f(x)=','s');

f=inline(fstr);

left=input('please enter the left value of guess interval: a=') ;

right=input('please enter the right value of guess interval: b=');

err=input('please enter the allowed error:');

while f(right)*f(left)>0

disp('wrong input.\n');

left=input('please enter the left value of guess interval: a=') ;

right=input('please enter the right value of guess interval: b=');

err=input('please enter the allowed error:');

enda=left;

b=right;

fprintf('k\tinterval\t\tx\tf(x)\n');

for i=1:1000

mp=(right+left)/2;

fprintf('%i\t[%f,%f]\t%f\t%f\n',i,left,right,mp,f(mp));

if f(mp)>0

right=mp;

else

left=mp;

endif i>(log(b-a)-log(err))/log(2)

break;

endi=i+1;

enddisp('x=');

——**源自某大佬同學,吃水不忘挖井人,致敬大佬。

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...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法的使用之MATLAB實現

今天數值計算上機做了乙個驗證二分法計算非線性方程的實驗。以前沒有想過這個問題,今天作業一下感覺這個方法確實不錯,隨記下來。首先給出要計算的方程 f x x 2 m 然後編寫演算法 matlab code 其中a,b表示查詢根存在的範圍,m表示要求解函式的值 function y f2 a,b,m k...