在Matlab中寻求帮助解决超越方程。 例如下面的等式:
1/2 = cos(x)cos(2x); 0 <= x <= pi / 2 解决x:
x = acos((1/2)(sec(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)的值?
答案 0 :(得分:1)
有关真正的问题找到一个数值解它不,如果你有一个多项式甚至超越方程。通常,对于您的特定问题有两个漂亮的内置插件:fzero
试图找到一个函数的根f
,这是一个价值x
其中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);