通过使用 MATLAB 优化多个约束变量来找到最小值



我有y的数据值,可以通过函数y=A x B x exp(C)计算,其中AC是变量,B是常量。y的数据值是针对不同的B给出的。我想确定变量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解决这个问题。不幸的是,我不知道我必须使用许多可用函数中的哪一个以及如何应用这些功能。

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

我假设您在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

最新更新