Информатика
.pdf
141
■ rectangular позволяет записать комплексное число в прямоуголь-
ных координатах, например, ln(1-2∙i) rectangular → ln(5) - atan(2)∙i 2
(разделение действительной и мнимой части при условии, что i =
-1).
■ solve [, имя переменной] находит возможные решения уравнения, при этом ключевым словом assume можно задать область поиска решения, например, если требуется найти действительные решения уравнения (x3-1)(x2-2) = 0, то записав это равенство, следует ввести ключевое слово solve, затем assume, после которого записать x = real, и выйти мышкой за пределы формулы:
|
solve |
|
1 |
|
|
|
||
|
|
|
|
|
||||
(x3 – 1)∙(x2 – 2) = 0 |
→ |
|
2 |
. |
||||
|
||||||||
|
assume, x = real |
|
|
|
|
|
|
|
|
2 |
|||||||
|
|
- |
|
|||||
■ simplify позволяет упростить алгебраическое или функциональное выражение, например,
x2+xy-2y2+10(x-y) |
|
x2+3xy+2y2-2(x+y) |
(x+y)2-y4 |
|
|||||||
|
2 |
2 |
2 3 |
+ |
2 |
2 |
3 |
∙ |
|
simplify → 2. |
|
(x-y)∙(x+4y)+4∙(x+y) |
|||||||||||
|
x |
-y +xy -y |
|
x |
+2xy-y (x-1)-y |
|
|
||||
■ substitute, ■ = ■ выполнить подстановку в функциональном выражении (замену переменной) с последующим преобразованием полученного выражения.
■factor разлагает выражение на сомножители, например,
16936 factor → 23∙29∙73.
■expand позволяет раскрыть скобки в алгебраическом выражении, привести подобные члены или записать его в виде более простых функций, например,
3 expand
8∙sin(x)∙cos(4∙x) simplify → 3∙sin(5∙x) - 3∙sin(3∙x) – sin(11∙x) + sin(13∙x).
■ coeffs выписывает коэффициенты многочлена (относительно данного выражения) в порядке возрастания, например,
3∙x2∙y+5∙x2∙y2+7∙x∙y2+x∙y coeffs, x → 7∙y0+y .
2
5∙y2+3∙y
■ collect, ■ приводит подобные члены относительно выбранной переменной, например,
3∙x2∙y+5∙x2∙y2+7∙x∙y2+x∙y collect, y → (5∙x2+7∙x)∙y2 + (3∙x2+x)∙y.
■ series позволяет получить разложение функционального выражения в ряд по степеням выбранной переменной, например, найдем разложение 8∙sin(x)∙cos(4∙x)3 в ряд по степеням х до четвертой степени:
|
|
|
142 |
|
|
|
8∙sin(x)∙cos(4∙x) |
3 |
series |
→ 8∙x - |
580∙x3 |
||
|
|
|
3 |
. |
||
|
|
x, 4 |
|
|
|
|
■ parfrac помогает (в некоторых случаях, особенно, когда известны корни знаменателя) разложить дробь на сумму простейших, например,
4∙x2-3∙x+1 |
parfrac → |
4 |
- |
3 |
. |
|
3 2 |
x+1 |
2 |
+1 |
|||
x +x +x+1 |
|
|
x |
|
||
■ confrac конструирует непрерывную дробь, например,
|
|
|
|
|
|
|
|
1 |
x |
|
||
|
|
|
|
|
|
|
1 |
|
||||
|
|
|
|
|
|
|
|
4 |
x |
|||
x3+x2+x+1 confrac |
|
-169 |
x |
|||||||||
→ |
|
-27 |
x , |
|||||||||
4∙x2-3∙x+1 x |
|
|||||||||||
|
|
|
|
|
|
|
|
44 |
|
|
||
|
|
|
|
|
|
|
121 |
x |
||||
|
|
|
|
|
|
|
|
144 |
|
|||
|
|
|
|
|
|
|
|
48 |
0 |
|||
|
|
|
|
|
|
|
|
11 |
|
|
||
или 1 + |
|
|
|
x |
|
|
|
|
|
|
|
|
1 |
|
|
x |
|
|
|
|
|
|
|||
4 + |
|
|
|
|
|
|
|
|
|
|
||
-16 |
+ |
|
|
x |
|
|
|
|
|
|||
9 |
-27 |
+ |
|
x |
|
|
|
|
||||
|
|
|
44 |
121 |
+ |
x |
|
Рис. 55 |
||||
|
|
|
|
|
|
44 |
48 |
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
11 |
|
|
|
|
В символьных вычислениях могут участвовать многие встроенные функции и операторы (если задача предполагает наличие символьного результата). Чаще всего при этом имеются в виду операторы и функции анализа (см. рис. 55). При этом последующий знак равенства предполагает числовой результат, правая стрелка – символьный.
|
|
|
|
b |
|
||||
Например, пусть a := 0, b := 4, f(t) := |
16∙2 t+1, тогда ∫ f(t) dt = 17.429, но в |
||||||||
|
t +t+1 |
|
|
a |
|
|
|
|
|
b |
|
3 - |
|
|
|
|
|
|
|
тех же условиях ∫ f(t) dt → 8∙ln(21) + 7∙π∙ |
14∙ 3∙atan(3∙ 3) |
. Это |
|||||||
a |
9 |
|
|
3 |
|
|
|
||
касается и всех остальных функций и операторов.
143
Задачи оптимизации
Большая и важная часть задач, решаемых в MathCad, составляет задачи оптимизации, т.е. задачи отыскания минимума или максимума числовой функции. Так как max f(x) всегда можно записать как - min (-f(x)), то можно вести речь именно о минимизации.
Mсd имеет несколько встроенных функций для этой цели: Min(...), Max(...), находящие минимум (соотв. максимум) на заданном (в виде чисел, векторов, матриц) конечном мнoжестве числовых значений,
функции Minimize(f, x, ...), Maximize(f, x,...), Minerr(x,...).
Безусловный минимум (максимум) легко найти из
условий Ферма: grad f = 0. Оптимизировать функ- |
|
цию при наличии условий целесообразно в блоке |
|
Given |
|
условия (равенства, неравенства) , где Given – слу- |
Рис. 56 |
Minimize(f,...) = |
|
жебное слово (вводится с клавиатуры), условия используют операторы сравнений из логического меню (см. рис. 56), оптимизирующая функция вводится из меню "вставка функций". При численном решении задачи перед блоком необходимо задать подходящие начальные значения параметров задачи (от их выбора может зависеть результат).
Пример 6. Пусть требуется найти наименьшее
x2 y2
расстояние между точками эллипса 9 + 25 = 1 и то-
|
|
|
|
x |
- |
y |
|
|
|
чками прямой |
6 |
8 = 1. Определим функции f(x,y) |
|||||||
|
x2 |
y2 |
|
|
x |
- |
y |
, φ(x,y,u,v):= (x-u)2+(y-v)2. |
|
:= |
9 + |
|
, g(x,y):= 6 |
|
|||||
25 |
8 |
||||||||
Из геометрических соображений следует, что решение должно быть в четвертом квадранте, поэтому
положим x:= 0, y:= -1, u:= 2, |
v:= -3. Запишем блок |
Given |
|
решения: f(x,y) = 1 g(u,v) = 1 |
. Далее, запишем R |
R Minimize(φ,x,y,u,v) |
|
|
и знак равенства (вывод результата), получим |
|
|
RТ =(1.874 -3.905 2.64 -4.48), (R0, R1) – координаты |
|
|
точки на эллипсе, (R2,R3) – соответствующие коорди- |
Рис. 57 |
|
наты на прямой (см. рис. 57). |
||
|
Об использовании функции Minerr в задачах оптимизации и при решении уравнений речь пойдет позже.
144
Алгебраические уравнения и системы
В общем случае можно использовать аналогично предыдущему
Given
блок уравнения , функция Find вводится из меню "вставка функ-
Find(...)
ций" (функция может применяться и для символьного решения, если такое возможно). При численном решении необходимо до блока задать начальные значения поиска решения.
18xy1+xy = x+y
Пример 7. Найдем все решения системы уравнений 2 208(xy)2 .
1+(xy) = x2+y2
Введем блок с условиями
и с последующей символьной операцией
Find(x,y) simplify →, в результате которой получим:
все решения системы.
Такой результат не всегда возможен. Для численного решения
3.732
положим, например, х:=10, у:=0, тогда получим Find(x,y) = 0.072 .
Полиномиальное алгебраическое уравнение вида a0 + a1x + a2x2 +...+ anxn = 0 можно решать с помощью встроенной функции polyroots(a), в скобках – вектор коэффициентов полинома. Например,
2
для уравнения 2- 4х+3х3 = 0 с коэффициентами многочлена а = -4
03
имеем: |
- найдены все корни. |
145
Векторы, матрицы, СЛАУ
Решение СЛАУ (систем линейных алгебраических уравнений) опирается, в основном, на правила векторной и матричной алгебры. Прежде всего, это:
сложение, умножение на число,
скалярное умножение, транспонирование,
векторное умножение (a×b = a∙bT),
матричное умножение, векторизация:
|
x0 |
→ |
sin(x0) |
||
если x = |
|
|
sin(x1) , или, например, |
||
x1 , то sin(x)= |
|||||
|
|
|
|
|
|
|
x2 |
|
sin(x2) |
||
→ |
|
|
|
||
|
1 |
4 |
|
|
4 |
|
|
|
12 . |
||
|
3 |
∙ 4 |
= |
||
|
|
|
|
|
|
-2 3 |
|
|
-6 |
||
Вычисление определителя |A| матрицы А,
Вычисление обратной матрицы А-1 и произвольной целой ее степени.
Имеется также много встроенных функций для работы с векторами и матрицами:
rank(A) вычисляет ранг матрицы А,
sort(P) (также rsort(∙), csort(∙)) сортирует вектор Р (матрицу по строке или столбцу) в порядке возрастания,
identity(n) возвращает единичную n×n матрицу,
last(x) возвращает индекс последнего элемента вектора х,
cols(A), rows(A) возвращают количество столбцов или строк матрицы, submatrix(А,iн,iк,jн,jк) возвращает подматрицу матрицы А с элементами
Ai,j, i [iн,iк], j [jн,jк] (н – "начало", к – "конец"), augment(A,B) приписывает матрицу В к матрице А справа, stack(A,B) приписывает матрицу В к матрице А снизу, eigenvals(A) возвращает собственные значения матрицы А, eigenvecs(A) возвращает собственные векторы матрицы А.
В зависимости от выбранной векторной нормы || ∙ || вычисляются
различные нормы матрицы: ||A|| = sup ||Ax||.
||x|| = 1
lsolve(A,b) возвращает решение СЛАУ Ax = b с квадратной невырожденной матрицей А,
geninv(A) возвращает обобщенную обратную матрицу A+ = (ATA)-1AT, если rank(A) = cols(A) (строк не меньше, чем столбцов, ранг равен числу столбцов). Эта матрица возникает при необходимости найти приближенное решение переопределенной СЛАУ с матрицей полного ранга, наилучшее в смысле наименьших квадратов (т.е. минимизиру-
146
ется величина (Ax – b)T(Ax – b) – сумма квадратов отклонений).
Имного других функций.
Практически СЛАУ в MathCad решаются, в основном, двумя
способами:
а) методом обратной матрицы,
б) модификациями метода Гаусса с помощью функции lsolve.
Переопределенные системы "решаются" приближенно методом обобщенной обратной матрицы geninv.
Пример 8. нужно найти наилучшие значения |
|
|||
|
|
x + y = 1 |
|
|
|
|
2x - y = 1 |
|
|
(х, у), из системы равенств x - 2y = 1. Составим ма- |
|
|||
|
|
x - y = 1 |
|
|
1 1 |
|
1 |
|
|
трицу А = 2 -1 |
|
и правую часть b = 1 . Тогда ис- |
|
|
11 --12 |
|
11 |
|
|
|
|
0.697 |
|
|
комые значения суть geninv(A)∙b = -0.03 (на рис. 58 |
Рис. 58 |
|||
приведены графики линий, определяемых уравнения- |
||||
|
||||
ми, и точка-псевдорешение).
Неопределенные СЛАУ имеют бесконечно много решений, из которых можно, например, выбрать ближайшее к нулю. Тогда на помощь приходит функция minimize.
Пример 9. Найдем вектор наименьшей длины, удовлетворяющий системе
уравнений: |
x0 |
- x1 |
- x2 |
+ x3 |
= 4 |
(т.е. выберем решение, ближайшее к нулю). |
|
x1 + 2x2 + 3x3 = 6 |
|||||
|
|
|
||||
|
|
1 |
-1 -1 |
1 |
4 |
|
Положим n:= 4, i:= 0..n-1, xi := 0, A:= 0 |
1 2 |
3 , b := 6 , f(x):= x∙x (или f(x) := |
||||
|
Given |
|
|
|
1 |
|
|x|), введем блок |
A∙x = b |
и получим х = -0.571 . Эту задачу можно |
||||
|
|
|
|
-0.143 |
|
|
x := minimize(f,x) |
2.286 |
|
|
решить также аналогично предыдущему примеру, используя другой вид псевдообратной матрицы (соответствующей функции в Mсd нет): x := AT(A∙AT)-1∙b с тем же результатом. Начиная с версии Mсd13 все это реализовано в функции lsolve.
|
2 |
3 |
-1 |
|
|
4 |
0 |
-2 |
|
Пример 10. Возьмем произвольную матрицу B := |
-2 |
1 |
1 |
, построим |
3 |
2 |
0 |
||
|
0 |
4 |
2 |
|
|
|
33 |
-2 |
-12 |
|
T |
|
-2 |
30 |
12 |
|
матрицу М := B ∙B, M = |
. Матрица M положительно определена |
||||
|
-12 |
12 |
10 |
|
|
147
33 -2
(т.к. 33>0, -2 30 >0 и |M| = 1364 > 0) и из нее можно извлечь квадратный
корень, т.е. найти матрицу Х: Х2 = M. Положим сначала Х := identity(3), затем создадим блок "given - find", записав: Given XT = X X2 = M X := Find(X). В
|
5.529 |
0,049 |
-1.558 |
|
|
0.049 |
5.232 |
1.619 |
|
результате получим X = |
. |
|||
-1.558 |
1.619 |
2.225 |
|
|
Пример 11. Определим тип кривой, заданной уравнением 3х2 - 4ху+ 4у2 =1, и построим ее график. Левая часть уравнения представляет собой квадратичную
|
x |
|
|
|
|
|
3 |
-2 |
|
форму (x, y)A y с матрицей A= -2 |
4 . Найдем ее |
|
|||||||
собственные векторы, полагая λ:= eigenvals(A), λ = |
|
||||||||
1.438 |
|
|
|
|
|
|
|
|
|
5.562 – таким образом, данная кривая эллипс (с |
|
||||||||
центром в нуле). Найдем собственные векторы в ви- |
|
||||||||
де матрицы H := eigenvecs(A). Убедимся, что собст- |
|
||||||||
венные векторы ортогональны: H‹0›∙H‹1›= 0. Запишем |
|
||||||||
параметрическое уравнение эллипса в собственном |
|
||||||||
базисе: x(t) := H0,0∙ |
cos(t) + |
H0,1∙ |
sin(t) , |
Рис. 59 |
|||||
|
|
|
λ0 |
|
λ1 |
|
|||
y(t) := H1,0∙ |
cos(t) + |
H1,1∙sin(t) |
и построим график вместе с собственными осями |
||||||
|
|
|
|
||||||
|
λ0 |
|
|
λ1 |
|
|
|
|
|
координат (см. рис. 59, красная линия – данная кривая, синие прямые – новые оси координат в собственном базисе).
Обыкновенные дифференциальные уравнения (ОДУ) и системы
Задача Коши (с начальными условиями)
Для одного уравнения y(n)(x) = f(x,y,y',...,y(n-1)) c условиями x = x0, y(x0)
Given
= y0,..., y(n-1)(x0) = yn-1 можно использовать блок уравнение и условия , s Odesolve(x,T)
где x [0, T], уравнение записывается с использованием символов
меню анализа (или введением нужного числа штрихов с помощью Ctr +F7 с обязательным указанием аргумента).
Пример 12. Рассмотрим нелинейный осциллятор (модель колебаний),
заданный уравнением ω2y''(t) +βy'(t) + y(t)(1+γy'(t)) = 0 при ω = 0.5, β = 0.2, γ = 1, y(0) = 0, y'(0) = 2. Положим ω := 0.5, β := 0.2, γ := 1, Т := 20. Запишем блок
Given |
|
|
|
ω2∙y''(t)+β∙y'(y)+y(t)∙(1+γ∙y(t)) = 0 |
|
d |
|
y(0) = 0 y'(0) = 2 |
и обозначим z(t) := |
|
y(t). Зависимость решения |
dt |
|||
y := Odesolve(t, T) |
|
|
|
от t и фазовая картина (зависимость z(t) от y(t)) представлены на рис. 60.
148
Рис. 60
В старших версиях MathCad функция Odesolve может применяться и для решения системы ОДУ (в этом случае первый аргумент функции содержит вектор имен искомых функций), а также для решения несложных краевых задач.
Пример 13. Система уравнений:
|
|
|
y'(t) - 2y(t)z(t) + 2 = 0 |
с краевыми условиями |
|
z'(t) + z(t) - 3y(t) + t = 0 |
|
|
y(0) = 0, z(2) = -3 может быть решена, как пока- |
|
|
зано на рис. 61. |
|
|
Такие ситуации довольно редки. Чаще |
|
|
всего дифференциальные уравнения и сис- |
|
|
темы с начальными условиями решаются |
|
|
приближенно численными методами, реа- |
|
|
лизованными в функциях: |
|
|
rkfixed(y0,t0,t1,N,D) - метод Рунге-Кут- |
|
|
ты с постоянным шагом интегрирования, |
|
|
Rkadapt(y0,t0,t1,N,D) – то же, с перемен- |
|
|
ным шагом, |
|
|
Bulstoer(y0,t0,t1,N,D) – метод Бурлиша- |
|
|
Штера. Здесь у0 – вектор начальных зна- |
Рис. 61 |
|
чений задачи Коши, t [t0, t1], N – число точек, в которых метод находит решение, D(t, y) – правая часть системы уравнений, записанной в нормальной форме системы первого порядка, разрешенной относительно производных искомых функций.
Пример 14. Запишем уравнение нелинейного осциллятора, рассмотренное выше, в виде нормальной системы уравнений, полагая y0(t) = y(t), y1(t) = y'(t),
вектор начальных условий y = |
0 |
: |
y0' = y1 |
|
|
, т.е. в виде век- |
||
2 |
|
-2 |
(βy1 + y0(1+γy0)) |
|||||
|
|
|
|
y1' = - ω |
|
|
||
торного уравнения y(t) = D(t,y), где функция D имеет вид D(t,y) = |
||||||||
|
y1 |
|
|
|
|
|
|
|
-ω-2∙(β∙y1 + y0∙(1 + γ∙y0)) . Используем rkfixed, взяв на промежутке [0, T] N = 200 точек решения. Функция R := rkfixed(y,0,T,D) возвращает матрицу с N+1
строками и n+1 столбцами, где n – порядок уравнения или системы (в данном
149
случае n = 2). Первый столбец матрицы R‹0› содержит моменты времени результата (индексация начинается по умолчанию с нуля), второй R‹1› - значения решения в эти моменты времени, третий R‹2›- значения производных в этих точках.
Если теперь построить плоский график R‹2› в отношении R‹1›, то получим правую часть рис. 60.
Для жестких систем ОДУ (в которых скорость изменения искомых переменных может сильно различаться) эти методы могут давать ложный результат (либо вообще не работать). Здесь полезно использовать функции:
radau(y0,t0,t1,N,D,k,s) – метод RADAUS, stiffb(y0,t0,t1,N,D,J) – метод Бурлиш-Штера, stiffr(y0,t0,t1,N,D,J) – метод Розенброка.
Здесь первые пять параметров имеют тот же смысл, что и выше, J – матрица Якоби (условно "якобиан") правой части D системы уравнений.
Пример 15. Запишем уравнение Ван дер Поля y'' = μ(1-y2)y' - y, μ = 2000, с начальными условиями y(0) = 0.001, y'(0) = 0, в виде нормальной системы уравне-
ний с правой частью D(t,y) := y1 , "якобиан" правой части (производная
μ(1-y02)y1-y0
0 |
0 |
1 |
|
по t и у) имеет вид J(t,y) = 0 |
-2μy0y1-1 |
μ(1-y02) . На промежутке [0, 2.6] найдем |
|
решение с N=200 точками методами Рунге-Кутты и Розенброка. Сравнительные графики решений приведены в листинге рис. 62.
Рис. 62
150
Краевые задачи ОДУ
Для этой цели используется отдельный набор функций, реализующих, в основном, варианты метода "пристрелки":
Sbval(y,t0,t1,D,load,score) - для поиска недостающих начальных условий в двухточечной краевой задаче.
Bvalfit(y1,y2,t0,t1,tf,D,load1,load2,score) - для поиска недостающих начальных условий в краевой задаче с внутренней точкой.
Здесь y (или у1, у2) – вектор начальных условий с предположением о недостающих условиях, t1, t1 – границы интервала переменной интегрирования, D(t,y) – вектор правой части нормальной системы уравнений, load(t0,v) – вектор вводимых начальных условий с учетом предположений, score(t1,y) – условия, принимающие нулевые значения при выполнении краевых условий.
|
|
при t [0,3], x(0)=3, y(3)=1. |
Пример 16. Рассмотрим задачу: x' = x-(4x+y-3)y |
||
|
y' = (3y-2)x-y |
|
x0 - (4∙x0 + x1 - 3)∙x1 |
|
|
Запишем D(t,x):= (3∙x1 - 2)∙x0 - x1 |
, a:= 0, b:= 3, c:= 3, d:= 1, v0:= 1 (предпола- |
|
гаемое недостающее начальное значение) |
|
|
c |
|
|
load(a,v) := v0 , score(b,x) := x1 – d, |
I := |
|
sbval(v,a,b,D,load,score). В результате полу-
чим I = (4.604) – подобранное недостающее начальное условие. Далее, для N = 350 и на-
чальных условий x := c используем функ-
I0
цию rkfixed, полагая R := rkfixed(x,a,b,N,D) |
Рис. 63 |
|
(см. листинг на рис. 63). |
||
|
||
|
Обработка данных
Для обработки данных имеется много различных встроенных функций интерполяции, фильтрации, прогноза, и т.д., их полезно обсуждать при изучении соответствующего курса. Здесь отметим один (достаточно универсальный) метод оценки параметров подходящей аналитической модели дискретных данных – метод наименьших квадра-
тов (МНК). Суть его в следующем: набор данных {yk}k=0n возможно соответствует некоторой функциональной зависимости f(β, t) с неизвестными параметрами β, так, что, по-видимому, выполняется соотношение yk = f(β, k) + εk, k = 0,...,n, с погрешностями εк, удовлетворяющими некоторым требованиям нормальности и независимости. Тогда параметры β желательно выбрать так, чтобы сумма квадратов этих погрешностей была минимальна (отсюда и название метода). Встроенная функция Minerr решает в указанном смысле уравнения yk = f(β, k)
