在Matlab中求解先验方程

时间:2019-01-31 16:53:16

标签: matlab intersection trigonometry numerical-integration transcendental-equation

在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)的值?

1 个答案:

答案 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);

Try it online!