代码之家  ›  专栏  ›  技术社区  ›  Maluquinho

Matlab-用arrayfun计算嵌套匿名函数

  •  0
  • Maluquinho  · 技术社区  · 7 年前

    C.B_MT = 2; C.T = 24; C.OM_MT = 1/24; C.P_WTmax = 2;
    ub = 3;
    ObjFcn = @(x) CostFcn1(x,C,ub);
    x = 1:4;
    fit = ObjFcn(x)
    

    功能 ObjFcn 呼叫如下:

    function F = CostFcn1(x,C,ub)
        F = f_t(x,C,ub) + OM_DG(C) + TCPD_BES(x,C);
        function ft = f_t(x,C,ub)
            N = cell(1,2);
            ft = x(2)*C.B_MT+ub;
            for i = 1:2
                N{i} = C.B_MT*x(i+2)+ub;
            end
            ft = ft(x) + sum(arrayfun(@(N_q) N_q{1}(x), N));
        end
    
        function om_dg = OM_DG(C)
            om_dg = C.T*C.OM_MT;
        end
    
        function tcpd = TCPD_BES(x,C)
            tcpd = x(1)*C.P_WTmax;
        end
    end
    

    arrayfun ,它可以毫无问题地工作( fit = 10 ). 具有 不会引起任何问题吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   ammportal    7 年前

    ft(x) N_q{1}(x) .将这些零件更换为 ft N_q{1}

    function F = CostFcn1(x,C,ub)
        om_dg = C.T*C.OM_MT;
        tcpd = x(1)*C.P_WTmax;
        N = zeros(1,2);
        ft = x(2)*C.B_MT+ub;
        for i = 1:2
            N(i) = C.B_MT*x(i+2)+ub;
        end
        ft = ft + sum(N);
        F = ft + om_dg + tcpd;
    end
    

    如果您的原始代码与您发布的代码相似(此处使用的变量的类型与原始代码中的类型相同),那么这应该可以工作