用fzero求多项式的实根

时间:2015-01-22 13:04:58

标签: matlab root polynomial-math

我只想找到等式的真正根源;

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)))

我知道这个等式包括复杂的根,但我不想看到它们。而且,我的代码失败并说出来了;

  

使用fzero时出错(第242行)间隔端点处的函数值   必须是有限的和真实的。

     

scholte中的错误(第21行)x = fzero(fun,x0)

这是我的代码;

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)

我多次更改了x0间隔,但它显示了相同的错误。我该如何修复我的代码?

1 个答案:

答案 0 :(得分:0)

正如Matlab告诉你的那样,你的问题是Function values at interval endpoints must be finite and real,在你的情况下,它们并不真实:

fun(x0(1))

ans =

  -1.0000 + 0.1454i

您的功能可能过于复杂,fzero无法处理。但是,我不是专家,让我们看看是否有比我更多知识的人可以指出你正确的方向来解决这个等式。