首頁 > 軟體

如何解決Matlab錯誤Too many output arguments.

2019-12-25 02:49:10

最佳化方法與理論這本書的程式碼中有很多印刷錯誤的地方,大家平時要留意下

複製最佳化理論書上的原始碼,用Matlab編譯時出現如下錯誤:

??? Error using ==> qmin Too many output arguments.

1

書上的程式碼如下:

function [s, phis, ds, dphi, S] = qmin (phi, a, b, delta, epsilon)

s0 = 1; maxj = 20; maxk = 30; big = 1e6; err = 1; k = 1;

S(k) = s0; cond = 0; h = 1; ds = 0.00001;

if (abs (s0) > 1e4),  h = abs(s0) * (1e-4); end

while (k < maxk && err > epsilon && cond ~= 5)

    f1 = (feval (phi, s0 + ds) - feval(phi, s0 - ds)) / (2 * ds)

    if(f1 > 0), h = -abs(h); end

    s1 = s0 + h; s2 = s0 + 2 * h; bars = s0;

    phi0 = feval(phi, s0); phi1 = feval (phi, s1);

    phi2 = feval(phi, s2); barphi = phi0; cond = 0;

    j = 0;

    while (j < maxj && abs (h) > delta && cond == 0)

        if (phi0 <= phi1),

            s2 = s1; phi2 = phi1; h = 0.5 * h;

            s1 = s0 + h; phi1 = feval (phi, s1);

        else if (phi2 < phi1),

                s1 = s2; phi1 = phi2; h = 2 * h;

                s2 = s0 + 2 * h; phi2 = feval (phi, 2);

            else

                 cond = -1;

            end

        end

        j = j + 1;

        

        if (abs (h) > big || abs (s0) > big), cond = 5; end

    end

    if (cond == 5), 

        bars = s1; barphi = feval (phi, s1);

    else

        d = 2 * (2 * phi1 - phi0 - phi2);

        if (d < 0),

            barh = h * (4 * phi1 - 3 * phi0 - phi2)/d;

        else

            barh = h / 3; cond = 4;

        end

         bars = s0 + barh; barphi = feval (phi, bars);

         h = abs (h); h0 = abs (barh);

         h1 = abs (barh - h); h2 = abs (barh - 2 * h);

         

         if (h0 < h), h = h0; end

         if (h1 < h), h = h1; end

         if (h2 < h), h = h2; end

         if(h == 0), h = barh; end

         if (h < delta), cond = 1; end

         if (abs (h) > big || abs (bars) > big), cond = 5; end

         err = abs (phi1 - barphi);

         s0 = bars; k = k+1; S(k) = s0;

    end

    if (cond == 2 && h < delta), cond = 3; end

end

s = s0; phis = feval (phi,  s);

ds = h; dphi = err;

end

            


2

在Matlab中新建一個M檔案,名稱為qmin


3

編譯時出現如下錯誤提示:

大意是輸出引數太多 


4

仔細檢查一下程式碼,發現命令語句的輸出引數中多了一個k引數


5

將命令語句中的K引數刪除,再次執行便可成功輸出結果了


6

注意:最佳化方法與理論這本書的程式碼中有很多印刷錯誤的地方,大家平時要留意下



IT145.com E-mail:sddin#qq.com