Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 10 years ago

Matlab Bisection method

請問

用二分法原理把根找出來

但程式裡面不能有while 或 for LOOP

要用疊切的方式來寫

這樣的function裡頭要怎麼設定呢

我假設了一個 方程式f(x)=x^2-1 用二分法 來夾他 並假設在誤差0.0001內時逼近為根

Update:

恩....就是利用function call function 的原理 來取代 while loop

之前有做過Quick sort 用function call function 裡頭不含任何loop 有做出來

我想看看 二分法可不可以

目前我的想法到,寫兩個function 互相call

function1 的檔案 裡面寫f(x)=x^2-1

function2的檔案 裡面寫 二分法的原理

然後用function2的值丟進去function1 互相呼叫....

不過只是想法...

Update 2:

恩....根據你的提示應用在我的想法裡面

程式寫出來了!!

可是裡頭我沒有用到feval指令 因為我不會用= =

我想再問一個問題

能不能用什麼指令讓 方程式 y=x^2-1可以由使用者任意換掉來勘根呢?

function1 的檔案 裡面寫f(x)=x^2-1

function2的檔案 裡面寫 二分法的原理

我想把f(x)=x^2-1變成使用者在command式窗輸入的指令

這樣不管我輸入 f(x)=x^3-x^2+1 或者其他方程式都可以用function2的檔案 來勘根

請問這樣要修改哪邊呢? 還是要用feval指令?

1 Answer

Rating
  • Elisha
    Lv 6
    10 years ago
    Favorite Answer

    以下為我的程式碼, 但不能有while或for loop而只能用"疊切"法, 可惜的是, bisection一定要用疊代(就是一定要用while 或 for loop), 是否可以請您再詳細說明什麼是"疊切"法, 以方便為您作答

    --------------------------------------------------------

    function xm = bisect(fun,xb)a = xb(1);

    b = xb(2);

    fa = feval(fun,a);

    fb = feval(fun,b);

    if sign(fa) == sign(fb)

    error(sprintf('Root not bracketed by [%f, %f]',a,b))

    end

    k = 0; maxit = 50; TolFun = 1;

    while k < maxit && TolFun > 1e-6

    k = k + 1;

    dx = b - a;

    xm = a + 0.5*dx;

    fm = feval(fun,xm);

    if sign(fm)==sign(fa)

    a = xm; fa = fm;

    else

    b = xm; fb = fm;

    end

    TolFun = abs(fm);

    end

    2011-05-07 07:59:00 補充:

    或許可以試看看, 我想應該是可以的~

    2011-05-08 07:30:19 補充:

    其實是可以寫在common window, 可以寫成inline的方式, 但寫法比較難一點

    其次另寫一個function 3專門來寫你的方程式的, 然後再call in, call out

    feval的用法, feval(@fucntion_name, properties)

    試看看

Still have questions? Get your answers by asking now.