2012-08-22 79 views
0

我有一個M文件定義此功能:如何通過一個函數作爲參數在Matlab

function[it,xvect,xdif,fx]=bisez(a,b,nmax,toll,fun) 
it=-1; 
xvect=[]; 
xdif=[]; 
fx=[]; 
err=toll+1; 

while(it<nmax && err>toll) 
x=(b+a)/2; 
    if(fun(x)==0) 
    err=0; 
    else 
    err=abs(b-a)/2; 
    end 
it=it+1; 
xvect=[xvect;x]; 
xdif=[xdif;err]; 
fx=[fx:fun(x)]; 
    if(fun(x)*fun(a)>0) 
    a=x; 
    else 
    b=x; 
    end; 
end; 
if(it<nmax) 
    fprintf('Convergence computed at step k:%d\n',it); 
else 
    fprinf('Iteration limit reached: %d\n',it); 
end 
    fprintf('Computed root: %-12.8f\n',xvect(it+1)); 
return 

然後,如果我嘗試使用這些命令來調用它:

[email protected](x)exp(x); 
a=1; 
b=1.5; 
nmax=1000; 
toll=2; 
bisez(a,b,nmax,toll,fun) 

我得到此錯誤:

??? Undefined function or method 'bisez' for input arguments of type 'function_handle'. 

我錯過了什麼?

PS:我使用的是Matlab 2007b

回答

5

看來它是不是在你的路徑當你運行它。

如果我在我的道路運行它,我得到:

>> bisez(a,b,nmax,toll,fun) 
    Convergence computed at step k:0 
    Computed root: 1.25000000 

    ans = 

     0 

外面我路上的:

>> bisez(a,b,nmax,toll,fun) 
    Undefined function 'bisez' for input arguments of type 'function_handle'. 
+0

行動,你是對的,謝謝! – Aslan986

相關問題