我有y
的数据值,可以通过函数y=A x B x exp(C)
计算,其中A
和C
是变量,B
是常量。y
的数据值是针对不同的B
给出的。我想确定变量A
和C
。
我的想法是定义给定数据y
和计算数据y
(y_calc
(之间的比率。 y_calc
将使用接近实变量 A
和 C
的 A
和 C
值进行计算。因此,对于不同B
的所有y_calc
,需要将此比率降至最低。--> ratio = ((y - y_calc)/(y + y_calc))^2
.
此外,还有A
和C
的限制(例如 A<10
,C>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