阿傑 發問時間: 電腦與網際網路軟體 · 9 年前

如何用matlab來跑二分逼近法呢?

如上,y=ax^3+bx^2+cx+d 如何用matlab來跑二分逼近法呢?

希望能PO出來讓我複製貼上matlab就可以執行的。

已更新項目:

但是我用的時候它顯示

Error: Function definitions are not permitted at the prompt or in scripts.

2 個已更新項目:

??? function xm = bisect(fun,xb,varargin)

|

3 個已更新項目:

怎存成副程式.m

4 個已更新項目:

你設的附檔名是?

5 個已更新項目:

tpes411@yahoo.com.tw

1 個解答

評分
  • Elisha
    Lv 6
    9 年前
    最佳解答

    複製貼上的話, 需要有3個檔案, 二個副程式和一個主要執行的程式, 另外你的a,b,c,d我假設為a=1;b=-2;c=3;d=4;(在主程式中), 並且有先畫了一下圖形,看看大概的根在哪裡(大概在-1~-0.5)之間, 所以我的二分法起始猜值用了(-1~1.5), 我把程式碼貼在下面, 你自己跑跑看

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

    1. 二分法副程式

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

    b = xb(2);

    fa = feval(fun,a,varargin{:});

    fb = feval(fun,b,varargin{:});

    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,varargin{:});

    if sign(fm)==sign(fa)

    a = xm; fa = fm;

    else

    b = xm; fb = fm;

    end

    TolFun = abs(fm);

    end

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

    2. 方程式副程式

    function y = fun(x,a,b,c,d)

    y = a*x.^3 + b*x.^2 + c*x+ d;

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

    3. 主程式

    clear all

    clc a=1;b=-2;c=3;d=4;

    x = -1:0.01:2;

    plot(x,fun(x,a,b,c,d))

    r=bisect(@fun,[-1,1.5],a,b,c,d)

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

    執行結果, 我找到的根為

    r = -0.7760

    當然還有其他的根, 你可以再試試看

    2011-01-07 05:34:30 補充:

    你直接給我mail

    我把檔案給你

    2011-01-07 13:56:37 補充:

    我寄給你囉, 你收看看

    • 登入以對解答發表意見
還有問題?馬上發問,尋求解答。