Error : A and B must be floating-point scalars

2 Ansichten (letzte 30 Tage)
hakim oueslati
hakim oueslati am 16 Jan. 2023
Beantwortet: Adam Danz am 16 Jan. 2023
I am trying to integrate a function between two points but I can't do it as I get the following error:
Error using integral (line 85)
A and B must be floating-point scalars.
Error in integrantK_sup (line 6)
I=integral(F1,double(ALPHA*R_int_ind),double(ALPHA*R_ext_ind)); % équation (70), p.2834
Error in Script_A_MH_L (line 228)
integ=integrantK_sup(ALPHA);
The code used is :
nb_pt_v=200; pas_v=Ep_plaque/nb_pt_v;
nb_pt_h=200; pas_h=3*R_ext_ind/nb_pt_h;
ik=1:nb_pt_h+1;
il=1:nb_pt_v+1;
r= 0 + (ik-1).*pas_h;
z= 0 - (il-1).*pas_v; [r,z]=meshgrid(r,z);
A=zeros(nb_pt_v+1,nb_pt_h+1);
pas_alpha=10;
nb_pas_al=1500;
for ALPHA=0.1:pas_alpha:nb_pas_al
integ=integrantK_sup(ALPHA);
A=integ.*pas_alpha+A;
end
The integration function integratingK_sup is defined as follows:
function integ=integrantK_sup(ALPHA)
% équation (74), p.2835
global r z R_int_ind R_ext_ind Ep_plaque Ep_ind Airgap w mur sigma_plaque
F1=@(x)x.*besselj(1,x);
I=integral(F1,double(ALPHA*R_int_ind),double(ALPHA*R_ext_ind)); % équation (70), p.2834
Alpha_1=sqrt(ALPHA^2+1j*w*mur*sigma_plaque);
aa=I.*besselj(1,ALPHA.*r).*(exp(-ALPHA*Airgap)-exp(-ALPHA*(Airgap+Ep_ind)));
bb=(ALPHA*Alpha_1*exp(2*Alpha_1*Ep_plaque).*exp(Alpha_1.*z));
cc=ALPHA*Alpha_1.*exp(-Alpha_1.*z);
dd=((ALPHA-Alpha_1)*Alpha_1+Alpha_1*(ALPHA+Alpha_1)*exp(2*Alpha_1*Ep_plaque));
integ=((1/(ALPHA^3)).*aa).*((bb+cc)/dd);
end
To execute, you must first initialise the parameters :
Ep_plaque = 5e-3;
R_plaque = 20e-2;
R_int_ind = 5e-2;
R_ext_ind = 15e-2;
Ep_ind = 2e-3;
Airgap = 2e-3;
R_air = 5*R_plaque;
H_air = 100*Ep_plaque;
mu0=4*pi*1e-7; %% Perméabilité magnétique du vide
nu0=1/mu0; %% Réluctivité magnétique du vide
mur=1e5; %% Perméabilité magnétique relative
nur=1.0/mur; %% Perméabilité magnétique du circuit magnétique
Js=5e6; %% Densité de courant source
Is = Js *((R_ext_ind-R_int_ind)*Ep_ind); %% courant source
ADirichlet=0; %% Valeurs Dirichlet du potentiel vecteur magnétique
sigma_plaque=1e6; %% Conductivité électrique du circuit magnétique
fr=50000; %% Fréquence de travail
w = 2*pi*fr ; %% Pulsation
The problem is in the integration of the function F1 between the two points ALPHA * R_int_ind and ALPHA * R_ext_ind.
  1 Kommentar
Adam Danz
Adam Danz am 16 Jan. 2023
Bearbeitet: Adam Danz am 16 Jan. 2023
Code reorganized below so that it can run and be easily copied. A different error message shows because of a difference in MATLAB releases (yours 18a, this one is 22b).
Ep_plaque = 5e-3;
R_plaque = 20e-2;
R_int_ind = 5e-2;
R_ext_ind = 15e-2;
Ep_ind = 2e-3;
Airgap = 2e-3;
R_air = 5*R_plaque;
H_air = 100*Ep_plaque;
mu0=4*pi*1e-7; %% Perméabilité magnétique du vide
nu0=1/mu0; %% Réluctivité magnétique du vide
mur=1e5; %% Perméabilité magnétique relative
nur=1.0/mur; %% Perméabilité magnétique du circuit magnétique
Js=5e6; %% Densité de courant source
Is = Js *((R_ext_ind-R_int_ind)*Ep_ind); %% courant source
ADirichlet=0; %% Valeurs Dirichlet du potentiel vecteur magnétique
sigma_plaque=1e6; %% Conductivité électrique du circuit magnétique
fr=50000; %% Fréquence de travail
w = 2*pi*fr ;
nb_pt_v=200; pas_v=Ep_plaque/nb_pt_v;
nb_pt_h=200; pas_h=3*R_ext_ind/nb_pt_h;
ik=1:nb_pt_h+1;
il=1:nb_pt_v+1;
r= 0 + (ik-1).*pas_h;
z= 0 - (il-1).*pas_v; [r,z]=meshgrid(r,z);
A=zeros(nb_pt_v+1,nb_pt_h+1);
pas_alpha=10;
nb_pas_al=1500;
for ALPHA=0.1:pas_alpha:nb_pas_al
integ=integrantK_sup(ALPHA);
A=integ.*pas_alpha+A;
end
Error using integral
Limits of integration must be double or single scalars.

Error in solution>integrantK_sup (line 38)
I=integral(F1,double(ALPHA*R_int_ind),double(ALPHA*R_ext_ind)); % équation (70), p.2834
function integ=integrantK_sup(ALPHA)
% équation (74), p.2835
global r z R_int_ind R_ext_ind Ep_plaque Ep_ind Airgap w mur sigma_plaque
F1=@(x)x.*besselj(1,x);
I=integral(F1,double(ALPHA*R_int_ind),double(ALPHA*R_ext_ind)); % équation (70), p.2834
Alpha_1=sqrt(ALPHA^2+1j*w*mur*sigma_plaque);
aa=I.*besselj(1,ALPHA.*r).*(exp(-ALPHA*Airgap)-exp(-ALPHA*(Airgap+Ep_ind)));
bb=(ALPHA*Alpha_1*exp(2*Alpha_1*Ep_plaque).*exp(Alpha_1.*z));
cc=ALPHA*Alpha_1.*exp(-Alpha_1.*z);
dd=((ALPHA-Alpha_1)*Alpha_1+Alpha_1*(ALPHA+Alpha_1)*exp(2*Alpha_1*Ep_plaque));
integ=((1/(ALPHA^3)).*aa).*((bb+cc)/dd);
end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Adam Danz
Adam Danz am 16 Jan. 2023
This is a lesson to avoid using global variables.
You're not using them properly here. But instead of fixing that, I'll suggest the (much) better approach: pass variables into the function rather than using global variables.
for ALPHA=0.1:pas_alpha:nb_pas_al
integ=integrantK_sup(ALPHA,r, z, R_int_ind, R_ext_ind, Ep_plaque, Ep_ind, Airgap, w, mur, sigma_plaque);
...
end
function integ=integrantK_sup(ALPHA,r, z, R_int_ind, R_ext_ind, Ep_plaque, Ep_ind, Airgap, w, mur, sigma_plaque)
% équation (74), p.2835
% global r z R_int_ind R_ext_ind Ep_plaque Ep_ind Airgap w mur sigma_plaque % REMOVE THIS
...
end

Weitere Antworten (0)

Kategorien

Mehr zu Specialized Power Systems finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by