Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

rukovodstvo_MathCAD / Глава 5

.doc
Скачиваний:
33
Добавлен:
17.02.2016
Размер:
100.86 Кб
Скачать

Глава 5. Вычисление корней многочлена.

Многочлены (целые рациональные функции) имеют совершенно исключительное значение в математике, поэтому вопрос о вычислении корней (нулей) многочленов целесообразно рассматривать отдельно.

В Mathcad для вычисления корней многочленов предусмотрены два способа: использование встроенной функции polyroots, работающей с числовым процессором и применение оператора solve, решающего широкий круг задач и работающего с символьным процессором.

1. Функция polyroots.

Аргументом функции polyroots является вектор-столбец коэффициентов многочлена, корни которого требуется вычислить (начиная с коэффициента при нулевой степени).

Пример 1.

Пусть требуется вычислить корни многочлена:

Вектор-столбец коэффициентов:

Для формирования вектора коэффициентов удобно использовать оператор coeffs из палитры Symbolic.

Пример 2.

Пусть требуется вычислить корни многочлена:

Сформируем вектор-столбец его коэффициентов:

Подчеркнем, что оператор coeffs не нуждается в том, чтобы многочлен был записан в канонической форме. Если многочлен задан в форме сумм и произведений (см. пример 3), то оператор coeffs сам преобразует его к канонической форме и сформирует вектор коэффициентов.

Замечание. Для того, чтобы представить многочлен в канонической форме служит оператор collect из палитры Symbolic.

Пример 3.

Пусть дан многочлен:

Построим вектор-столбец его коэффициентов:

Теперь представим многочлен q(x) в канонической форме:

По умолчанию для поиска корней полинома используется метод ЛаГерра (LaGuerre), но функция polyroots может использовать также и метод матриц-компаньонов. Чтобы выбрать именно этот метод, поставьте курсор мыши на функцию polyroots и щелкните правой кнопкой мыши. Теперь вам достаточно выбрать пункт Companion Matrix из всплывающего меню. Какой из двух численных методов выбрать? Почему Mathcad отдает предпочтение методу LaGuerre, а не Companion Matrix? Теория численных методов не дает однозначного ответа на первый вопрос. В приведенных ниже примерах метод Companion Matrix демонстрирует более высокую точность, чем метод LaGuerre. Но это ничего не доказывает. Можно только отметить, что в силу ряда причин точность метода LaGuerre резко падает с возрастанием степени многочлена. Что касается второго вопроса, то, по-видимому, разработчики численного процессора Mathcad исходили из того, что метод LaGuerre имеет репутацию исключительно надежного метода счета. На наш взгляд, за исключением очень простых случаев, целесообразно вычислять корни двумя методами, а затем, подставив полученные значения корней в многочлен, оценить точность (см. пример 4).

Пример 4.

Пусть дан многочлен:

Построим вектор-столбец его коэффициентов:

Используем вначале метод LaGuerre:

Теперь воспользуемся методом Companion Matrix:

Заканчивая описание функции polyroots, отметим одно ее чрезвычайно важное свойство. Функция polyroots может вычислять корни многочленов с комплексными коэффициентами (см. пример 5).

Пусть дан многочлен:

Пример 5.

Построим вектор-столбец его коэффициентов:

Используем вначале метод LaGuerre:

Теперь воспользуемся методом Companion Matrix:

2. Оператор solve.

Оператор solve исключительно прост в использовании. Не требуется формировать вектор коэффициентов, достаточно записать многочлен (необязательно в канонической форме), а затем ввести оператор solve из палитры Symbolic.

Так как оператор solve работает с символьным процессором, необходимо учитывать, что, в зависимости от вида операнда, задача будет решаться точно или численным методом. Если вместе с оператором solve используется оператор float, символьный процессор использует численный метод.

Замечание. Если символьный процессор, получив инструкцию решить задачу точно, не смог найти решение, он, не прибегая к помощи численного процессора для поиска приближенного решения, выдаст сообщение “No solution found” (решение не найдено).

Оператор solve (если вместе с ним не используется оператор float) даст указание символьному процессору найти корни уравнения точно, если все числа в многочлене записаны без десятичной точки. Кроме целых чисел в записи многочлена могут содержаться радикалы из целых положительных чисел, а также символы π и е.

Что понимает символьный процессор под точным определением корней? Очевидно, что в том случае, когда все корни уравнения рациональные числа, их следует вычислить без погрешности. Но, кроме этого, символьный процессор может записать корни в форме радикалов, а если это не удается, в форме тригонометрических выражений (см. пример 6).

Пример 6.

Если коэффициенты многочлена содержат десятичную точку, то символьный процессор получит указание найти численные значения корней и записать их, используя двадцатиразрядные числа.

Замечание. В Mathcad 14.0 вы получите тот же результат, но в показательной форме.

Какой численный метод использует Mathcad для нахождения корней? К сожалению, фирма MathSoft не сообщает этого пользователю. (Вообще, «Руководство пользователя» и справочная система Mathcad ничего не сообщают о методах, используемых в работе символьного процессора.)

В целом, корни многочленов с действительными коэффициентами символьный процессор находит точнее, чем численный процессор.

Отметим одну деталь. Иногда при вычислении кратных корней символьный процессор сообщает пользователю только об одном из них (см. пример 7).

Пример 7.

Замечание. В Mathcad 14.0 вы получите при решении того же примера следующий результат:

Если многочлен имеет комплексные коэффициенты, то использование оператора solve может не дать результата. До 14-той версии Mathcad при вычислении корней многочлена с комплексными коэффициентами оператор solve зачастую выдает только один корень. Но он может, вообще говоря, найти и все n корней (если многочлен ему понравится). (См. примеры 8 и 9).

Пример 8.

Ограничим число разрядов в ответе:

Оператор float, задающий число разрядов в получаемом символьным процессором результате, также как и оператор solve берется из палитры Symbolic.

Замечание. Mathcad 14.0 в этом случае найдет все пять корней многочлена.

Пример 9.

Дан многочлен:

Найдем его корни с помощью оператора solve:

3. Проблемы при вычислении корней многочлена.

При использовании любого численного метода принципиально возможны два дефекта:

  1. низкая точность вычисления корней;

  2. зацикливание, когда вообще не удается получить результат.

Сложность задачи вычисления корней зависит от:

  1. близости корней. Чем меньше расстояние между корнями, тем труднее задача.

  2. степени многочлена. Чем выше степень, тем труднее получить значения всех корней с высокой точностью.

Задача вычисления корней многочлена очень чувствительна к изменению значений коэффициентов.

Рассмотрим два многочлена:

h1(z) = (z - 2)3 = 0 и h2(z) = (z - 2)3 – 10-6 = 0

Значения младших коэффициентов многочленов h1(z) и h2(z) различаются на 0.000001. А значения корней –на 0.01, причем два корня стали комплексными!

h1(z)

h2(z)

z1 = 2

z1 = 2.0100

z2 = 2

z2 = 1.9950 + i·0.0087

z3 = 2

z3 = 1.9950 - i·0.0087

Итоговые упражнения.

  1. Найти все коэффициенты многочлена: (x-2)·(x-3.7)·(x-5) и представить его в канонической форме.

  2. Найти все корни многочлена: 1.7x6 + 3.8x4 –5.7x3 + 1.9x2 – 0.4x +1.1 = 0.

  3. Найти все корни многочлена: z5-1=0 различными способами.

  4. Найти все корни многочлена: z3+(3.2-1.4iz+1=0

79

Соседние файлы в папке rukovodstvo_MathCAD