回覆列表
  • 1 # 使用者804386860247

    使用匿名函式控制代碼就可以了

    fmincon 需要的函式fun只有一個輸入引數 fun(x)

    而你的函式需要多一個能改變的變數 那麼形式變成 myfun(p,x)

    p就是你要傳遞的引數,x還是原來的輸入

    當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下

    function [out]=myfun,(p,x)

    ...........

    end

    就是根據引數p和輸入x,求的輸出,當然名字可以自己取,然後就是主程式了

    for p=p0:pn %引數p的取值

    [x,fval]=fmincon(@(x) myfun(p,x),Bt0,[],[],[],[],lb,ub,@constr);

    .......

    end

    其中關鍵就是@(x) myfun(p,x)

    這會返回一個匿名的函式控制代碼,會使用當時的p值代入myfun

    得到一個只有一個輸入x的函式,這樣就能把額外的引數傳遞給需要最佳化的函式

    如果你的函式有等多的引數例如

    myfun(a,b,c,x)

    a=..

    b=..

    c=..

    同樣用@(x) myfun(a,b,c,x)把a,b,c引數的值傳給要最佳化的函式

    在以上的基礎上,加幾句,儲存每次的引數p和對應的最佳化結果

    然後畫圖就可以了

  • 中秋節和大豐收的關聯?
  • 四個月寶寶老揉眼睛怎麼回事?