【发布时间】:2015-03-21 06:57:27
【问题描述】:
我只想找到方程的真正根;
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 间隔,但显示相同的错误。如何修复我的代码?
【问题讨论】:
-
乍一看,
abs/real等可能会有所帮助。 -
您可以尝试以下操作:在区间
[0, 2.5]中绘制函数的绝对值。您将看到{0, ~0.9, ~1.7}可能存在三个根。然后你可以使用fminsearch代替abs(fun(x))或newtzero 来自文件交换为f(x)三个起始值{0, 0.9, 1.7},看看迭代给出了什么。
标签: matlab root polynomial-math