CanYusuf
CanYusuf

Reputation: 65

Finding real roots of polynomial by using fzero

I want to find only real roots of the equation which is ;

4*sqrt((1-(z^2/f1^2))*(1-z^2))-(2-z^2)^2-(m*z^4*sqrt(1-z^2/f1^2)/ ...
  sqrt(1-((z^2/f1^2)/y^2)))

I know that equation includes complex roots, but I do not want to see them. Moreover, my code fails and says that;

Error using fzero (line 242) Function values at interval endpoints must be finite and real.

Error in scholte (line 21) x=fzero(fun,x0)

Here is my code;

rho2 = 1000; %kg/m3    
rho1 = 2700; %kg/m3    
cl2 = 1481; %m/s    
cl1 = 5919; %m/s    
m = rho2/rho1;    
y = cl2/cl1;    
poi = 0.25;

f1 = (sqrt((1-2*poi)/(2*(1-poi))))^-1;

fun = @(z) 4*sqrt((1-(z^2/f1^2))*(1-z^2))-(2-z^2)^2- ...
      (m*z^4*sqrt(1-z^2/f1^2)/sqrt(1-((z^2/f1^2)/y^2)));

x0 = [1 10];

x = fzero(fun, x0)

I changed x0 interval many times, but it showed the same error. How can I fix my code?

Upvotes: 1

Views: 1235

Answers (1)

Ander Biguri
Ander Biguri

Reputation: 35525

Your problem, as Matlab tells you, is that Function values at interval endpoints must be finite and real, and in your case they are not real:

fun(x0(1))

ans =

  -1.0000 + 0.1454i

Your function is probably just too complex for fzero to handle. However I am not an expert, lets see if someone with more knowledge than me can point you in the correct direction for solving that equation.

Upvotes: 0

Related Questions