2015-07-03 41 views
0

优化多约束变量我有数据值y,其可以通过一个函数y=A x B x exp(C)其中AC是变量和B是一个常数来计算。数据值y针对不同的B给出。我想确定变量AC查找最小通过用MATLAB

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

此外,存在用于AC(例如A<10C>20)约束。我也想定义比例约束(例如ratio<1e-5

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

任何人都可以帮助我吗?这种方式甚至有可能解决我的问题吗? 谢谢。

回答

0

我假设你在其他用户建议的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 
+0

非常感谢!这工作得很好! 但我怎样才能设置变量A和C的约束?我找不到。 –

+0

不确定自己是否诚实,会试着去研究它。 – Nimitz14