簡體   English   中英

使用fzero查找多項式的實根

[英]Finding real roots of polynomial by using 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行)區間端點處的函數值必須是有限且實數。

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間隔,但顯示了相同的錯誤。 如何修復我的代碼?

正如Matlab告訴您的那樣,您的問題是Function values at interval endpoints must be finite and real ,而在您的情況下,它們不是實數:

fun(x0(1))

ans =

  -1.0000 + 0.1454i

您的函數可能太復雜而無法處理fzero 但是我不是專家,讓我們看看是否有人比我了解更多知識,可以為您指出解決該方程式的正確方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM