How to find parameters that minimize a difference

10 views (last 30 days)
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
Alan Stevens on 8 Nov 2021
Use fminsearch and use the norm of the differences.
help fminsearch
  3 Comments
Alan Stevens
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

Sign in to comment.

Categories

Find more on Get Started with Optimization Toolbox in Help Center and File Exchange

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!