Error: Custom function fitting in MATLAB

조회 수: 7 (최근 30일)
LM
LM 2023년 4월 18일
댓글: Cris LaPierre 2023년 4월 19일
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

채택된 답변

Cris LaPierre
Cris LaPierre 2023년 4월 18일
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
LM
LM 2023년 4월 19일
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 2023년 4월 19일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by