MATHCAD 14: Основные сервисы и технологии

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

Показывать лекцию целиком

Цель лекции. Показать технику численного решения нелинейных уравнений с использованием сервисов MathCAD. Показать различные методы аналитического решения систем линейных уравнений.

4.1. Численное решение нелинейных уравнений

Относительно небольшое количество задач решения уравнений можно решить аналитически. Аналитическое решение предполагает точное определение корней либо нахождение алгоритма, по которому корни всегда могут быть найдены. На практике часто приходится искать решение при помощи численных методов [1, 11]. Уравнения решаются численными методами с заданной погрешностью. В MathCAD погрешность задается системной константой TOL. Как правило, отыскание корней алгебраического уравнения (или системы уравнений) численными методами связано с двумя задачами:

  • локализация корней, т. е. определение их существования в принципе, а также исследование их количества и примерного расположения;
  • собственно отыскание корней с заданной погрешностью
  • Для численного решения уравнений в MathCAD существуют встроенные функции[1, 10], в которых реализованы алгоритмы известных численных методов: итерационный метод секущих; различные градиентные методы и другие. Почти все встроенные функции предполагают, что корни уже приблизительно локализованы.

    Использование функции root()

    Рассмотрим решение простейших уравнений вида F(x)=0. Решить уравнение – значит найти все его корни, т.е. такие числа, при подстановке которых в исходное уравнение получим верное равенство. Если функция нескольких аргументов F(x, у, ..)=0. , все остальные значения должны быть заданы для искомого x. Для локализации корней (исследования их количества и примерного расположения) полезно построить график функции и определить все точки пересечения графика функции с осью OX.

    Функция root () вычисляет значение переменной, при котором F(x, у, ..)=0. Если уравнение имеет несколько корней, функцию надо вызывать соответствующее число раз. Вычисления реализуются итерационным методом. Данный метод заключается в постепенном приближении к искомому корню с некоторой точностью от начального значения переменной. Точность вычислений задаётся системной переменной TOL, определённой в меню Tools/ Worksheet Options.. По умолчанию равной 0.001.

    root(F(x, у, ...), x, [a, b]) возвращает с заданной точностью значение переменной, x, лежащей между a и b при котором функция равна нулю. Значения F() для a и b должны быть разных знаков. Третий аргумент не обязателен. Выбор решения определяется выбором начального значения переменной

    Пример 4.1

    Решить уравнение $$5y^2\ln{(y+4)}-3\ln{(3y+2)}=0$$

  • Зададим функцию $$f(y)=5y^2\ln{(y+4)}-3\ln{(3y+2)}$$
  • Найдем начальные значения корней. Для этого построим график функции. Подберем масштаб для наилучшего визуального наблюдения точек пересечения графика с осью OX.
  • Точки пересечения графика с осью OX лежат в интервалах (-1; 0) и (0; 1)
  • Определили начальные приближения корней. Используем функцию root()
  • Можно провести проверку,
  • $$f(y):=5y^2\ln{(y+4)}-3\ln{(3y+2)}$$

    1 корень:

    $$y:=-1$$

    $$y1:=root(f(y),y)$$

    $$y1:=-0.274$$

    Проверка: $$f(y1):=9.548 \cdot 10^{-15}$$

    2 корень:

    $$y:=1$$

    $$y1:=root(f(y),y)$$

    $$y1:=0.746$$

    Проверка: $$f(y):=3.219$$

    (рис 4.1) Листинг решения примера 4.1

    Если корней уравнения много (больше двух) или надо исследовать определенную область на наличие корней, применяют сканирование. Оно состоит в последовательном поиске корня, начиная из множества пробных точек, покрывающих расчетную область.

    Пример 4.2

    Решить уравнение $$F1(z,y)=z^3-9z^2+20z+yz+2y^3-15y=0$$ для $$y=2$$.

    Осуществляется решение уравнения при помощи функции root, для нескольких последовательных начальных значений корней. Результат выдается в виде табулированных значений – таблицы.

  • Задаем уравнение F1().
  • Строим график.
  • Всегда существует вероятность "просмотреть" корень, расположенный между узлами сканирования. Начальное значение корня z0 вводим как табулированную переменную в визуальной области корней, определенной по графику.
  • Строим функцию U(z0) как решение через root() - значение корня уравнения F1(z0,y)=0. То есть определяется разный корень в зависимости от начального значения z0.
  • $$y:=2$$

    $$F1(z,y):=z^3-9z^2+20z+yz+2y^3-15y$$

    Начальное значение корня z:

    $$z0:=-2,0..8$$

    $$u(z0):=root(F1(z0,y),z0)$$

    $$u(z0):=\begin{array}{|c|ccccc|}\hline 1 \\ \hline 1 \\ \hline 2.5858 \\ \hline 1 \\ \hline 5.4142 \\ \hline 5.4142\\ \hline \end{array}$$

    Проверка:

    $$F1(1,y):=0$$

    $$F1(2.5858,y)=-6.0831 \cdot 10^{-5}$$

    $$F1(5.4142,y)=-1.6933 \cdot 10^{-4}$$

    (рис 4.2) Листинг решения примера 4.2

    Функция поиска корней полинома polyroots()

    Для поиска корней обычного полинома р(х) степени n MathCAD содержит очень удобную функцию:

    polyroots(V) возвращает вектор корней многочлена (полинома) степени n, коэффициенты которого находятся в векторе V, имеющем длину равную n+1.

    Пример 4.3

    Решить уравнение $$x^5-2x^4-3x^3-x^2-4x=-21$$.

    Осуществляется решение уравнения при помощи функции polyroots() (Рис.4.3).

  • Задаем вектор, элементы которого – коэффициенты полинома, начиная со свободного члена.
  • Используем функцию polyroots().
  • Решение представляется в виде матрицы, включающей все корни, в том числе и комплексные.
  • $$f(x):=(x^5-2x^4-3x^3-x^2-4x+21)$$

    $$f(x)\large{=}0$$

    $$V:=\begin{array}{|c|ccccc|}\hline 21 \\ \hline -4 \\ \hline -1 \\ \hline -3 \\ \hline -2 \\ \hline 1\\ \hline \end{array}$$

    $$x:=polyroots(V)$$

    $$x:=\begin{array}{|c|ccccc|}\hline -1.835 \\ \hline -0.334+1.557i \\ \hline -0.334-1.557i \\ \hline 1.503 \\ \hline 3 \\ \hline \end{array}$$

    Проверка:

    $$f(x):=\begin{array}{|c|ccccc|}\hline -3.289 \cdot 10^{-10} \\ \hline -3.289 \cdot 10^{-10} \\ \hline -3.289 \cdot 10^{-10}-1.421i \cdot 10^{-14} \\ \hline -3.289 \cdot 10^{-10} \\ \hline -3.289 \cdot 10^{-10} \\ \hline \end{array}$$

    4.2.Численное решение систем нелинейных уравнений

    Поиск корней при помощи блока Given Find()

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

    Given

    Уравнения

    Ограничительные условия

    Выражения с функцией Find()

    Find(vl, v2, …, vn) — возвращает значение одной или ряда переменных для точного решения;

    Знак равенства в уравнениях вызывается с математической панели БУЛЕВО(Boolean) или с клавиатуры клавишами "CTRL =".

    Как и в предыдущем случае, сначала необходимо провести локализацию корней – задание начальной точки, от которой будет происходить поиск решения. Решение ищется методом итераций и при наличии нескольких корней, очевидно, будет найдено лишь ближайшее решение, если оно существует. Блок Given…Find(.) можно использовать и для решения уравнений одним неизвестным.

    Пример 4.4

    Решить систему уравнений $${y-e^{\frac{x}{3}}=0\choose y-x^2-1=0}$$.

    Осуществляется решение системы нелинейных уравнений при помощи блока Given…Find(.) (Рис.4.3).

  • Локализация корней: задаем систему уравнений, строим график.
  • По графику определяем три корня.
  • Задаем последовательно разные начальные значения корней.
  • $$y1(x1):=e^{\frac{x1}{3}}$$

    $$y2(x1):=x1^2+1$$

    (рис 4.3) Листинг решения примера 4.4

    1 корень

    $$x:=1$$, $$y:=1$$

    $$Given$$

    $$e^{\frac{x}{3}}-y=0$$

    $$x^2-y+1=0$$

    $$Find(x,y)=\begin{pmatrix} 0.354 \\ 1.125 \end{pmatrix}$$

    2 корень

    $$x:=0.1$$, $$y:=0.1$$

    $$Given$$

    $$e^{\frac{x}{3}}-y=0$$

    $$x^2-y+1=0$$

    $$Find(x,y)=\begin{pmatrix} -2.631 \cdot 10^{-9} \\ 1 \end{pmatrix}$$

    3 корень

    $$x1:=20$$, $$y1:=100$$

    $$Given$$

    $$e^{\frac{x1}{3}}-y1=0$$

    $$x1^2-y1+1=0$$

    $$Find(x1,y1)=\begin{pmatrix} 17.015 \\ 290.506 \end{pmatrix}$$

    Поиск корней при помощи блока Given Minerr()

    Функция Minerr использует тот же самый алгоритм, что и функция Find. Различие состоит в следующем. Функция Find ищет решение с заданной точностью и, если в результате поиска не может быть получено дальнейшее уточнение текущего приближения к решению, то она возвращает сообщение об ошибке. Функция Minerr возвращает это приближение. Системная переменная ERR дает величину ошибки.

    Minerr (vl, v2, …, vn ) возвращает значения ряда переменных для приближенного решения.

    Minerr() пытается найти максимальное приближение даже к несуществующему решению путем минимизации среднеквадратичной погрешности решения. При использовании функции Minerr обязательно предусматривать проверку решений. Полезно как можно точнее указывать начальные приближения к решению.

    Пример 4.5

    Решить систему уравнений $${z^3+9z^2-20z-y=0\choose -2y+6z-25=0}$$.

    Решаем при помощи блока Given…Find(.) (Рис.4.4).

  • Локализация корней: задаем систему уравнений, строим график.
  • Графики имеют точку касания. Функция . Find( ) не решает систему.
  • Функция Minerr() дает приближенное решение. Системная переменная ERR=0.37. Это ошибка определения корня. Проверка показывает максимальную ошибку 0.33.
  • $$z^3+9z^2-20z+1-y=0$$

    $$-2y+6z-25=0$$

    $$y(z):=z^3+9z^2-20z+1$$

    $$y1(z):=3z-12.5$$

    (рис 4.4) Листинг решения примера 4.5

    $$z:=1$$, $$y:=-1$$

    $$Given$$

    $$z^3+9z^2-20z+1-y=0$$

    $$-2y+6z-25=0$$

    Система не решается:

    (рис 4.5) Система не решается

    $$z:=1$$, $$y:=-1$$

    $$Given$$

    $$z^3+9z^2-20z+1-y=0$$

    $$-2y+6z-25=0$$

    $$Minerr(z,y)=\begin{pmatrix} 1.082 \\ -9.169 \end{pmatrix}$$

    $$ERR=0.373$$

    Проверка:

    $$z0:=1.082$$, $$y0:=-9.169$$

    $$z0^3+9z0^2-20z0+1-y0=0.332$$

    $$-2y0+6z0-25=-0.17$$

    4.3. Системы линейных уравнений

    Рассмотрим задачу решения системы из n линейных уравнений. Пусть нам дана система уравнений:

    $$\left\{ \begin{aligned} a_{11}x_1+a_{12}x_2+\ldots+{a_1}nx_n=b_1\\ a_{21}x_1+a_{22}x_2+\ldots+a_{2n}x_n=b_2\\ \ldots \\ a_{n1}x_1+a_{n2}x_2+\ldots+a_{nn}x_n=b_n \end{aligned} \right. $$

    Решить систему – значит найти такие числа, при подстановке которых в данную систему получим все n верных равенств. Составим матрицы системы.

  • Составляем матрицу A, состоящую из коэффициентов при переменных (размерность n x n).
  • Составляем матрицу свободных членов B (размерность ( n x 1).
  • Перепишем и исходную систему в матричном виде: $$AX=B$$.
  • Матричный способ

    Система решается аналитически. Вектор решения можно получить из следующего выражения: $$X=A^{-1}B$$. Можно сделать проверку подстановкой корней в уравнения.

    Пример 4.6

    Решить систему уравнений матричным способом. Сделать проверку. $$\left\{ \begin{aligned} 2x_1-6x_2+4x_3+3x_4=-24\\ 2x_1+x_2+4x_3+5x_4=-5\\ x_1-6x_2-x_3+x_4=-2\\ 3x_1-3x_2-7x_3+9x_4=-8\\ \end{aligned} \right. $$

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

    $$2x_1-6x_2+4x_3+3x_4=-24$$

    $$2x_1+x_2-4x_3+5x_4=-5$$

    $$x_1-6x_2-x_3+x_4=-2$$

    $$3x_1-3x_2-7x_3+9x_4=-8$$

    $$A:=\begin{pmatrix} 2 -6 4 3 \\ 2 1 -4 5 \\ 1 -6 -1 1 \\ 3 -3 -7 9 \end{pmatrix}$$

    $$B:=\begin{pmatrix} -24 \\ -5 \\ -2 \\ -8 \end{pmatrix}$$

    $$|A|=-220$$

    $$X:=A^{-1}\cdot B$$

    $$X=\begin{pmatrix} -2.65 \\ 0 \\ -2.95 \\ -2.3 \end{pmatrix}$$

    Проверка: $$A\cdot X=\begin{pmatrix} -24 \\ -5 \\ -2 \\ -8 \end{pmatrix}$$

    Использование функции lsolve()

    В системе MathCAD введена встроенная функция lsolve (A,B), которая решает систему аналитически и возвращает вектор X для системы линейных уравнений $$A\cdot X=B$$ при заданной матрице коэффициентов А и векторе свободных членов В.

    Пример 4.7

    Решить систему примера 4.6, используя функцию lsolve()

    $$2x_1-6x_2+4x_3+3x_4=-24$$

    $$2x_1+x_2-4x_3+5x_4=-5$$

    $$x_1-6x_2-x_3+x_4=-2$$

    $$3x_1-3x_2-7x_3+9x_4=-8$$

    $$A:=\begin{pmatrix} 2 -6 4 3 \\ 2 1 -4 5 \\ 1 -6 -1 1 \\ 3 -3 -7 9 \end{pmatrix}$$

    $$B:=\begin{pmatrix} -24 \\ -5 \\ -2 \\ -8 \end{pmatrix}$$

    $$X:=lsolve(A,B)$$

    $$X=\begin{pmatrix} -2.65 \\ 0 \\ -2.95 \\ -2.3 \end{pmatrix}$$

    Символьное решение

    Для решения применяем символьные преобразования. Преимуществом символьного решения является возможность решения уравнений в общем виде. Используем оператор Solve.

    Пример 4.8

    Пусть функции r (x,y) w(x,y) заданы системой уравнений. Найти r и w , решив систему.

    $$\left\{ \begin{aligned} xr+w=y^2\\ r+yw=x^2 \end{aligned} \right. $$

    Записываем систему в виде матрицы, используя логическое равенство, решается система относительно r (x,y) w(x,y) ,они тоже записываются в виде матрицы.

    $$\begin{pmatrix} xr+w=y^2 \\ r+yw=5 \end{pmatrix} solve,\begin{pmatrix} r \\ w \end{pmatrix} \to {(\frac{y^3-5}{xy-1} \frac{5x-y^2}{xy-1})}$$

    $$r(x,y)=\frac{y^3-5}{xy-1}$$

    $$w(x,y)=\frac{5x-y^2}{xy-1}$$

    Пример 4.9

    Решить аналитически систему уравнений:

    $$\left\{ \begin{aligned} 5y1+4y2-y3=3\\ 3y1+2y2+3y3=6\\ 2y1+2.5y2+4y3=9 \end{aligned} \right. $$

    На листинге показано точное решение системы и решение с точностью до 3 значащих цифр. Операторы solve и float набираются последовательно .

    $$\begin{bmatrix} (5y1+4y2-y3=3) \\ (3y1+2y2+3y3=6) \\ (2y1+2.5y2-4y3=9) \end{bmatrix} solve,\begin{pmatrix} y1 \\ y2 \\ y3 \end{pmatrix}\to \\ \to (-17.833333333333333333\ 24.0\ 3.8333333333333333333) $$

    $$\begin{bmatrix} (5y1+4y2-y3=3) \\ (3y1+2y2+3y3=6) \\ (2y1+2.5y2-4y3=9) \end{bmatrix} \begin{vmatrix} solve,\begin{pmatrix} y1 \\ y2 \\ y3 \end{pmatrix} \\ float, 3 \end{vmatrix} \to (-17.8 24.0 3.8)~~~3$$

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

    Численное решение. Использование блока Given Find()

    Решение в скалярной форме. В данном методе система уравнений вводится без использования матриц, в "натуральном" виде. Операция аналогична решению системы

    Пример 4.10

    Решить систему уравнений, используя блок Given Find():

    $$\left\{ \begin{aligned} 2x1+4x2-x3=7\\ x1+2x2+3x3=6\\ 0.5x1+2.5x2+4x3=5 \end{aligned} \right. $$

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

    $$x1:=1$$, $$x2:=1$$, $$x3:=1$$

    $$Given$$

    $$2x1+4x2-x3=7$$

    $$x1+2x2+3x3=6$$

    $$0.5x1+2.5x2+-4x3=5$$

    $$Find(x1,x2,x3)=\begin{pmatrix} -4.048 \\ 3.952 \\ 0.714 \end{pmatrix}$$

    4.4. Задачи оптимизации

    В программе MathCAD с успехом решаются задачи оптимизации. Задача оптимизации (линейного программирования) - определение значений аргументов функции, при которых функция имеет экстремальное (минимальное, максимальное) значение. Условия, налагаемые на аргументы функции - заданные ограничения. Используется методика решения системы уравнений помощью блока Given. При этом вместо функции Find используется функция Maximize(), если определяется максимум, и функция Minimize() , если определяется минимум оптимизируемой функции. Последовательность действий следующая:

  • ввести оптимизируемую функцию,
  • определить начальные значения аргументов,
  • в блоке Given ввести уравнения (неравенства) ограничений,
  • ввести функцию Maximize () (Minimaze() ),
  • определить решение.
  • Задача решается в алгебраическом и матричном виде. В матричном виде начальное значение корней, ограничения задаются в виде матриц. Решение в обоих случаях получается в виде матрицы.

    Пример 4.11

    Найти максимум функции

    $$f=500y1+800y2+400y3+200y4$$

    при ограничениях $$\left\{ \begin{aligned} 3y1+3y2+6y3\le30000\\ 4y1+8y2+3y3+2y4\le24000\\ 4y1+3y3+5y4\le12000\\ y1\ge0\\ y2\ge0\\ y3\ge0\\ y4\ge0 \end{aligned} \right. $$

    Листинги решения в алгебраическом и матричном виде.

    $$ORIGIN:=1$$

    Оптимизируемая функция – поиск максимума, $$f(y1,y2,y3,y4):=500y1+800y2+400y3+200y4$$

    Начальные значения:

    $$y1:=1$$, $$y2:=1$$, $$y3:=1$$, $$y4:=1$$

    $$Given$$

    $$3y1+y2+6y3\le30000$$

    $$4y1+8y2+y3+2y4\le24000$$

    $$y1+3y2+5y4\le12000$$

    Ограничения:

    $$y1\ge0$$, $$y2\ge0$$, $$y3\ge0$$, $$y4\ge0$$

    $$y:=Maximize(f,y1,y2,y3,y4)$$

    Решение:

    $$y=\begin{pmatrix} 4.168\times10^3 \\ 1.827\times10^3 \\ 3.511\times10^3 \\ 0 \end{pmatrix}$$

    Максимальное значение функции: $$f(y1,y2,y3,y4)=3.6\times10^6$$

    $$ORIGIN:=1$$

    Матрица коэффициентов функции: $$C:=\begin{pmatrix} 500 \\ 800 \\ 400 \\ 200 \end{pmatrix}$$

    Матрица левых частей ограничений: $$A:=\begin{pmatrix} 3 1 6 0 \\ 4 8 1 2 \\ 1 0 3 5\end{pmatrix}$$

    Матрица правых частей ограничений: $$B:=\begin{pmatrix} 30000 \\ 24000 \\ 12000 \end{pmatrix}$$

    Начальные значения: $$x:=\begin{pmatrix} 1 \\ 1 \\ 1 \\ 1 \end{pmatrix}$$

    $$f(x):=C\cdot x$$

    $$Given$$

    $$A\cdot x\le B$$

    $$x\ge 0$$

    $$x:=Maximize(f,x)$$

    Решение:

    $$x=\begin{pmatrix} 4.168\times10^3 \\ 1.827\times10^3 \\ 3.511\times10^3 \\ 0 \end{pmatrix}$$

    Максимальное значение функции:

    $$f(x)=3.6\times10^6$$

    Основные итоги

    В лекции представлены методы численного решения уравнений и систем уравнений с использованием функций MathCAD. Рассмотрены функция Root (), функция для поиска корней полинома polyroots(), вычислительные блоки Given .Find() и Given Minerr().. Описано численное решение систем линейных уравнений, а также способы аналитического решения : с помощью матриц, функции lsolve(), символьного оператора solve. Показано решение задач оптимизации.

    Задания для самостоятельного выполнения

  • Построить графики функций. Решить уравнения с применением функции root()

    а) $$\frac{\sin{(2x)}}{1-\cos{(2x)}}$$ для $$-5 \le x \le 5$$

    б) $$2\ln{(y+4)}-3\ln{(y+2)}+\ln{(y+1)}=0$$

    в) $$e^{z-8}-8z=0$$ (2 корня)

  • Решить с применением функции polyroots() следующие уравнения

    а) $$x^3-6x^2-52=0$$

    б) $$x^5+23x^3-3x^2+15=0$$

  • Решить системы уравнений с использованием блока Given Find(.)

    а) $$\left\{ \begin{aligned} e^{\frac{x}{2}}-y=0\\ x^2-y+1=0 \end{aligned} \right. $$ найти 3 корня

    б) $$\left\{ \begin{aligned} \frac{2}{x}+3y=16\\ -x^2+2\sqrt{y}=2 \end{aligned} \right. $$ найти 2 корня

    в) $$\tan{x}+\sin{x}=3x+3$$

    г) $$\left\{ \begin{aligned} x^3-y^3=61(x-y)\\ (x-1)(y-1)=12 \end{aligned} \right. $$

    д) $$\left\{ \begin{aligned} x1+x2+x3=0\\ x1^2+x2^2+x3^2=20\\ x1^4+x2^4+x3^4=220 \end{aligned} \right. $$

  • Решить систему уравнений тремя способами. $$\left\{ \begin{aligned} 6x_1+8x_2-5x_3=7\\ x_1+3x_2+9x_3=6\\ 3.8x_1+2x_2-8.8x_3=5 \end{aligned} \right. $$
  • Ключевые термины

    root() – функция для численного решения нелинейного уравнения с одним неизвестным. Возвращает с заданной точностью значение переменной, при котором функция равна нулю.

    polyroot() - функция для численного поиска корней полинома. Возвращает вектор длиной n+1 всех корней полинома степени n.

    Given Find() – вычислительный блок для численного решения нелинейных уравнений и систем уравнений.

    Given Minerr() вычислительный блок для приближенного численного решения нелинейных уравнений и систем уравнений.

    Maximize () – функция для поиска значений переменных функции, при которых функция имеет максимальное значение.

    Minimaze() - , функция для поиска значений переменных функции, при которых функция имеет минимальное значение.

    lsolve(A,B) - функция аналитического решения системы линейных уравнений, представленной в виде AX=B.

    Вернуться к учебному плану