【问题标题】:Find a Minimum by Optimizing multiple constrained variables with MATLAB通过使用 MATLAB 优化多个约束变量来找到最小值
【发布时间】:2015-07-06 18:23:41
【问题描述】:

我有数据值y,可以通过函数y=A x B x exp(C) 计算,其中AC 是变量,B 是常数。为不同的B 给出了数据值y。我想确定变量AC

我的想法是定义给定数据y 和计算数据y (y_calc) 之间的比率。 y_calc 将使用接近实变量 ACAC 值计算。因此,对于不同B 的所有y_calc,这个比率需要最小化。 --> ratio = ((y - y_calc)/(y + y_calc))^2

此外,AC 也有一些限制(例如 A<10C>20)。我还想为比率定义约束(例如ratio<1e-5

我想用 MATLAB 解决这个问题。不幸的是,我不知道我必须使用许多可用函数中的哪一个以及如何应用这些函数。

谁能帮帮我?甚至有可能以这种方式解决我的问题吗? 谢谢。

【问题讨论】:

    标签: matlab optimization


    【解决方案1】:

    我假设您像其他用户建议的那样在您的 OP 中犯了一个错字。

    您的入门想法朝着正确的方向发展,请查看“成本函数”。

    您可以使用 fminsearch 功能。我在这方面的知识不是很渊博,因为我最近才学会了所有这些,大部分时间 SVD 方法(再次查找)用于此类事情。

    这应该可以工作

    clear all 
    close all
    clc
    
    B = [1,2,3,4,5];     % test values B
    y = [3,5,7,9,15];    % test values y
    vParam = [1,1];      % starting test value A and C
    
    fct='fct';
    options=optimset('TolX', 1.e-4, 'TolFun', 1.e-4, 'MaxFunEvals', 1500,'MaxIter', 500);
    
    [vParam_optimized] = fminsearch(fct,vParam,options,B,y);
    
    fit = vParam_optimized(1).*B.*exp(vParam_optimized(2));
    
    plot(fit)
    hold on
    plot(y,'*')
    
    function y=fct(vParam,B,y_meas)
    % Parameters, x values, y result values
    
        y=0;
    
        for i=1:length(B)
            y=y+(y_meas(i)-(vParam(1)*B(i)*exp(vParam(2)))).^2; % cost function
        end
    
    end
    

    【讨论】:

    • 非常感谢!效果很好!但是如何为变量 A 和 C 设置约束?我没找到。
    • 我不确定自己是否诚实,会尝试调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2021-04-21
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多