2

寻求帮助解决Matlab中的超越方程。例如,这是一个等式:

1/2 = cos(x)cos(2x) ; 0<=x<=pi/2 求解 x:

x = acos((1/2)(秒(2x))

我尝试过使用 intersect() 以及其他各种 Matlab 函数。当我使用以下代码进行绘图时,很容易看到 ~.48 的近似值:

x = 0:(pi/2)/1000:pi/2;
f = @(x) (1/2)*acos((1/2)*sec(x));
plot(x,f(x));

如何让 Matlab 返回 x == f(x) 在一定容差内的值?

4

1 回答 1

1

为了找到一个数值解,如果你有一个多项式甚至一个超越方程并不重要。一般来说,对于您的特定问题,有两个不错的内置函数:fzero尝试找到函数的根f,即xwhere的值f(x) == 0。您需要提供初步估计,但不能提供界限。然后是fminbnd最小你的功能,所以你必须把你的问题写成最小化问题。但在这种情况下,您可以提供界限:

format long
% find a root (unbounded)
f=@(x)1/2 - cos(x).*cos(2*x);
z = fzero(f,0,optimset('TolX',1e-5));
disp(z);

% find a minimum (bounded)
g=@(x)(f(x)).^2;
z = fminbnd(g,0,pi/2,optimset('TolX',1e-5));
disp(z);

在线尝试!

于 2019-01-31T18:41:52.510 回答