How to find parameters that minimize a difference

10 次查看(过去 30 天)
Hi everyone, I have to solve an equation numerically. I thought to split it into two parts and to calculate the difference between them setting a first try column vector and 4 first try parameters. How can I get the 4 parameters that minimize the obtained column of differences? Thank you.
Here is the code for the first part:
k=1.53E4;
kp=5.8E4;
c=1.11E6;
g=1; %first try parameters
t=[2:2:480]';
x=Strain; %Strain is a column vector 240x1
y=[zeros(1,length(x))]';
y1=((c./t).*x.*(exp(-k.*t/c)).*(-1+exp(k.*t./c))+x.*kp);
y2=(54000-x.*g.*(1-exp(x)).^2);
for i=1:(length(x))
y(i)=y1(i)-y2(i);
end

回答(1 个)

Alan Stevens
Alan Stevens 2021-11-8
Use fminsearch and use the norm of the differences.
help fminsearch
  3 个评论
Alan Stevens
Alan Stevens 2021-11-9
More like this (though I can't test it as I don't have the Strain values).
k=1.5E4;
kp=5.8E4;
c=1.11E6;
k_kp_c0 = [k, kp, c];
s=54000*ones(1,240)';
x=Strain;
[K,normval1] = fminsearch(@(k_kp_c) argmin_x(k_kp_c, x), k_kp_c0);
k = K(1);
kp = K(2);
c = K(3);
function F = argmin_x(k_kp_c, x)
k = k_kp_c(1);
kp = k_kp_c(2);
c = k_kp_c(3);
g = 1;
t=(2:2:480)';
x_comp = ((c./t).*x.*(exp(-k.*t./c)).*(-1+exp(k.*t./c))+x.*kp)-((s-x.*g.*(1-exp(x)).^2));
F = norm(x_comp - x);
end

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息

产品


版本

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by