no nickname 發問時間： 電腦與網際網路程式設計 · 1 0 年前

# MATLAB程式問題

f(x)=sin(x)+ cos(x)

### 2 個解答

• 老師
Lv 7
1 0 年前
最佳解答

這是遞增搜尋法(increment research)的程式(Steven C. Chapra: Applied Numerical Methods with MATLAB for Engineers and Scients書中程式)function xb = incsearch(func,xmin,xmax,ns)% xb = incsearch(func,xmin,xmax,ns):%   finds brackets of x that contain sign changes of %   a function on an interval% input:%   func = name of function %   xmin, xmax = endpoints of interval%   ns = (optional) number of subintervals along x%        used to search for brackets % output:%   xb(k,1) is the lower bound of the kth sign change%   xb(k,2) is the upper bound of the kth sign change%   If no brackets found, xb = [].if nargin < 4, ns = 50; end %if ns blank set to 50% Incremental searchx = linspace(xmin,xmax,ns); f = feval(func,x); nb = 0; xb = []; %xb is null unless sign change detectedfor k = 1:length(x)-1  if sign(f(k)) ~= sign(f(k+1)) %check for sign change    nb = nb + 1;    xb(nb,1) = x(k);    xb(nb,2) = x(k+1);  endendif isempty(xb)    %display that no brackets were found  disp('no brackets found')  disp('check interval or increase ns')else  disp('number of brackets:') %display number of brackets  disp(nb)end---------------------------------------執行>> f=@(x) sin(x)+cos(x)f =     @(x) sin(x)+cos(x)>> x=incsearch(f,3,6)number of brackets:     1x =    5.4490    5.5102-------------------------------->> x=incsearch(f,3,100)number of brackets:    31x =    4.9796    6.9592    6.9592    8.9388   10.9184   12.8980   14.8776   16.8571   16.8571   18.8367   20.8163   22.7959   22.7959   24.7755   26.7551   28.7347   28.7347   30.7143   32.6939   34.6735   36.6531   38.6327   38.6327   40.6122   42.5918   44.5714   44.5714   46.5510   48.5306   50.5102   52.4898   54.4694   54.4694   56.4490   58.4286   60.4082   60.4082   62.3878   64.3673   66.3469   68.3265   70.3061   70.3061   72.2857   74.2653   76.2449   76.2449   78.2245   80.2041   82.1837   82.1837   84.1633   86.1429   88.1224   90.1020   92.0816   92.0816   94.0612   96.0408   98.0204   98.0204  100.0000這找到的是該函數在這個區間有符號改變  代表有根位於這個區間

2006-04-17 10:04:03 補充：

你將檔案儲存為檔名incsearch.m後

在命令視窗(command window)中給匿名函數

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

之後利用 incsearch 執行

x=incsearch(f,3,6) %z範圍為 [3,6]

答案為

no brackets found

check interval or increase ns

x =

[]

表示在[3,6]之間沒有符號改變 沒有根位於其中

2006-04-17 10:07:07 補充：

也可以用inline定義函數

>> ff=inline('x.^2-2*x-3')

ff =

Inline function:

ff(x) = x.^2-2*x-3

>> x=incsearch(ff,-3,6)

答案為兩個區域中有符號變化

number of brackets:

2

x =

-1.1633 -0.9796

2.8776 3.0612

2006-04-17 10:11:34 補充：

如果你不喜歡使用匿名函數或inline函數 你也可以寫成函數m-file

例如

function y=myfun(x)

y=x.^2-2*x-3;

執行

>> x=incsearch('myfun',-3,6)

% 注意寫成M-file執行時需用單括號括起

答案為

number of brackets:

2

x =

-1.1633 -0.9796

2.8776 3.0612

• 1 0 年前

謝謝你的回答我將你寫的程式用m-file存了之後要執行確無法使用要怎麼才能正確執行啊~~~

搞不懂

2006-04-15 16:04:47 補充：

我怎麼用都還是不能執行也......

可以可以說清楚一點啊。。。

感激不盡啊。。