MATLAB程式問題

昨天有問過了有人反應沒辦法一次po完所以在問一下

一、請以MATLAB撰寫一個程式,使用遞增搜尋法(increment research)找出下列函式在區間【3,6】以及【3,100】的根(注意:非根的上下界限)

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

這次點數有10點喔

2 Answers

Rating
  • 老師
    Lv 7
    1 decade ago
    Favorite Answer

    這是遞增搜尋法(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 decade ago

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

    搞不懂

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

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

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

    感激不盡啊。。

Still have questions? Get your answers by asking now.