Решение уравнений

Методы нахождения корней полиномов, решения уравнений, содержащих элементарные и специальные функции и систем сложных уравнений

Версия для печати

Системы уравнений

Maple может решать системы линейных и нелинейных уравнений, но это хитрое дело, поскольку, чтобы разобраться в происходящем, надо рисовать уравнения, а это сложнее, так как пространство решений – многомерное.

Применяются команды solve и fsolve, но в этом случае им задаются наборы (в фигурных скобках) уравнений и переменных.

В первом примере используем solve для простой задачи линейной алгебры: John вдвое старше Kimberly. Возраст Kimberly плюс возраст John равен 27. Найти возраст каждого. Если использовать пакет LinearAlgebra, то придется рассматривать матрицу, но можно применить solvefsolve), которые могут непосредственно работать с уравнениями:

  • restart;
  • E1:=J=2*K;E2:=K+J=27;
  • solve({E1,E2},{J,K});
  • fsolve({E1,E2},{J,K});

Поскольку не надо беспокоиться о переводе в матричный вид, то получился иной метод решения систем линейных уравнений.

solve и fsolve можно применять для решения нелинейных систем, т. е. систем уравнений, в которых переменные – квадраты, кубы, синусы, экспоненты и т. п. Например, вот система двух нелинейных уравнений:

  • restart;
  • E1:=x^2-y=5;E2:=x-y^2=-13;

Вначале попробуем применить команду solve:

  • s:=solve({E1,E2},{x,y});

Maple сделал по-умному: чтобы получить уравнение для х, он исключил у из Е2 с помощью Е1. Затем он факторизовал это квадратное уравнение, выдал ответ (x,y)=(3,4) и свел оставшуюся часть задачи к кубической. Если завершить задачу командой evalf, получим:

  • evalf(s);

Но если нарисовать кубическую часть в RootOf (для оценки положения корней), то увидите, что есть еще два решения. Где же они? Примените fsolve и получите:

  • s:=fsolve({E1,E2},{x,y});

что еще хуже, так как дает один корень. Для поиска корней можно задавать примерно правильные числа в качестве подсказок для fsolve:

  • s:=fsolve({E1,E2},{x=2.9,y=4.1});

Простой способ заставить Maple дать все 4 корня: повторяйте процедуру, заменяя все целые числа на числа с плавающей точкой:

  • restart;
  • E1:=x^2.-y=5.;E2:=x-y^2.=-13.;
  • s:=solve({E1,E2},{x,y});

Будьте изобретательны
и пробуйте разные пути решения задачи,
возможно, один сработает.

В Maple есть другой полезный инструмент для случая двух нелинейных уравнений с двумя неизвестными. Точно так же, как в задачах с одной переменной, полезно сначала строить график, чтобы увидеть, где есть решения. В данном случае двумерные графики помогут искать корни двух неизвестных величин. Примените команду построения графиков implicitplot, которая берет уравнение с двумя переменными, вроде x2y = 5, и строит определяющую их кривую в плоскости xy (для добавления команды графики надо вначале загрузить пакет графики with(plots)):

  • with(plots):
  • implicitplot(x^2-y=5,x=-3..3,y=-6..3);

Для графического поиска решений постройте оба уравнения на одном графике и посмотрите, где две кривые пересекают друг друга.

  • implicitplot({x^2-y=5,x-y^2=-13},x=-14..4,y=-6..5,
    numpoints=5000);

Из картинки ясно, что две параболы пересекаются в четырех местах, поэтому должно быть четыре решения. Окно графика должно быть достаточным, чтобы увидеть всю картинку. А если оно мало, то получится вот что:

  • implicitplot({x^2-y=5,x-y^2=-13},x=-3..3,y=-5..3,
    numpoints=5000);

Если у вас есть три нелинейных уравнения с тремя переменными, implicitplot3d может сделать нечто подобное (см. Maple help).

Задача 6.3 о решениях системы уравнений

Найдите все решения (Re и Im) системы уравнений

Чтобы определить количество искомых корней, сначала постройте график с помощью implicitplot.

Вот еще нелинейная система:

  • restart;
  • E1:=cos(x)+y-sqrt(z)=-.191748502;E2:=x*y*z=3;E3:=x+y+2*z=8;

Вначале попробуем solve:

  • solve({E1,E2,E3},{x,y,z});

(Maple на мгновение задумается, но ничего не произойдет.) Теперь попробуем fsolve с диапазонами для каждой переменной:

  • fsolve({E1,E2,E3},{x,y,z},{x=-3..3,y=-3..3,z=-3..3});

Похоже, что (x, y, z) = (1, 1, 3) достаточно близко к решению. Предупреждение: в трех и более измерениях Maple может ошибиться и работать, несмотря на то, что:

(a) известно, что здесь есть решение и

(b) указано, где искать приближенное значение корня.

Для лучшего понимания, где следует искать решение, можно применить implicitplot3d:

  • with(plots):
  • implicitplot3d({E1,E2,E3},x=-5..5,y=-5..5,z=0..5);

Щелкните на рисунке и покрутите его, чтобы разглядеть подробнее. После этого перерисуйте график так, чтобы он был вблизи известного решения: [x, y, z]=[1, 1, 3]:

  • implicitplot3d({E1,E2,E3},x=.5..1.5,y=.5..1.5,z=2.5..3.5,
    grid=[20,20,20]);

В середине графика все три поверхности – E1, E2 и E3 – пересекаются в точке. Это и есть то, что искали с помощью implicitplot3d, но в целом рассматривать трехмерные задачи сложно.

Задача 6.4 о нахождении аппроксимирующей функции

Пусть гладкая функция y(x) представлена тремя точками (x1, y1), (x2, y2), (x3, y3). Предположим, что эти точки определяют параболу вида y(x) = a + bx + cx2 и что есть три аппроксимирующих уравнения для нахождения коэффициентов параболы a, b, c. Постройте эти три уравнения и используйте solve, чтобы найти формулы для a, b, c, а затем определите выражение Maple для параболы.

Задание выглядит вполне приемлемо для равноотстоящих точек. Пусть x2 = x1 + h и x3 = x1 + 2h. Упростим выражения для a, b, c. В результате получили приближенную форму функции, с которой можно работать:

(a) Оцените площадь под кривой между x1 и x3 путем интегрирования параболы между этими двумя пределами. Получится правило Симпсона. Чтобы посмотреть, хорош ли этот приближенный интеграл, задайте x1 = 0, x2 = 0.5, x3 = 1.0 и y1 = cos(x1), y2 = cos(x2), y3 = cos(x3), при этом приближенное значение площади будет близко к Дает ли формула приближенного интегрирования хороший результат?

(b) Оцените производную функции у(х) в средней точке х2 путем дифференцирования параболы и вычисления значения производной в x = x2. Она называется формулой центральных разностей для первой производной. Проверьте ее точность при x2 = 0.5, используя x1 = 0.4 и x3 = 0.6 с функцией

(c) Повторно дифференцируя формулу параболы, оцените вторую производную функции у(х) в x2. Это центральная вторая производная для равноотстоящих точек. Проверьте ее точность, как в части (b).

Эти формулы дифференцирования и интегрирования понадобятся в курсе физики.