Цель лекции. Показать технику численного решения нелинейных уравнений с использованием сервисов MathCAD. Показать различные методы аналитического решения систем линейных уравнений.
Относительно небольшое количество задач решения уравнений можно решить аналитически. Аналитическое решение предполагает точное определение корней либо нахождение алгоритма, по которому корни всегда могут быть найдены. На практике часто приходится искать решение при помощи численных методов [1, 11]. Уравнения решаются численными методами с заданной погрешностью. В MathCAD погрешность задается системной константой TOL. Как правило, отыскание корней алгебраического уравнения (или системы уравнений) численными методами связано с двумя задачами:
Для численного решения уравнений в MathCAD существуют встроенные функции[1, 10], в которых реализованы алгоритмы известных численных методов: итерационный метод секущих; различные градиентные методы и другие. Почти все встроенные функции предполагают, что корни уже приблизительно локализованы.
Рассмотрим решение простейших уравнений вида 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 должны быть разных знаков. Третий аргумент не обязателен. Выбор решения определяется выбором начального значения переменной
Решить уравнение $$5y^2\ln{(y+4)}-3\ln{(3y+2)}=0$$
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
Если корней уравнения много (больше двух) или надо исследовать определенную область на наличие корней, применяют сканирование. Оно состоит в последовательном поиске корня, начиная из множества пробных точек, покрывающих расчетную область.
Решить уравнение $$F1(z,y)=z^3-9z^2+20z+yz+2y^3-15y=0$$ для $$y=2$$.
Осуществляется решение уравнения при помощи функции root, для нескольких последовательных начальных значений корней. Результат выдается в виде табулированных значений – таблицы.
$$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
Для поиска корней обычного полинома р(х) степени n MathCAD содержит очень удобную функцию:
polyroots(V) возвращает вектор корней многочлена (полинома) степени n, коэффициенты которого находятся в векторе V, имеющем длину равную n+1.
Решить уравнение $$x^5-2x^4-3x^3-x^2-4x=-21$$.
Осуществляется решение уравнения при помощи функции polyroots() (Рис.4.3).
$$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}$$
При решении систем нелинейных уравнений используется специальный вычислительный блок, открываемый служебным словом — директивой Given — и имеющий следующую структуру:
Given
Уравнения
Ограничительные условия
Выражения с функцией Find()
Find(vl, v2, …, vn) — возвращает значение одной или ряда переменных для точного решения;
Знак равенства в уравнениях вызывается с математической панели БУЛЕВО(Boolean) или с клавиатуры клавишами "CTRL =".
Как и в предыдущем случае, сначала необходимо провести локализацию корней – задание начальной точки, от которой будет происходить поиск решения. Решение ищется методом итераций и при наличии нескольких корней, очевидно, будет найдено лишь ближайшее решение, если оно существует. Блок Given…Find(.) можно использовать и для решения уравнений одним неизвестным.
Решить систему уравнений $${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}$$
Функция Minerr использует тот же самый алгоритм, что и функция Find. Различие состоит в следующем. Функция Find ищет решение с заданной точностью и, если в результате поиска не может быть получено дальнейшее уточнение текущего приближения к решению, то она возвращает сообщение об ошибке. Функция Minerr возвращает это приближение. Системная переменная ERR дает величину ошибки.
Minerr (vl, v2, …, vn ) возвращает значения ряда переменных для приближенного решения.
Minerr() пытается найти максимальное приближение даже к несуществующему решению путем минимизации среднеквадратичной погрешности решения. При использовании функции Minerr обязательно предусматривать проверку решений. Полезно как можно точнее указывать начальные приближения к решению.
Решить систему уравнений $${z^3+9z^2-20z-y=0\choose -2y+6z-25=0}$$.
Решаем при помощи блока Given…Find(.) (Рис.4.4).
$$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$$
Рассмотрим задачу решения системы из 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 верных равенств. Составим матрицы системы.
Система решается аналитически. Вектор решения можно получить из следующего выражения: $$X=A^{-1}B$$. Можно сделать проверку подстановкой корней в уравнения.
Решить систему уравнений матричным способом. Сделать проверку. $$\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}$$
В системе MathCAD введена встроенная функция lsolve (A,B), которая решает систему аналитически и возвращает вектор X для системы линейных уравнений $$A\cdot X=B$$ при заданной матрице коэффициентов А и векторе свободных членов В.
Решить систему примера 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.
Пусть функции 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}$$
Решить аналитически систему уравнений:
$$\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():
$$\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}$$
В программе MathCAD с успехом решаются задачи оптимизации. Задача оптимизации (линейного программирования) - определение значений аргументов функции, при которых функция имеет экстремальное (минимальное, максимальное) значение. Условия, налагаемые на аргументы функции - заданные ограничения. Используется методика решения системы уравнений помощью блока Given. При этом вместо функции Find используется функция Maximize(), если определяется максимум, и функция Minimize() , если определяется минимум оптимизируемой функции. Последовательность действий следующая:
Задача решается в алгебраическом и матричном виде. В матричном виде начальное значение корней, ограничения задаются в виде матриц. Решение в обоих случаях получается в виде матрицы.
Найти максимум функции
$$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. Показано решение задач оптимизации.
а) $$\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 корня)
а) $$x^3-6x^2-52=0$$
б) $$x^5+23x^3-3x^2+15=0$$
а) $$\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. $$
root() – функция для численного решения нелинейного уравнения с одним неизвестным. Возвращает с заданной точностью значение переменной, при котором функция равна нулю.
polyroot() - функция для численного поиска корней полинома. Возвращает вектор длиной n+1 всех корней полинома степени n.
Given Find() – вычислительный блок для численного решения нелинейных уравнений и систем уравнений.
Given Minerr() вычислительный блок для приближенного численного решения нелинейных уравнений и систем уравнений.
Maximize () – функция для поиска значений переменных функции, при которых функция имеет максимальное значение.
Minimaze() - , функция для поиска значений переменных функции, при которых функция имеет минимальное значение.
lsolve(A,B) - функция аналитического решения системы линейных уравнений, представленной в виде AX=B.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.