Нахождение действительных корней многочлена с помощью fzero

Я хочу найти только действительные корни уравнения, которое есть;

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) Значения функции в конечных точках интервала должны быть конечными и действительными.

Ошибка в схолте (строка 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, но он показывал ту же ошибку. Как я могу исправить свой код?


person CanYusuf    schedule 22.01.2015    source источник
comment
На первый взгляд кажется, что abs / real и т. Д. Могут помочь.   -  person Stewie Griffin    schedule 22.01.2015
comment
Вы можете попробовать следующее: Постройте абс функции в интервале [0, 2.5]. Вы увидите, что это, возможно, три корня в {0, ~0.9, ~1.7}. Затем вы можете использовать fminsearch для abs(fun(x)) или newtzero из обмена файлами для f(x) с три начальных значения {0, 0.9, 1.7} и посмотрите, что даст итерация.   -  person knedlsepp    schedule 22.01.2015


Ответы (1)


Ваша проблема, как сообщает вам Matlab, заключается в том, что Function values at interval endpoints must be finite and real, а в вашем случае они не настоящие:

fun(x0(1))

ans =

  -1.0000 + 0.1454i

Ваша функция, вероятно, слишком сложна для fzero. Однако я не эксперт, давайте посмотрим, сможет ли кто-нибудь с большим знанием, чем я, указать вам правильное направление для решения этого уравнения.

person Ander Biguri    schedule 22.01.2015
comment
Спасибо, Андер. Я с нетерпением жду правильного направления - person CanYusuf; 22.01.2015
comment
... просто слишком сложно. А может это просто мнимая причина? - person Stewie Griffin; 22.01.2015