MATLAB просто в безопасности.
Символический набор инструментов может сделать невероятные упрощения, , включая те, которые используют тригонометрические функции . Большинство упрощений, которые вы хотите сделать в MATLAB, произойдут, когда вы позвоните в упрощение, но то, что вы опубликовали, имеет небольшую проблему.
Проблема здесь может быть показана, если вы попытаетесь упростить ваше равенство.
Посмотрите на этот простой пример:
simplify(x==x) % Returns symbolic "TRUE"
На этой ноте я бы ожидал, что строка ниже также вернет TRUE
.
simplify(tan(x) == sin(x) / cos(x))
Но вместо этого он возвращает ~x in Dom::ImageSet(pi*(k + 1/2), k, Z_)
Когда x находится в наборе, описанном выше {..., -pi/2, pi/2, 3pi/2, ...}
, это означает cos(x) == 0
, а sin(x)/cos(x)
вызывает ошибку деления на ноль, тогда как tan(x)
приближается к значению inf
. Следовательно, при этих значениях tan(x) ~= sin(x)/cos(x)
.
Эксперимент
Из любопытства я запустил следующий скрипт:
clc, clear;
% Create the symbolic variable and remove all assumptions placed on it.
syms x;
assume(x,'clear');
% Define the function, and test MATLAB's behavior
y = sin(x)/cos(x);
disp('Before assuming:');
disp(simplify(y));
disp(simplify(tan(x) == y));
% Place restriction on cos(x), and re-test MATLAB's behavior
assume(cos(x) ~= 0);
disp('After assuming:');
disp(simplify(y));
disp(simplify(tan(x) == y));
И вывод был:
Before assuming:
sin(x)/cos(x)
~x in Dom::ImageSet(pi*(k + 1/2), k, Z_)
After assuming:
sin(x)/cos(x)
TRUE
Как и ожидалось, это не упростило функцию в первый раз, потому что cos(x)
может равняться нулю. Второй результат был неожиданным. После того, как сделано предположение, что cos(x) ~= 0
, MATLAB правильно заявил, что tan(x) == sin(x)/cos(x)
верно, но все еще не упростило выражение. Это может быть связано со сложностью процесса упрощения или с проблемой безопасности, поскольку в любой момент я мог очистить предположение, и равенство больше не будет иметь места.