Error: Custom function fitting in MATLAB

2 vues (au cours des 30 derniers jours)
LM
LM le 18 Avr 2023
Commenté : Cris LaPierre le 19 Avr 2023
Hey guys, I would like to know why I got this error and how can I fix it. Can I please have your guys comments on this code:
% Load the experimental data and assgin the data to each parameter
data2fit2 = xlsread('data2fit2.xlsx');
ST = data2fit2(:,1);
theta_bar = data2fit2(:,2);
f_exp = data2fit2(:,3);
% Initial Guess
par0 = [0.417257,0.04132,0.001177,0.00961,1.946234];
pars = zeros(size(par0));
% Get the estimate parameters to have best fit to measurement data
par = fminsearch(@(par) err_fcn(pars,...
data2fit2,...
ones(size(data2fit2)),...
@(s,t,p) epsilon_f_of_sigma(s,t,p),...
ST,...
theta_bar),...
par0);
Arrays have incompatible sizes for this operation.

Error in solution>err_fcn (line 63)
err = sum((data2fit2(:) - model_data(:)).^2.*weights4scaling);

Error in solution>@(par)err_fcn(pars,data2fit2,ones(size(data2fit2)),@(s,t,p)epsilon_f_of_sigma(s,t,p),ST,theta_bar) (line 12)
par = fminsearch(@(par) err_fcn(pars,...

Error in fminsearch (line 216)
fv(:,1) = funfcn(x,varargin{:});
% Use optimized parameters to calculate the estimated epsilon_f by HC model
epsilon_f_modeled = epsilon_f_of_sigma(ST, theta_bar, par);
% Plot fracture criterion
figure;
plot(ST, f_exp, 'o', ST, epsilon_f_modeled, '-')
xlabel('Stress Triaxiality [-]')
% ylabel('Lode Angle Parameter [-]')
ylabel('Equivalent Plastic Strain at Fracture [-]')
function epsilon_f = epsilon_f_of_sigma(ST, theta_bar, pars)
b0 = pars(1);
gamma = pars(2);
c = pars(3);
epsilon_p = 0.0005;
epsilon_0 = 0.0005;
n = pars(4);
a = pars(5);
% Determine strain rate effect on parameter b
if epsilon_p < epsilon_0
b = b0;
else
b = b0*(1 +gamma*log(epsilon_p/epsilon_0));
end
% Define Lode-dependent functions
f1 = (2/3)*cos((pi/6)*(1-theta_bar));
f2 = (2/3)*cos((pi/6)*(3+theta_bar));
f3 = -(2/3)*cos((pi/6)*(1+theta_bar));
% Define each term
Strain_rate_term = b*(1+c).^(1./n);
Lode_dependent_term = ((1/2).*((f1-f2).^a+(f2-f3).^a+(f1-f3).^a)).^(1./a);
Triaxiality_term = c.*(2*ST+f1+f3);
% Final expression for HC model
epsilon_f = Strain_rate_term.* (Lode_dependent_term + Triaxiality_term).^(-1./n);
end
% Define error function
function err = err_fcn(pars,data2fit2,weights4scaling,model_fcn,ST,theta_bar)
model_data = model_fcn(ST,theta_bar,pars);
err = sum((data2fit2(:) - model_data(:)).^2.*weights4scaling);
end

Réponse acceptée

Cris LaPierre
Cris LaPierre le 18 Avr 2023
data2fit2(:) and model_data(:) and weights4scaling do not all have the same size.
A = rand(3)
A = 3×3
0.6170 0.3529 0.7404 0.5912 0.8156 0.0387 0.5109 0.5150 0.8625
B = rand(2,1)
B = 2×1
0.7242 0.0795
% Your error
A-B
Arrays have incompatible sizes for this operation.
  4 commentaires
LM
LM le 19 Avr 2023
Hi Cris, I literally confused right now. Would you mind to give me some tips on this?
- For you mentioned equation, which is for caculating the damage parameter and I think it will not be involved in the fitting equation.
And yes, I agree with you guys on fitting on the measurement data, and I just don't know which step I made wrong. My apologies to this.
Cris LaPierre
Cris LaPierre le 19 Avr 2023
No, the new equation does not play a role in obtaining the fit parameters.
Perhaps you are trying to do too much at once. Simplify your code down to just fitting the equation to your data. Get rid of all your extra variables and unnecessary arrays of ones.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with Curve Fitting Toolbox dans Help Center et File Exchange

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by