how can I remove error in fzero?

13 ビュー (過去 30 日間)
Parham Babakhani Dehkordi
Parham Babakhani Dehkordi 2015 年 4 月 2 日
コメント済み: Torsten 2015 年 4 月 2 日
Hi everybody, I have some input parameters such as: D=0.040; A=pi*D^2/4; Jo=0.74; Jw=[0.35 0.25 0.19 0.12 0.08 .06 0.04]; ro_o=910; ro_w=1000; mu_w=0.001; mu_o=0.92;
for p=1:length(Jw)
fun=@(Hw,Jw) (((8*ro_o*((D-(2*sqrt(Hw*A/pi)))*(Jo/(1-Hw))*ro_o/mu_o)^-1.0)*(Jo/(1-Hw))^2)*(pi*(D-(2*sqrt(Hw*A/pi)))*(1/(1-Hw))))-((0.023*((Jw(p)*D*ro_w/mu_w)^-.2)*ro_w*(Jw(p)/Hw)^2*pi*D)) ;
Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[0 0.4]);
end
if I run this, I would get an error as follows: Error using fzero (line 242) Function values at interval endpoints must be finite and real.
Error in by_using_fminbnd (line 21) Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[0 0.4]);
Thus, I tried to use fsolve, it is good but the results have imaginary part which I do not want it, my result must be real positive values, I wrote the codes for fsolve:
for p=1:length(Jw)
Hw(p) = fsolve(@(Hw) (((8*ro_o*((D-(2*sqrt(Hw*A/pi)))*(Jo/(1-Hw))*ro_o/mu_o)^-1.0)*(Jo/(1-Hw))^2)*(pi*(D-(2*sqrt(Hw*A/pi)))*(1/(1-Hw))))-((0.023*((Jw(p)*D*ro_w/mu_w)^-.2)*ro_w*(Jw(p)/Hw)^2*pi*D)), 0.4)
end
is there anybody to help me?

採用された回答

Parham Babakhani Dehkordi
Parham Babakhani Dehkordi 2015 年 4 月 2 日
D=0.040; A=pi*D^2/4; Jo=0.74; Jw=[0.35 0.25 0.19 0.12 0.08 .06 0.04]; ro_o=910; ro_w=1000; mu_w=0.001; mu_o=0.92;
fun=@(Hw,Jw) (((8*ro_o*((D-(2*sqrt(Hw*A/pi)))*(Jo/(1-Hw))*ro_o/mu_o)^-1.0)*(Jo/(1-Hw))^2)*(pi*(D-(2*sqrt(Hw*A/pi)))*(1/(1-Hw))))-((0.023*((Jw*D*ro_w/mu_w)^-.2)*ro_w*(Jw/Hw)^2*pi*D)) ;
for p=1:length(Jw)
Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[-0.4 0.4]);
end
your guess is right, this an error again:
Error using fzero (line 242) Function values at interval endpoints must be finite and real.
Error in by_using_fminbnd (line 21) Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[-0.4 0.4]);
Do you have any other functions or approach that you can suggest me to avoid going to an infinite value?
  2 件のコメント
Parham Babakhani Dehkordi
Parham Babakhani Dehkordi 2015 年 4 月 2 日
D=0.040; A=pi*D^2/4; Jo=0.74; Jw=[0.35 0.25 0.19 0.12 0.08 .06 0.04]; ro_o=910; ro_w=1000; mu_w=0.001; mu_o=0.92;
fun=@(Hw,Jw) (((8*ro_o*((D-(2*sqrt(Hw*A/pi)))*(Jo/(1-Hw))*ro_o/mu_o)^-1.0)*(Jo/(1-Hw))^2)*(pi*(D-(2*sqrt(Hw*A/pi)))*(1/(1-Hw))))-((0.023*((Jw*D*ro_w/mu_w)^-.2)*ro_w*(Jw/Hw)^2*pi*D)) ;
for p=1:length(Jw)
Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[-0.4 0.4]);
end
your guess is right, this an error again:
Error using fzero (line 242) Function values at interval endpoints must be finite and real.
Error in by_using_fminbnd (line 21) Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[-0.4 0.4]);
Do you have any other functions or approach that you can suggest me to avoid going to an infinite value?
Torsten
Torsten 2015 年 4 月 2 日
You have sqrt(Hw*A/pi) in your formula for the function.
sqrt(-0.4*A/pi) gives a complex number ...
Best wishes
Torsten.

サインインしてコメントする。

その他の回答 (1 件)

Torsten
Torsten 2015 年 4 月 2 日
In your function definition, you divide by Hw. Thus your left interval endpoint is not allowed to be 0.
Further:
Did you test that your function produces results of different sign at the endpoints of the interval ? My guess is no since you did not recognize that f(0)=Infinity.
Further you should use:
D=0.040; A=pi*D^2/4; Jo=0.74; Jw=[0.35 0.25 0.19 0.12 0.08 .06 0.04]; ro_o=910; ro_w=1000; mu_w=0.001; mu_o=0.92;
fun=@(Hw,Jw) (((8*ro_o*((D-(2*sqrt(Hw*A/pi)))*(Jo/(1-Hw))*ro_o/mu_o)^-1.0)*(Jo/(1-Hw))^2)*(pi*(D-(2*sqrt(Hw*A/pi)))*(1/(1-Hw))))-((0.023*((Jw*D*ro_w/mu_w)^-.2)*ro_w*(Jw/Hw)^2*pi*D)) ;
for p=1:length(Jw)
Hw(p)=fzero(@(Hw) fun(Hw,Jw(p)),[0 0.4]);
end
Best wishes
Torsten.

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by