[英]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.