Error using fzero function

1 Ansicht (letzte 30 Tage)
Elyssa Kairouz
Elyssa Kairouz am 11 Mai 2022
Bearbeitet: Torsten am 11 Mai 2022
I have problem with this code it returns the following error "Error using fzero Initial function value must be finite and real" in the linen where yp0= fzero( @(yp0) B(0, y0, yp0), 0);
h1 = [0 1 4 6 8 15 25];
A1 = [50 55 58 67 75 85 125];
%Valeurs numériques
d = 0.500;
L = 35.0;
wv = 33200;
etha = 5.00;
rho = 1000;
H = 10.0;
nu = 0.000001;
g = 9.81;
%On interprète: l'aire au fond de la retenue est de 50 m^2, et l'aire à la
%surface quand la retenue est pleine est de 125 m^2
%Fonction qui donne la surface de la retenue en fonction de la hauteur
%d'eau
A = @(h) interp1(h1,A1,h);
%On utilise l'equation de Bernoulli générale entre la surface de la retenue
%et la sortie de la turbine
v = @(h,hp) -4*hp.*A(h)./pi*d^2; %vitesse dans le tuyau
ps = @(h,hp) etha*0.5*hp.^2.*A(h).^2/(pi*(d/2)^2)^2; %perte de charge singulière dans le tuyau
pr = @(h,hp) 0.316.*(v(h,hp).*d/nu).^(-0.25)*L/d*0.5.*v(h,hp).^2; %perte de charge régulière dans le tuyau
B = @(t,h,hp) 0.5*hp.^2 + g*(H+h) -wv/rho -0.5.*v(h,hp).^2 -ps(h,hp) -pr(h,hp);
tspan = [0 1500];
y0 =24.0;
yp0 = fzero( @(yp0) B(0, y0, yp0), 0);
[t y] = odei15(B, tspan, y0,yp0);
plot(t,y);

Antworten (1)

Torsten
Torsten am 11 Mai 2022
Bearbeitet: Torsten am 11 Mai 2022
I changed
v = -4*hp.*A(h)./pi*d^2; %vitesse dans le tuyau
to
v = -4*hp.*A(h)./(pi*d^2); %vitesse dans le tuyau
For better debugging, try
tspan = [0 1500];
y0 =24.0;
yp0 = fzero( @(yp0) B(0, y0, yp0), -0.0001)
[t y] = ode15i(@B, tspan, y0,yp0);
plot(t,y)
function res = B(t,h,hp)
h1 = [0 1 4 6 8 15 25];
A1 = [50 55 58 67 75 85 125];
%Valeurs numériques
d = 0.500;
L = 35.0;
wv = 33200;
etha = 5.00;
rho = 1000;
H = 10.0;
nu = 0.000001;
g = 9.81;
%On interprète: l'aire au fond de la retenue est de 50 m^2, et l'aire à la
%surface quand la retenue est pleine est de 125 m^2
%Fonction qui donne la surface de la retenue en fonction de la hauteur
%d'eau
A = interp1(h1,A1,h);
%On utilise l'equation de Bernoulli générale entre la surface de la retenue
%et la sortie de la turbine
v = -4*hp.*A./(pi*d^2); %vitesse dans le tuyau
ps = etha*0.5*hp.^2.*A.^2/(pi*(d/2)^2)^2; %perte de charge singulière dans le tuyau
pr = 0.316.*(v.*d/nu).^(-0.25)*L/d*0.5.*v.^2; %perte de charge régulière dans le tuyau
res = 0.5*hp.^2 + g*(H+h) -wv/rho -0.5.*v.^2 -ps -pr;
end

Kategorien

Mehr zu Nonlinear Optimization finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by