フィルターのクリア

I want to fit the model containing double numerical integral with data

1 回表示 (過去 30 日間)
RAHUL KUMAR
RAHUL KUMAR 2023 年 2 月 20 日
回答済み: Sandeep 2023 年 3 月 30 日
I have attached the data. I want to fit the data with the model which is very complicated which contains double numerical integration and has parameters 'par'. I have the only choice of fitnlm as per my knowledge. But I think it might take much time to fit. If you could recommend other algorithm which do not require derivative during iteration such as differential evolutution or any other, pls tell me how to implement.
clc;
clear all;
load('Figure9S11.mat');
load('Figure9S22.mat');
xdata11 = Figure9S11(1:225,1);
ydata11 = Figure9S11(1:225,2);
beta0=[2;1;0.1;212.8];
% Fit the model to the data
mdl = fitnlm(xdata11, ydata11, @BiaxialNewInvariant11, beta0);
disp(mdl)
function K1 = BiaxialNewInvariant11(par,lambda1)
hmod33minushmod11 = @(theta,phi,lambda1) (1/2).*lambda1.^2.*cos(phi).^2.*sin(theta).^2.*(1+((-1)+ ...
lambda1.^2).*(lambda1.^(-8).*((-1)+lambda1.^2).^2.*((1+ ...
lambda1.^2).^2.*cos(theta).^2+lambda1.^8.*sin(theta).^2)).^( ...
-1/2))+(-1/2).*lambda1.^(-4).*cos(theta).^2.*(1+lambda1.^( ...
-4).*(1+(-1).*lambda1.^4).*(lambda1.^(-8).*((-1)+lambda1.^2) ...
.^2.*((1+lambda1.^2).^2.*cos(theta).^2+lambda1.^8.*sin( ...
theta).^2)).^(-1/2));
Imat = @(theta,lambda1) (1/4).*lambda1.^(-4).*(1+(-2).*lambda1.^4+lambda1.^6+(-1).*( ...
(-1)+lambda1.^6).*cos(2.*theta)+lambda1.^4.*(lambda1.^(-8).* ...
(2.*((-1)+lambda1.^2).^2.*(1+2.*lambda1.^2+lambda1.^4+ ...
lambda1.^8)+(-2).*((-1)+2.*lambda1.^4+(-2).*lambda1.^10+ ...
lambda1.^12).*cos(2.*theta))).^(1/2));
rho = @(theta,phi,par) 2.*2.^(1/2).*exp(1).^(2.*par(4).*cos(phi).^2.*sin(theta).^2).*( ...
par(4).*pi.^(-1)).^(1/2).*erfi(2.^(1/2).*par(4).^(1/2)).^(-1);
Dw = @(theta,lambda1,par) (3/2).*par(2).*exp(1).^(par(3).*Imat(theta,lambda1).^3).*Imat(theta,lambda1).^4;
integrand = @(par,lambda1,theta,phi) 2*par(1)*Dw(theta,lambda1,par).*(sin(theta)).*rho(theta,phi,par).*Dw(theta,lambda1,par).* ...
hmod33minushmod11(theta,phi,lambda1);
K1 = 0.3E0.*((-1).*lambda1.^(-4)+lambda1.^2)+ integral2(@(phi,theta) integrand(par,lambda1,theta,phi),0,2*pi,0,pi);
end

回答 (1 件)

Sandeep
Sandeep 2023 年 3 月 30 日
Hi RAHUL KUMAR,
It is suggested to use a genetic algorithm or a particle swarm optimization algorithm, if you want to use an optimization algorithm that does not require the calculation of derivatives during the iteration.
The reason to use these algorithms is that they do not require derivative information during the optimization process. They search for the optimal solution by iteratively exploring the parameter space, evaluating the objective function at each point and updating the current best solution.

カテゴリ

Help Center および File ExchangeGet Started with Optimization Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by