How to find parameters that minimize a difference
Afficher commentaires plus anciens
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
Réponses (1)
Alan Stevens
le 8 Nov 2021
Use fminsearch and use the norm of the differences.
help fminsearch
3 commentaires
Alan Stevens
le 9 Nov 2021
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
Alan Stevens
le 10 Nov 2021
Modifié(e) : Alan Stevens
le 10 Nov 2021
deleted
Catégories
En savoir plus sur Programming dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!