精品偷拍一区二区三区,亚洲精品永久 码,亚洲综合日韩精品欧美国产,亚洲国产日韩a在线亚洲

  • <center id="usuqs"></center>
  • 
    
  • matlab求解符號表達(dá)式的最值

    matlab求解符號表達(dá)式的最值
    如何把符號表達(dá)式轉(zhuǎn)化為函數(shù)形式,比如用fminunc等
    其他人氣:165 ℃時(shí)間:2020-04-05 19:47:44
    優(yōu)質(zhì)解答
    如果是單變量函數(shù),做起來很簡單,直接用inline就可以了;
    如果是多變量函數(shù),相對要麻煩一些,請你給個(gè)具體的例子,我再幫你做.否則我自己費(fèi)時(shí)間構(gòu)造半天的例子,很可能和你的需求不符.函數(shù)的表達(dá)式很長,變量大概有10多個(gè),不是可以打字打出來的那種,但是已經(jīng)計(jì)算出來了其表達(dá)式,就是想把他轉(zhuǎn)化成fminunc可以運(yùn)算的函數(shù)形式。請問有什么命令或者方法嗎?

    面向符號表達(dá)式的優(yōu)化函數(shù)

     

    花費(fèi)近一個(gè)小時(shí)的時(shí)間,給你編了個(gè)函數(shù),細(xì)節(jié)上或許還有可完善的地方,但基本框架應(yīng)該沒大問題了。覺得有用就采納了吧。

    function [x_opt, fval] = fminunc_sym(f)
    % 首先分析表達(dá)式中有哪些符號變量
    vars=symvar(f);
    N = length(vars);
    varmap = cell(1, N);
    % 要把所有變量替換為向量x的元素,首先單獨(dú)考慮表達(dá)式中有沒有x
    syms x
    idx = find(vars==x);
    if ~isempty(idx)
        f = subs(f, x, sprintf('x(%i)',idx));
        varmap{idx} = x;
    end
    % 替換表達(dá)式中除x之外的變量
    for k = 1 : N
        if k == idx, continue, end
        f = subs(f, vars(k), sprintf('x(%i)',k));
        varmap{k} = vars(k);
    end
    % 轉(zhuǎn)換為關(guān)于x的內(nèi)聯(lián)函數(shù)
    f_inline = inline(char(f), 'x');
    % 調(diào)用優(yōu)化函數(shù)
    [x, fval] = fminunc(f_inline, rand(N,1));
    % 處理結(jié)果:把最優(yōu)點(diǎn)保存在一個(gè)struct中
    for i = 1 : N
        x_opt.(char(varmap{i})) = x(i);
    end

     

     

    調(diào)用實(shí)例

    syms x y z u v w
    f = (x-1)^2 + (y-2)^2 + (z-3)^2 + (u-4)^2 + (v-5)^2 + (w-6)^2;
    [vars, fval] = fminunc_sym(f)

    得到

    vars =
        u: 4.0000
        v: 5.0000
        w: 6.0000
        x: 1.0000
        y: 2.0000
        z: 3.0000

    fval =
      2.3870e-012
    我來回答
    類似推薦
    請使用1024x768 IE6.0或更高版本瀏覽器瀏覽本站點(diǎn),以保證最佳閱讀效果。本頁提供作業(yè)小助手,一起搜作業(yè)以及作業(yè)好幫手最新版!
    版權(quán)所有 CopyRight © 2012-2024 作業(yè)小助手 All Rights Reserved. 手機(jī)版