Читайте также:
|
|
Функция Solve[eqns, vars] ищет решение системы уравнений eqns относительно переменных vars. В частном случае система может состоять из одного уравнения. Solve[eqns] ищет решение для всех переменных в системе eqns. Уравнения задаются в виде: lhs==rhs – левая и правая части уравнения связаны логическим знаком равенства. Система может быть представлена в виде списка уравнений, либо уравнения могут быть объединены знаком конъюнкции (&&). Решение записывается в форме правил замены: x–>so Решение может быть найдено как в численном, так и в аналитическом виде.
Пример 13.8: Решение системы линейных уравнений:
In[ ]: = Solve[ x + 2y == 0 && 2x – y == 5a, {x, y}]
Out[ ] = {{x –> 2 a, y –> -a}}
При наличии нескольких решений функция Solve дает их список.
Пример 13.9: In[ ]: = Solve[x (y + b) == a^2&&x – y == b, {x, y}]
Out[ ] = {y –> -a - b, x –> -a}, {y –> a - b, x –> a}}
Если имеется корень кратности m, Solve выписывает решение m раз, например:
Пример 13.10: In[ ]: = Solve[ (x – 1)^2 == 0]
Out[ ] = {{ x –> 1}, { x –> 1}}
Функция Solve применима, когда точное решение может быть записано в явном виде.
Функция LinearSolve[m, b] предназначена для решения систем линейных алгебраических уравнений. Эта функция находит решение системы: , где m – матрица, b и x – известный и неизвестный векторы. Функция LinearSolve позволяет также находить решение сразу нескольких систем уравнений с одинаковой матрицей в левой части, но с разными столбцами свободных коэффициентов. В этом случае b и x являются матрицами. Функция LinearSolve дает решение как в численном, так и в аналитическом виде.
Пример 13.11. Найдем матрицу, обратную к матрице m:
In[ ]: = (m = {{1, 2}, { 2, -1}}; b={{1, 0}, { 0, 1}}; m1 = LinearSolve[m, b]//N)
Out[ ] = {{ 0.2, 0.4}, { 0.4, -0.2}}
Для проверки полученного результата вычислим произведение матриц m и m1:
In[ ]: = m1. m Out[ ] = {{1, 0}, { 0, 1}}
Функция RowReduce[m] – преобразует матрицу m к жордановой форме. Невырожденная матрица преобразуется в единичную матрицу; вырожденная матрица принимает ступенчатый вид.
Пример 13.12. Применим функцию RowReduce к вырожденной матрице:
In[ ]: = m5={{2, 3,1}, {0,2,1}, {2, 5, 2}}; RowReduce[m5]
Out[ ] =
Функция RowReduce позволяет найти решение системы линейных алгебраических уравнений . Для решения опишем систему уравнений с помощью расширенной матрицы mb – матрицы m с присоединенным столбцом b (или с присоединенной матрицей b в случае одновременного решения нескольких систем уравнений). Применение к расширенной матрице функции RowReduce реализует процесс решения системы уравнений по схеме Жордана: левая часть матрицы – m – преобразуется в единичную матрицу, в то время как в правой части – b – получаем решение системы.
Пример 13.13. Найдем матрицу, обратную к матрице m = {{1, 2}, {2, -1}}. Для этого присоединим к матрице m единичную матрицу и применим функцию RowReduc:
In[ ]: = RowReduce[{{1, 2, 1, 0}, {2, -1, 0, 1}}]//MatrixForm
Out[ ]/MatrixForm =
Последние два столбца полученной матрицы представляют матрицу, обратную к матрице m.
Функция Roots[eqn, var] – ищет корни полиномиального уравнения eqn для переменной var. Решение записывается в виде логических равенств, объединенных знаком дизъюнкции – логического “или”.
Пример 13.14.
Найдем корни многочлена Чебышева третьей степени (ChebyshevT[3, x] = -3x + 4x3):
In[ ]: = Roots[ChebyshevT[3, x] == 0, x]
Out[ ] =
Функция FindRoot[eqn, {x, x0}] – ищет численное решение уравнения eqn, используя начальное приближение x=x0.
FindRoot[ {eqn1, eqn2, …}, {x, x0}, {y, y0}, …] – ищет решениесистемы уравнений. Если все начальные приближения – действительные числа, FindRoot ищет только действительные решения; для поиска комплексных решений необходимо, чтобы хотя бы одно из начальных приближений было комплексным.
Пример 13.15.
In[ ]: = z=FindRoot[Tan[x]==x+1/4,{x,1}] Out[ ] ={x –>0.818503}
Проверка: In[ ]: = Tan[z[[1,2]]] - 1/4 Out[ ] = 0.818503
Отметим, что функция Solve не позволяет найти решение данного уравнения.
13.4. Решение дифференциальных уравнений
DSolve[ eqn, y[x], x ] – решает дифференциальное уравнение для функции y[x].
DSolve[{eqn1, eqn2,…}, {y1[x], y2[x],…}, x ] – решает систему дифференциальных уравнений.
Пример 13.16.
1). Общее решение.
In[ ]: = DSolve[ y''[x] + y[x] == 0, y[x], x ]
Out[ ] = {{ y[x] –> C[2] Cos[x] – C[1] Sin[x] }}
2). Решение задачи Коши.
In[ ]:= DSolve[{ y''[x] + y[x] == 0, y[0] == 1, y'[0] == 0 }, y[x], x ]
Out[ ] = {{ y[x] –> Cos[x] }}
3). Решение краевой задачи.
In[ ]:= DSolve[{ y''[x] + y[x] == 0, y[0] == 0, y[5Pi / 6] == 1}, y[x], x ]
Out[ ] = {{ y[x] –> 2 Sin[x] }}
4). Решение краевой задачи для системы уравнений.
In[ ]:= DSolve[{ y'[x] == z[x], z'[x] == -y[x], y[0] == 0, z[Pi] == -1}, {y[x], z[x]}, x ]
Out[ ] = {{ y[x] –> Sin[x], z[x] –> Cos[x] }}
NDSolve[ eqns, {y1, y2,…}, {x, xmin, xmax}] дает приближенное решение системы дифференциальных уравнений eqns на отрезке [xmin, xmax] для функций yi[x]. NDSolve представляет решение на данном отрезке в виде интерполирующей функции InterpolatingFunction. Интерполирующая функция позволяет найти значения y для всех x, принадлежащих отрезку интерполяции, и построить график.
Пример 13.17. Найдем решение уравнения колебаний, описывающее затухающую синусоиду:
In[ ]: = s = NDSolve[{ y''[t] + 0.1y'[t] +y[t] == 0, y[0] == 1, y'[0] == 0}, y, {t, 0, 20}]
Out[ ] = {{ y –> InterpolatingFunction[{{ 0., 20. }}, <>]}}
Решение представляется в виде интерполирующей функции. Построим график изменения и , а также “фазовый портрет” – зависимость . Для построения параментрического графика требуется использовать функцию Evaluate:
In[ ]:= p1=Plot[{y[t]/.s, y'[t]/.s}, {t,0,20}, PlotStyle->{RGBColor[1,0,0],
RGBColor[0,0,1]}, AxesLabel->{t, y}];
p2=ParametricPlot[ Evaluate[{y[t], y'[t]}/.s], {t, 0, 20}, AxesLabel->{y,y'},
PlotStyle->RGBColor[1,0,1]];
Show[GraphicsArray[{p1,p2}]]
Графики показаны на рис. 13.1.
Решение в виде интерполирующей функции позволяет найти значения и в любой точке отрезка, например:
In[ ]: = {y[2Pi] /. s, y'[3Pi/2] /. s} Out[ ] = {{0.730093},{0.791057}}
Замечания
· Дифференциальные уравнения должны иметь достаточное количество начальных или краевых условий.
· Значение x0, входящее в начальные или краевые условия, может не принадлежать отрезку [xmin, xmax].
· Уравнения могут включать комплексные числа.
Дата добавления: 2015-07-08; просмотров: 127 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Аналитические операции | | | Преобразование выражений |