Error using fzero function
Show older comments
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);
Answers (1)
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
Categories
Find more on Nonlinear Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!