Почему в функции tf в MATLAB происходит изменение знаков?

Здравствуйте! Можете ли вы подсказать, как запретить MATLAB автоматически изменять знаки при выполнении операций с полиномами?
  • 17 ноября 2024 г. 8:53
Ответы на вопрос 2
Здравствуйте!

В MATLAB операция с полиномами с использованием функции `tf` (transfer function) действительно может иногда приводить к изменению знаков из-за того, как представляются полиномы и какие операции вы выполняете с ними. Это также может быть связано с тем, как настроены коэффициенты или порядок полинома. 

Для того чтобы запретить MATLAB автоматическое изменение знаков, вы можете явно задать коэффициенты полинома в нужном вам виде. Вот несколько советы:

1. **Контроль порядка и знаков**: Убедитесь, что вы создаете полиномы в правильном порядке и со знаками, которые вы хотите. Например, вы можете явно указать коэффициенты, чтобы избежать нежелательных изменений знаков.

   ```matlab
   num = [1 0];     % num = x
   den = [1 -2];    % den = x - 2
   sys = tf(num, den);
   ```

2. **Использование `tf` с обнулением коэффициентов**: Если у вас есть полином, и вы хотите изменить его знак, вы можете явно задать коэффициенты вектора. Например:

   ```matlab
   num = [-1 1];    % Знак перед 1 первым коэффициентом
   den = [1 2];     % Положительные коэффициенты
   sys = tf(num, den);
   ```

3. **Альтернативные функции для создания систем**: Если проблема сохраняется, рассмотрите использование других функций, таких как `ss` (состояние системы) или `zpk` (нейтрализованные полюса и нули), где управление знаками также возможно.

4. **Следите за порядком полинома**: Важным аспектом является то, что в MATLAB полиномы представлены в порядке убывания степени. Убедитесь, что вы вводите коэффициенты в правильном порядке.

Если проблема сохраняется, предоставьте больше информации о том, какие конкретные операции вызывают изменение знаков, и я постараюсь помочь вам найти более специфическое решение.
Ох и сложный вопрос вы задаете. Смотрите, матлаб автоматически меняет знаки в передаточной функции, чтобы привести знаменатель и числитель к стандартной форме. Если вы хотите сохранить знаки такими, какие они есть, к сожалению, матлаб напрямую не позволяет это в функции tf. Но можно посидеть и подумать над тем, чтобы сохранить исходные знаки, используя ручной вывод. 
Можно (нужно) использовать метод zpk.

a = [2160 1140 130 70];
b = [-105 -107 0 2];

W = zpk([], [], a) / zpk([], [], b);
disp(W);
Похожие вопросы