How to find parameters that minimize a difference
Show older comments
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
Answers (1)
Alan Stevens
on 8 Nov 2021
Use fminsearch and use the norm of the differences.
help fminsearch
3 Comments
Alan Stevens
on 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
on 10 Nov 2021
Edited: Alan Stevens
on 10 Nov 2021
deleted
Categories
Find more on Solver Outputs and Iterative Display in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!