Решение трансцендентного уравнения в Matlab - PullRequest
0 голосов
/ 31 января 2019

Нужна помощь в решении трансцендентных уравнений в Matlab.Вот уравнение, например:

1/2 = cos (x) cos (2x);Решение 0 <= x <= pi / 2 для x: </p>

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 голосов
/ 31 января 2019

Для нахождения численного решения на самом деле не имеет значения, есть ли у вас полином или даже трансцендентное уравнение.В общем случае для вашей конкретной проблемы есть две приятные встроенные функции: 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);

Попробуйте онлайн!

...