Решение алгебраических и трансцендентных уравнений

advertisement
Решение алгебраических и трансцендентных уравнений
В практике вычислений приходится решать уравнения вида f(x) = 0, где f(x) определена на
некотором конечном или бесконечном интервале (a, b).
Если f(x) — многочлен, то f(x) =0 — алгебраическое уравнение, иначе f(x) = 0 —
трансцендентное уравнение.
Всякое значение x* такое, что f(x*)  0, называется корнем, а способ нахождения этого x*
и есть решение уравнения.
Этапы решения:
1. Отделение корней, то есть отыскание достаточно малых областей, в каждой из
которых заключен один и только один корень уравнения.
2. Вычисление корней с заданной точностью.
Комментарий 1.
Для выделения областей, в которых находятся действительные корни уравнения, можно
воспользоваться тем, что если на концах отрезка непрерывная функция f(x) принимает
значение разных знаков, то на этом отрезке f(x) = 0 имеет хотя бы один корень. Для
выделения областей, содержащих один и только один корень можно воспользоваться,
например, графическим способом.
Комментарий 2.
Для решения 2-й задачи существуют многочисленные методы: метод итераций, метод
Ньютона, метод половинного деления и т.д.
Считаем, что нам известен отрезок   x   , внутри которого существует и
располагается один и только один из корней уравнения.
Уравнение f(x) =0 представим в виде x =  (x ) ,то есть f(x) = x-  (x ) = 0.
В общем случае: f ( x)  0  x   ( x) , то есть x   ( x)  f ( x)  0 или  ( x)  x  f ( x) ,
где  = const.
Выберем на отрезке  ,   произвольную точку x0 — нулевое приближение, а далее в
качестве следующего приближения:
x1=  ( x 0) ,
x2=  ( x1) ,
…
xn=  ( xn  1) .
Процесс последовательного вычисления чисел xn (n=1, 2, …) по формуле
xn=  ( xn  1) называется методом итераций.
Если на  ,  , содержащем корень x = x* , а так же его последовательные приближения
x0, x1,…,xn, вычислимые по методу итераций, выполнено условие  ' ( x)  g  1 , то
процесс итераций сходится, то есть увеличивая n, можно получить приближение, сколь
угодно мало отличающееся от истинного значения корня x*.
Процесс итераций следует продолжать до тех пор, пока для 2-х последовательных
приближений xn-1 и xn не будет обеспечено выполнение неравенства
1 g
| xn  xn  1 |
 , где  — заданная погрешность
g
1 g
Если g  0.5, то
 1 и можно ограничиться | xn  xn  1 |  .
g
Итак, |  ' ( x ) |<1 : — докажем сходимость.
Действительно : пусть x* — корень, то есть x* =  (x*) — с одной стороны,
xn =  ( xn  1) — схема итераций.
xn-x* =  ( xn  1)   ( x*)
 ( xn  1)   ( x*)
( xn  1  x*)
xn-x* =
xn  1  x *
Используем теорему о среднем значении: если  ' ( x ) непрерывна на [  ,  ], то существует
 (  )   ( )
точка а, такая, что
  ' (a) , где а  [ ,  ] .
 
Или xn  x*   ( xn  1)   ( x*)   ' (a)( xn  1  x*) .
Пусть m = max  ' ( x ) , где x  {x0, x1, x2, …, xn}
| xn-x* |  m| xn-1-x* |
| xn-1-x* |  m| xn-2-x* |
| xn--x* |  m2| xn-2-x* |
| xn-x* |  mk| xn-k-x* |
Если k = n, то | xn--x* |  mn| x0-x* |
Если m<1, то с ростом n: xn  x*
При |  ' ( x ) |>1 |xn – x*| неограниченно растет!
x1
x1
x0
x*
x0
расходится
x0
x1
x*
 ' ( x)  1
1
сходится
 ' ( x)  1
x0
x2
x*
x1
сходится
x0
 ' ( x )  1
x*
расходится  ' ( x)  1
Для приведения уравнения к виду x =  (x ) существует следующий способ:
Пусть 0<m1  f’(x)  M1, где m1 = min f’(x) на [  ,  ]
M1 = max f’(x) на [  ,  ]
(если f’<0, то вместо уравнения f(x) = 0 рассматриваем уравнение –f(x) = 0).
Заменим уравнение f(x) = 0 эквивалентным ему уравнением x = x - f ( x)   ( x) (   0)
Подберем параметр  таким, чтобы выполнялось неравенство 0<  ' ( x)  1  f ' ( x)  g  1 ,
1
f ' ( x)
f ' ( x)
 g  1 , так как
 1 . Тогда g =
где x  [ ,  ] . Если  
, то 1 
M1
M1
M1
f ' ( x)
m1
1
 1
 1 , то есть условие сходимости выполняется.
M1
M1

3,14

 1,57
Пример: Sin·x + 0.25 – x = 0
2
2
f(x) = Sin·x + 0.25 – x = 0;
Так как x =  (x ) , то x = Sin·x + 0.25
Пусть x0 = 1.2;  = 1 · 10-6 , тогда x* = 1.71230493
x
2
Sinx+0,25
1
1,2
П/2
П
2П
Function Sinus (t)
Sinus = Sin (t) + 0.25
End Function
//—//—//—//—//—//—//—//
Sub Itera ()
Dim fi As Single
Dim x As Single
x = CSng( InputBox (“Задайте начальное приближение”)
metka: fi = sinus (x)
if abs ( x- fi) < = 0.000001 then MsgBox (x, 1, “Решение”) : stop
x = fi
goto metka 1
end Sub
1,7123
Метод Ньютона – Рафсона
F(x)=0
M(x0,F(x0))
y
x*
x2
x1 x x0
Уравнение имеет вид F(x) = 0
Запишем уравнение касательной к F(x) в точке x0:
F ( x 0)  y y  F ( x 0)

tg  = F'(x0) =
x0  x
x  x0
y = F(x0) + F'(x0)(x-x0)
F ( x 0)
F ' ( x 0)
F ( x1)
x2 = x1F ' ( x1)
…
F ( xn  1)
xn = xn-1F ' ( xn  1)
Пусть y = 0  0 = F(x0) + F'(x0)( x1- x0), откуда x1 = x0 -
2m1
, где m1 = min |F'(x)| на [  ,  ]
M2
M2 = max F''(x) на [  ,  ]
x0 выбирается так, что F(x0) · F''(x0)>0
|xn- xn-1 | <
Пример: x N  A  F ( x)  x N  A  0
x  N A;
xn1  xn 
F ( xn )
;
F ' ( xn )
F ' ( x)  Nx n1 ;
xnN  A NxnN  xnN  A ( N  1) xnN  A 1 
A 
xn1  xn 



(
N

1
)
x



n
N
NxnN 1
NxnN 1
NxnN 1
xnN 1 
1
A
N = 2; x   x  
2
x
1
A
N = 3; x  2 x  2 
3
x 
x3  A
A  x3
1 A

Или x  x 

x

 x   2  x
2
2
3 x
3x
3x

Алгебраическое интерполирование.
Интерполированием называют приближённое или точное нахождение какой — либо
величины по известным отдельным значениям этой же величины или других величин,
связанных с ней.
Рассмотрим таблицу парных значений:
x1 , y1 ; x2 , y 2 ;...; xn , y n ;
xi , yi i 1,n — индексированные пары (они называются узлами интерполяции)
представляют собой фиксированные пары, причём аргументы строго упорядочены:
x1  x2  ...  xn . Будем называть таблицу xi , yi табличной функцией yi  F ( xi ), i  1,..., n .
Алгебраическое интерполирование восстанавливает достоверную аналитическую
зависимость y = F(x) в виде так называемого интерполяционного многочлена вида:
k 1
Lk 1 ( x)  a 0   ai xi , где (k -1) — наивысшая степень полинома, описывающая эту
i 1
зависимость.
Интерполяционный полином Лагранжа.
Задача: для данных значений x  x1 , x  x2 ,..., x  xn x1  x2  ...  xn  и
y  y1 , y  y 2 ,..., y  y n найти многочлен F (x) = L (x) степени (n - 1), удовлетворяющий
 F ( x1 )  y1
F ( x )  y

2
2
условиям 
...
 F ( x n )  y n
Рассмотрим конструкцию следующего вида:
( x  x2 )( x  x3 )...( x  xn )
F1 ( x) 
y1
( x1  x2 )( x1  x3 )...( x1  xn )
Числитель состоит из произведений (n - 1) сомножителей, а значит есть многочлен
степени (n - 1).
Числа x2 , x3 ,..., xn — корни этого многочлена, то есть F1 ( xi )  0 i = 2, 3, …, n,
причём F1 ( x1 )  y1 по построению.
Таким образом, график этого многочлена проходит через точку x1 , y1  и обращается в
ноль во всех других точках (узлах интерполяции) для i  1 .
Аналогично:
( x  x1 )( x  x2 )...( x  xi 1 )( x  xi 1 )...( x  xn )
Fi ( x) 
yi
( xi  x1 )( xi  x2 )...( xi  xi 1 )( xi  xi 1 )...( xi  xn )
( x  x1 )...( x  xn1 )
Fn ( x) 
yn
( xn  x1 )( xn  x2 )...( xn  xn1 )
Сумма этих многочленов
n
F ( x)   Fi ( x)  Ln 1 ( x) называется интерполяционным полином (или
i 1
интерполяционной формулой) Лагранжа, который удовлетворяет всем условиям
исходной задачи.
Решение единственное: доказательство от «противного»:
Пусть существует ещё один полином Ф (x) степени  n  1. Построим R (x) = F (x) – Ф (x).
Он является полиномом степени не выше (n-1), но у него n корней в точках x1 ,...xn , чего
быть не может → R( x)  0,  F ( x)  Ф( x)
Sub Lagrange ()
Dim x (1 to 20) As Single
Dim y (1 to 20) As Single
Dim n As Integer
Dim i As Integer
Dim z As Single
Dim S As Single
Dim T As Single
Dim a As String
Dim k As Integer
Dim j As Integer
a = InputBox (“Введите число узлов интерполяции”)
n = CInt (a)
for i = 1 to n
x (i) = WorkSheets (1).Cells (1, i). Value
y (i) = WorkSheets (1). Cells (2, i). Value
next i
5: a = InputBox (“Введите координату x точки интерполяции или 9999 — конец
вычислений”)
z = CSng (a)
if z = 9999 then stop
T=0
for k = 1 to n
S=1
for i = 1 to n
if i = k then 100
S = S * (z – x (i)) / (x (k) – x (i))
100 next i
t = t + S * y (k)
next k
j = MsgBox (z, 1, “для координаты x = ”)
j = MsgBox (T, 2, “значение функции y = ”)
WorkSheets (1). Cells (1, n + 1). Formula = z
WorkSheets (1). Cells (2, n + 1). Formula = T
Goto 5
Вычислительная схема Эйткена.
Рассмотрим два частных случая интерполяции по Лагранжу:
1. Табличная функция имеет 2 узла (линейная интерполяция): x1 , y1 ; x2 , y2 ; n  2
x  x2
x  x1
x x
x x
x x
L1 ( x) 
y1 
y2  2
 2
y1  1
y2 
x1  x2
x2  x1
x2  x1 x2  x1
x2  x1
=
y
1
( x2  x) y1  ( x1  x) y2   1 1
x2  x1
x2  x1 y 2
x1  x
 P1, 2 ( x)
x2  x
Другая таблица:
x2
y2
x3
y3
P2,3 ( x)  L1 ( x) 
y2
x  x3
x x
x  x2
x x
1
y2 
y3  3
y2  2
y3 
x 2  x3
x3  x 2
x3  x 2
x3  x 2
x3  x 2 y 3
x2  x
x3  x
2. Таблица имеет 3 узла: n = 3
P1, 2,3 ( x)  L2 ( x) 
( x  x2 )( x  x3 )
( x  x1 )( x  x3 )
( x  x1 )( x  x2 )
y1 
y2 
y3 
( x1  x2 )( x1  x3 )
( x2  x1 )( x2  x3 )
( x3  x1 )( x3  x2 )
=…
2-е слагаемое:
( x  x1 )( x  x3 )
( x  x)( x3  x)
( x  x)( x3  x)
x  x1
y2   1
y2   1
y2 3

( x2  x1 )( x2  x3 )
( x2  x1 )( x3  x2 )
( x2  x1 )( x3  x2 ) x3  x1
=
( x1  x)( x3  x) ( x3  x2 )  ( x2  x1 )
( x  x)( x3  x) ( x3  x2 )  ( x2  x1 )
y2   1
y2 
( x2  x1 )( x3  x2 )
x3  x1
x3  x1
( x2  x1 )( x3  x2 )

( x1  x)( x3  x)  1
1 


 y2 
x3  x1
 x2  x1 x3  x2 

 ( x  x)( x3  x)

( x2  x)( x3  x)
( x  x)( x3  x)
( x  x)( x2  x)
y1  1
y2   1
y2  1
y3  
( x2  x1 )( x3  x1 )
( x3  x1 )( x2  x1 )
( x3  x1 )( x3  x2 ) 
 ( x3  x)( x3  x2 )
=
1
y1 ( x2  x1 )  y 2 ( x1  x) x3  x  1 y 2 ( x3  x1 )  y3 ( x2  x) x1  x 
x3  x 2
x3  x1 x3  x2
x3  x1
 P1, 2 ( x) 
P ( x) x  x
x3  x
x x
1
P1,2 ( x)( x3  x)  P2,3 ( x)( x1  x)  1 P1,2 ( x) x1  x  P
 P2,3 ( x) 1

x3  x1
x3  x1 x3  x1
x3  x1 2,3
3
P1, 2,3,..., k ( x) 
P1, 2,..., ( k 1) ( x) x1  x
1
xk  x1 P2,3,..., k ( x) xk  x
P1, 2,..., k ( x)  P1, 2,..., ( k 1) ( x)  E — точность
Шаг (k - 1) — искомое приближение точности Е.
Определение явного вида интерполяционного многочлена.
Единственность построения интерполяционного многочлена Ln1 ( x) на n узлах
интерполяции доказано. Можно ли найти его канонический вид, то есть
F ( x)  Ln 1 ( x)  A0  A1 x  A2 x 2  ...  An 1 x n 1
Для табличной функции xi , yi  строим систему уравнений:
F ( x1 )  y1  A0  A1 x1  ...  An 1 x1n 1  y1
F ( x 2 )  y 2  A0  A1 x 2  ...  An 1 x 2n 1  y 2
...
F ( x n )  y n  A0  A1 x n  ...  An 1 x nn 1  y n
 1 x1 x12 ... x1n 1 


1 x 2 x 22 ... x 2n 1 

Матрица коэффициентов V 
называется матрицей Вандермонда.
... ... ... ... ... 

2
n 1 
 1 x n x n ... x n 
 A0 
A 
Матрица — столбец неизвестных A   1 
... 


 An 1 
 y1 
y 
Матрица — столбец свободных членов Y   2 
... 
 
 yn 
Определитель матрицы Вандермонда det V  0 всегда именно в случае интерполяционной
задачи, так как xi  x j , i, j  1,..., n
Значит, система всегда имеет единственное решение. В матричном виде V · A = Y —
решать можно методом Гаусса.
Лабораторная работа №1.
Метод наименьших квадратов (МНК).
Sub МНК () ’метод наименьших квадратов — линейная регрессия
Dim x (1 to 100) As Single
Dim y (1 to 100) As Single
Dim N As Integer
Dim i As Integer
Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim BØ As Single
Dim B1 As Single
Dim Z As Single
Dim t As String
t = InputBox (“Введите число наблюдений”)
N = CInt (t)
For i = 1 to N
x (i) = WorkSheets (1).Cells (1, i). Value
y (i) = WorkSheets (1).Cells (2, i). Value
next i
A=0:B=0:C=0:D=0
For i = 1 to N
A = A + x (i) : B = B + y (i) : C = C + x (i) * x (i) : D = D + x (i) * y (i)
next i
B1 = (A * B – N * D) / (A * A – N * C)
BØ = (B – B1 * A) / N
i = MsgBox (B1, 1, “Угловой коэффициент = ”)
i = MsgBox (BØ, 2, “Смещение по оси y = ”)
WorkSheets (1).Cells (1, n + 1). Formula = B1
WorkSheets (1). Cells (2, n + 1). Formula = BØ
t = InputBox (“Введите аргумент”)
z = CSng (t)
f = BØ + B1 * z
j = MsgBox (z, 1, “Для аргумента x = ”)
j = MsgBox (f, 2, “Значение функции y = ”)
end Sub
Тест: N = 5
x (i) = 5, 6, 7, 8, 8:
y (i) = 5, 3, 2, 8, 6:
BØ = 4, 750
B1 = 0, 395
Задание:
1. Провести в выбранной системе координат XOY прямую произвольным образом.
2. «Разбросать» вокруг прямой (сверху и снизу) примерно поровну 20 — 50 точек так,
чтобы близость точек, лежащих сверху и снизу, от прямой была примерно
одинаковой.
3. Заполнить таблицу координат точек x (i), y (i) (в произвольном порядке).
4. Обработать данные по МНК.
5. Сравнить BØ и B1 с вычисленными графически.
6. Задать несколько значений аргумента и вычислить значение функции. Нанести
точку на график.
7. Оценить погрешность, варьируя число измерений.
Лабораторная работа № 2.
Интерполяция по Лагранжу.
Sub Lagrange () ’ интерполяция по Лагранжу
Dim x (1 to 20) As Single
Dim y (1 to 20) As Single
Dim n As Integer
Dim i As Integer
Dim z As Single
Dim S As Single
Dim t As Single
Dim a As String
Dim k As Integer
Dim j As Integer
a = InputBox (“Введите число узлов интерполяции”)
n = CInt (a)
for i = 1 to n
x (i) = WorkSheets (1). Cells (1, i). Value
y (i) = WorkSheets (1). Cells (2, i). Value
next i
5: a = InputBox (“Введите координату x точки _ _ интерполяции или 9999 — конец
вычислений”)
z = CSng (a)
if z = 9999 then stop
t=0
for k = 1 to n
S=1
for i = 1 to n
if i = k then 100
S = S * (z – x (i)) / (x (k) – x (i))
100: next i
t = t + S * y (k)
next k
j = MsgBox (z, 1, “для координаты x = ”)
j = MsgBox (t, 2, “значение функции y = ”)
WorkSheets (1). Cells (1, n + 1). Formula = z
WorkSheets (1). Cells (1, n + 1). Formula = t
Goto 5
End Sub
Задание:
1. Найти приближённое значение функции при данном значении аргумента с
помощью интерполяционного многочлена Лагранжа, если функция задана в
неравноотстоящих узлах:
X
Y
0.43 1.63597
0.48 1.73234
0.55 1.87686
0.62 2.03345
0.70 2.22846
0.75 2.35971
2. Табулировать функцию y = sin x на отрезке [0, π / 2] в равноотстоящих точках (20
точек).
3. Выбирая узлы через 1, 2, 3, 4 интерполировать функцию, используя
интерполяционный многочлен Лагранжа.
4. Оценить погрешность интерполяции в зависимости от числа узлов.
Лабораторная работа № 3.
Интерполяционная схема Эйткена.
Sub Aitken () ’ интерполяция по Эйткену
Dim x (1 to 20) As Single
Dim y (1 to 20) As Single
Dim f (1 to 20) As Single
Dim x1 (1 to 20) As Single
Dim y1 (1 to 20) As Single
Dim E As Single
Dim N As Integer
Dim k As Integer
Dim i As Integer
Dim j As Integer
Dim l As Integer
Dim z As Single
Dim a As String
Dim m As Integer
a = InputBox (“Число интерполяционных узлов = ”)
N = CInt (a)
For i = 1 to N
x (i) = WorkSheets (1). Cells (1, i). Value
x1 (i) = x (i)
y (i) = WorkSheets (1). Cells (2, i). Value
y1 (i) = y (i)
next i
a = InputBox (“Значение пргумента x = ”)
z = CSng (a)
5: a = InputBox (“Требуемая точность Е = ”)
E = CSng (a)
f (2) = ((x (2) – z ) * y (1) – (x (1) - z) * y (2)) / (x (2) – x (1))
if N > 2 then 10
m = MsgBox (f (2), 1, “линейная интерполяция”)
10: for k = 3 to N – 1
for j = 1 to k – 1
for i = j + 1 to k
y (i) = ((z – x (j)) * y (i) – (z – x (i)) * y (j)) / (x (i) – x (j))
next i
next j
f (k) = y (k)
if abs (f (k) – f (k - 1)) < = E then 20
for l = 1 to N: y (l) = y1 (l): x (l) = x1 (l): next l
next k
z = abs (f (N – 1) – f (N - 2))
m = MsgBox (z, 1, “точность не достигнута”)
goto 30
m = MsgBox (k – 1, 2, “точность достигнута при степени = ”)
a = InputBox (“вводить новый аргумент? (да – 1, нет - 0)”)
k = CInt (a)
if k =1 then 5
stop
Задание:
1. Для табличной функции рассчитать значение f (x) по схеме Лагранжа.
2. Найти значение функции в этой точке по схеме Эйткена с заданной точностью Е,
зафиксировав степень достаточного полинома.
3. Вычислить элементы матрицы Вандермонда для полинома пункта 2.
1.50
1.54
1.56
1.60
1.63
1.70
X
Y 3.873 3.924 3.950 4.000 4.037 4.123
E = 0.01
2.0
2.3
2.5
3.0
3.5
3.8
4.0
X
Y 5.848 6.127 6.300 6.694 7.047 7.243 7.368
E = 0.05
93.0
96.2
100.0 104.2 108.7
X
Y 11.38 12.80 14.70 17.07 19.91
E = 0.01
0
2
3
6
7
9
X
Y 658.5 704.9 729.0 804.3 830.5 884.7
E = 0.5
X
Y
1.00
1.1752
1.08
1.3025
1.13
1.3863
1.20
1.5094
1.27
1.2117
1.31
1.2236
1.38
1.2347
E = 0.0002
Лабораторная работа № 7
Метод Ньютона — Рафсона для систем нелинейных уравнений.
 f ( x, y )  0
Система 
 ( x, y )  0
Считая заданными начальные приближения корней x0 , y 0 ,будем искать поправки к ним h и
k:
x  x0  h
xn 1  x n  hn
или в общем виде
y n 1  y n  k n
y  y0  k
Таким образом, имеем систему:
 f ( x0  h, y0  k )  0

 ( x0  h, y0  k )  0
Раскладывая функции в ряд Тейлора, имеем:

df x0
df x0
k
 01 (h, k )  0
 f ( x0 , y 0 )  h
dx y 0
dy y 0


 ( x , y )  h d x0  k d x0  0 (h, k )  0
2
 0 0
dx y 0
dy y 0

01 и 02 содержат члены более высокого порядка малости, чем h и k. Пренебрегая ими,
получим систему относительно h1 и k1:
 f ( x0 , y 0 )

h1


h
 1

df
df
 k1
  f ( x0 , y 0 )
dx 0
dy 0
d
d
 k1
  ( x 0 , y 0 )
dx 0
dy 0
k
k1  1 

df
dx
d
dx
h
h1  1 

 f ( x0 , y 0 )
  ( x0 , y 0 )
df
dx
d
dx
df
dy
d
dy
Тогда x1  x0  h1 ; y1  y0  k1 и так далее.
Пример:
3x  6 y  2  0
 3
3
x  y  1  0
f ( x, y )  3 x  6 y  2
 ( x, y )  x 3  y 3  1
x0  0,83; y 0  0,75
df
df
 3;
 6;
dx
dy
d
d
 2,07;
 1,69
d
dx 0
dy
2 d
2
 3x ;
 3y
dx
dy
f ( x0 , y 0 )  3x0  6 y 0  2  0,01
 ( x0 , y0 )  x03  y 03  1  0,01
  ( x0 , y 0 )
df
dx
d
dx
df
dy
d
dy
df
dy 0
d
dy 0
0,01  6
0,01 1,69 0,077
h1 

 0,0044
3
6
17,5
2,07 1,69
3
k1 
0,01
2,07 0,01
17,5
x1  0,8344

0,0093
 0,0005
17,5
и так далее.
y1  0,7505
Задание:
1. Получить задачу для решения у преподавателя.
2. Преобразовать систему для дальнейшего решения по проведённой схеме.
3. Написать программу, реализующую метод Ньютона — Рафсона для полученной
задачи.
4. Исследовать сходимость в зависимости от заданной точности.
Лабораторная работа № 8.
Метод итерации для систем нелинейных уравнений.
 f ( x, y )  0  x  F ( x, y )


 ( x, y )  0
 y  Ф ( x, y )
 xn1  F ( xn, y n )

 y n1  Ф( xn , y n )
Если функции F (x, y) и Ф (x, y) непрерывны и последовательности x1 , x2 ,..., xn ,... и
y1 , y 2 ,..., y n ,... сходятся, то пределы их являются корнями системы.
Сходимость:
Пусть x, y — истинные значения корней системы и известно, что a  x  b, c  y  d и в
прямоугольнике x = a, x = b, y = c, y = d других корней нет.
Тогда, если в этом прямоугольнике выполняются неравенства:
dF
dF
dФ
dФ
 p1 ,
 q1 ,
 p2 ,
 q2
dx
dy
dx
dy
p1  p 2  M  1
Где
, то итерационный процесс сходится, причём в качестве нулевого
q1  q 2  N  1
приближения ( x0 , y0 ) можно брать любую точку прямоугольника.
Пример:
2
 f ( x, y )  x  3 lg x  y  0

 ( x, y )  2 x 2  xy  5 x  1  0
Рассмотрим точку x0 = 3,4; y0 = 2,2
Приведём систему (различными путями) к виду:
 x  y 2  3 lg x
F ( x, y )  y 2  3 lg x


1
1
 y  2 x   5 Ф ( x, y )  2 x   5
x

x
dF
2 ln x dF
dФ
1
dФ

;
 2 2 ;
 2 y;
 0;
dx
x
dx
x
dy
dy
dФ dF
dF

 1,
 4 — процесс сходится
dx
dx
dy
Определим x из 2-го уравнения; y — из 1-го:

x(5  y )  1
x 
2

 y  x  3 ln x

Для x0 , y 0 :
3 lg e
1
dФ
dF
1
5 y
dF
1
x
dФ
x
;

;

;

0
dy
dx
2 2 x(5  y )  1 dy
2 2 x(5  y )  1 dx 2 x  3 lg x
За область изоляции корня можно принять прямоугольник 3 < x < 4; 2 < y < 2,5
dF
dF
dФ
 0,60;
 0,32;
 0,34
dx
dy
dx
- Процесс сходится, но так как
dF
dФ

 0,94 — близко к единице, то скорость
dx
dx
сходимости будет небольшой:
x0  3,4;
y 0  2,2;
x1 
3,4(2,2  5)  1
 3,426
2
y 2  2,250
y1  3,426  3 lg 3,426  2,243
y 3  2,255
x 2  3,451
y 4  2,258
x3  3,466
y 5  2,259
x 4  3,475
y 6  2,260
x5  3,480
x6  3,483
Задание:
1. Получить систему для решения у преподавателя.
2. Провести исследование системы по приведённой схеме.
3. Написать программу, реализующую метод итераций для задачи.
4. Исследовать сходимость в зависимости от задаваемой точности.
Системы линейных уравнений.
Метод итераций:
a11 x1  a12 x 2  ...  a1n x n  b1
a x  a x  ...  a x  b
 21 1
22 2
2n n
2

...
a n1 x1  a n 2 x 2  ...  a nn x n  bn
1

 x1  a (b1  a12 x 2  a13 x3  ...  a1n x n )
11

1

(b2  a 21 x1  a 23 x3  ...  a 2 n x n )
 x2 
a 22

...

1

 x n  a (bn  a n1 x1  a n 2 x 2  ...  a nn1 x n 1 )
nn

Обозначим правую часть i-го уравнения через Li ( x1 , x2 ,..., xn ) . Без потери общности не
обращаем внимание на то, что в правой части i-го уравнения xi не содержится. Тогда:
x1  L1 ( x1 , x 2 ,..., x n );
x 2  L2 ( x1 , x 2 ,..., x n );
...
x n  Ln ( x1 , x 2 ,..., x n )
Зададимся начальными приближениями корней системы x1( 0) , x 2( 0) ,..., x n( 0) . Тогда:
x1(1)  L1 ( x1( 0 ) ,..., x n( 0 ) );
x 2(1)  L2 ( x1( 0 ) ,..., x n( 0 ) );
...
x n(1)  Ln ( x1( 0 ) ,..., x n( 0 ) );
Итерационный процесс продолжается до тех пор, пока все x i(k ) не станут достаточно
близки к xi( k 1) , где
i = 1, 2, 3, …, n, то есть:
M ( k )  max xi( k )  xi( k 1)  E
Лучше сравнивать с E относительные разности:
x ( k )  x ( k 1)
max i ( k ) i
E
xi
Сходимость:
Пусть xi( n )  xi   i( k ) , где xi — истинное значение i-го корня
Так как xi — истинное значение корня, то:
1
bi  ai1 x1  ai 2 x2  ...  ain xn 
xi 
aii
Кроме того:
1
xi( k 1) 
(ai1 ( x1( k )  x1 )  ...  ain ( x n( k )  x n ))
aii
Иначе:
1
 i( k 1)  (ai1 1( k )  ...  ain n( k ) )
aii
Обозначим наибольшее из  i(k ) через (k ) . Тогда  i( k 1)  ( k )  ai1  ai 2  ...  ain 
Если взять:
1
 ai1  ai 2  ...  ain , то (k 1)  A * (k ) .
A  max
aii
Так как это справедливо при любых k, то:
1
.
aii
( k )  A * ( k 1)
 ( k 1)
 A * ( k  2)


...
(1)  A * ( 0 )

Откуда ( k 1)  Ak 1 * (0) . Если A < 1, то
( k 1)
lim 
k 
 0 или xi( k )  xi при k   .
Таким образом, условие сходимости:
n a
ij
 1 , то есть диагональные элементы системы удовлетворяют условию:

j 1 a ij
n
a ii   a ij
j 1
j i
5 x1  2 x2  2 x3  7

3x1  6 x 2  x3  8
8 x  2 x  11x  9
2
3
 1
5  2  2  4
6  3  1  4
11  8   2  10
1
7  2 x 2  2 x3 
5
1
x 2   8  3 x1  x3 
6
1
x3  9  8 x1  2 x 2 
11
Выбор начальных приближений не влияет на условия сходимости, поэтому чаще всего
полагают xi( 0 )  0
x1 
x1  L1 ( x1 , x 2 ,..., x n )
Итак
Метод Зейделя.
x 2  L2 ( x1 , x 2 ,..., x n )
...
x n  Ln ( x1 , x,..., x n )
Для вычисления (k + 1)-го приближения xi в методе итераций мы использовали x i(k ) , где i
= 1, 2, …, n.
Но так как к моменту вычисления xi( k 1) уже найдены x1( k 1) , x 2( k 1) ,..., xi(k11) , то возникает
идея: при нахождении xi( k 1) использовать найденные ранее
x1( k 1) , x 2( k 1) ,..., xi(k11) ,..., xi(k1) ,..., x n( k ) . В этом и заключается метод Зейделя: для вычисления (k
+ 1)-го приближения xi используется не только k-e, но и (k + 1)-e приближения:
x1( k 1)  L1 ( x1( k ) ,..., x n( k ) )
x 2( k 1)  L2 ( x1( k 1) , x 2( k ) ,..., x n( k ) )
xi( k 1)  Li ( x1( k 1) , x 2( k 1) ,..., xi(k11) , x((ik)1) ,..., x n( k ) )
x n( k 1)  Ln ( x1( k 1) ,..., x n( k11) )
6 x  5 y  30

 x  2 y  2
1
(30  5 y ( k ) )
6
1
 (2  x k 1 )
2
x ( k 1) 
y ( k 1)
В случае, если коэффициенты решаемой системы не удовлетворяют условию сходимости,
то с помощью линейного комбинирования уравнений исходной системы получают новую,
для которой сходимость обеспечивается. Для этого выбирают из системы уравнений
такие, модули коэффициентов в которых больше суммы модулей остальных
коэффициентов. Выбранные уравнения записывают так, чтобы наибольший по модулю
коэффициент оказался диагональным.
4 x1  5 x 2  x3  2 x 4  7
a
3x1  6 x 2  7 x3  5 x 4  8
b
x1  7 x 2  2 x3  x 4  3
с
2 x1  3x 2  x3  10 x 4  10 d
Уравнение с): 7  1  2   1  4 — будет 2-е уравнение
Ур – е d): 10  2   3  1  6 — будет 4-е уравнение
a) — b): x1  x2  8x3  3x4  1 — будет 3-е уравнение
8  111 3
a) + b) + 2c) + d): 11x1  0 * x2  x3  x4  31 — 1-е уравнение
11  0   1  1  2
1
(31  x3  x4 )
11
1
x2  (3  x1  2 x3  x4 )
7
1
x3  (1  x1  x2  3x4 )
8
1
x4  (10  2 x1  3x3  x3 )
10
x1 
При получении системы уравнений, удовлетворяющей
условиям сходимости метода итераций, необходимо, чтобы
каждое уравнение исходной системы, не вошедшее в явном
виде в новую систему, попало хотя бы в одну из линейных
комбинаций.
Численное интегрирование.
Пусть f (x) — вещественная функция, определённая на интервале [a, b] вещественной оси,
b
для которой существует интеграл Римана
 f ( x)dx. Под численным интегрированием
a
понимают нахождение приближённого значения этого интеграла. Наиболее часто
применяемый численный метод интегрирования состоит в том, что интеграл от φ
заменяется некоторой комбинацией значений φ ( x k ) в n + 1 точках
x k  [ a, b] :
b

a
n
f ( x)dx   Ak f ( xk )
(1)
k 0
Формула (1) называется квадратурной формулой, коэффициенты Ak — квадратурными
коэффициентами (или весами), абсциссы x k — узлами квадратурной формулы.
Квадратурные формулы, порожденные интерполяционными формулами.
Пусть x0 , x1 ,..., xn — различные точки [a,b], служащие узлами интерполяции для некоторой
функции I (x), интерполирующей функцию f (x):
f (x) = I (x) + R (x), где R (x) — остаточный член
Предположим, что I (x) =
n
 f (x
k 0
) I k ( x) причём все интегралы
k
b
I
k
( x)dx  Ak вычисляются точно.
a
Таким образом, получается квадратурная формула:
b

n
f ( x)dx   Ak f ( xk )
k 0
a
1 случай: n = 1; x0  a, x1  b
Функция f (x) интегрируется по формуле Лагранжа:
f ( x) 
f(
x  x0
x  x1
xb
xa
1
1
f ( x0 ) 
f ( x1 ) 
f (a) 
f (b) 
[ f (a)(b  x)  f (b)( x  a )]  I ( x) 
x0  x1
x1  x0
ab
ba
ba
(b  a) 2
b
3
b
ab
1
x2 b
1
a  b b3  a3
 a bx b
)  ( x 2  (b  a) x  ab)dx  
f

(
b

a
)

abx


f
[





a 
2 a
2 a
2
3
(b  a) 2  2   3 a
(b  a) 2
 (b  a )
b2  a2
ab
1
(b  a )(b 2  ab  a 2 )
1
(b  a)(b  a)(b  a ) ab(b  a)
 ab(b  a )]   f (
)[


]
2
2
3
2
(b  a) 2
(b  a ) 2
(b  a) 2
a  b 1 2b 2  2ab  2a 2  3b 2  6ab  3a 2  6ab
1
a  b  b 2  2ab  a 2
(b  a ) 2 a  b
)

f(
)

f(
)
2 ba
6
ba
2
6
(b  a)6
2
ba ab

f(
)
6
2
f(
n
b

a
1
2
2
ba
f ( x)dx 
[ f 0  4 f 2i 1  2 f 2i  f n ]
3n
i 1
i 1
n6
f 0  4 f1  4 f 3  4 f 5  2 f 2  2 f 4  f 6
n2
f 0  4 f1  f 2
n4
f 0  4 f1  4 f 3  2 f 2  f 4
n8
f 0  4 f1  4 f 3  4 f 5  4 f 7  2 f 2  2 f 4  2 f 6  f 8
b

a
n = 2k — чётное
n
2
n
1
2
ba
nh 5
f ( x)dx 
[ f 0  4 f 2i 1   f 2i  f n ] 
f
3n
90
i 1
i 1
IV
( )
bx
zdz
1 z2 0
ba
dx   


ba
ba
ba 2 ba
2
a
ba
z  b  x; dz  dx
x  a  z ba
xbz0
b
0
Поэтому A0  
xa
A1  
dx 
ba
a
b
b
 f ( x)dx 
a
ba

0
zdz
z2 b  a b  a


b  a 2(b  a) 0
2
ba
[ f (a)  f (b)] — формула трапеций
2
ab
; x2  b
2
Интерполяционный многочлен таков:
2случай: n = 2; x0  a; x1 
( x  x0 )( x  x 2 )
( x  x0 )( x  x1 )
( x  x1 )( x  x 2 )
I ( x) 
f ( x0 ) 
f ( x1 ) 
f ( x2 ) 
( x0  x1 )( x0  x 2 )
( x1  x0 )( x1  x 2 )
( x 2  x0 )( x 2  x1 )
ab
)( x  b)
2
 (a) 
ab
(a 
)( a  b)
2
(x 
ab
)
( x  a)( x  b)
ab
(2 x  a  b)( x  b)
( x  a)( x  b) a  b
2

f(
)
f (b) 
f (a) 
f(
)
ab
ab
ab
2
(a  b)( a  b)
(b  a)( a  b)
2
(
 a)(
 b)
(b  a)(b 
)
2
2
2
( x  a)( 2 x  a  b)

f (b)
(b  a)(b  a)
( x  a)( x 
После интегрирования:
b
ba
ab
a f ( x)dx  6 [ f (a)  4 f ( 2 )  f (b)]
— формула Симпсона (парабол)
ba
ab
[ f (a)  4 f (
)  f (b)]
3* 2
2
При заданном интервале интегрирования [a, b] квадратурные формулы обычно
применяются таким образом: сначала интервал разбивается на n интервалов длины
ba
h
, затем к каждому подынтервалу применяется соответствующая формула.
n
Пусть f i  f (a  ih ), где i = 0, 1, 2, 3, …, n
Для формулы трапеций:
b
n 1
ba
ba
f
(
x
)
dx

[
f

2
f

...

2
f

f
]

[
f

2
fi  f n ]

0
1
n 1
n
0
a
2n
2n
i 1
Для формулы Симпсона предполагают, что n — чётное:
b
ba
ba
h
a f ( x)dx  3n [ f 0  4 f1  2 f 2  ...  2 f n2  4 f n1  f n ]
n
Ошибки:
Для формулы трапеций:
b
n 1
h 2 (b  a) n
ba
h 2 (b  a)

* f ' ' ( )
f
(
x
)
dx

[
f

2
f

f
]

f
'
'
(

)

0
i
n
a
n
12
2n
12
i 1
Для формулы Симпсона:
b
ba
nh 5 IV
f
(
x
)
dx

[
f
(
a
)

4
f
(
a

h
)

2
f
(
a

2
h
)

...

4
f
(
b

h
)

f
(
b
)]

f ( ) , где n =
a
3n
90
2k — чётное
Квадратурные формулы Гаусса.
Формулы трапеций и Симпсона используют равноотстоящие узлы.
Смысл квадратурных формул Гаусса состоит в том, чтобы при наименьшем возможном
числе узлов точно интегрировать многочлен наивысшей возможной степени. Можно
показать, что при n гауссовых узлах по полученной исходя из них с помощью
интерполирования квадратурной формуле можно точно интегрировать все многочлены
степени k  2n  1.
Составим квадратурную формулу с 2-мя узлами, по которой точно интегрируются
многочлены до 3-й степени включительно.
b
 f ( x)dx  c
1
f ( x1 )  c2 f ( x2 )  R( f )
a
Если R (f) для f ( x)  a 0  a1 x  a 2 x 2  a3 x 3 обращается в нуль для любых a i , то
a0 (b  a)  a1
b2  a2
b3  a3
b4  a4
 a2
 a3
 c1 (a0  a1 x1  a 2 x12  a3 x13 )  c2 (a0  a1 x2  a 2 x22  a3 x23 )
2
3
4
Приравняем коэффициенты при ai (i  0,1, 2, 3) справа и слева:
c1  c 2  b  a

c1 x1  c 2 x 2  1 (b 2  a 2 )
2

 2
1 3
2
3
c1 x1  c 2 x 2  3 (b  a )

c x 3  c x 3  1 (b 4  a 4 )
1 2
 ` `
4
Откуда, в силу симметрии, c1  c 2 
ba
2
ab
3 ba

*
2
3
2
ab
3 ba
x2 

*
2
3
2
Значит, искомая квадратурная формула Гаусса:
b
ba
ab 1 ba
ab 1 ba
a f ( x)dx  2 [ f ( 2  3 * 2 )  f ( 2  3 * 2 )]
x1 
Приведём отрезок [a, b] к отрезку [-1, 1]
[a, b] → [0, 1] → [c, d] = [-1, 1]
xa
tx 
; x at 0
1)
ba
x  b  t 1
2) t (b  a)  x  a  x  a  t (b  a)  z  c  t (d  с)
xa
( d  c ) [ a , b ]  [ c, d ]
3) z  c 
ba
с = -1
d=+1
xa
2( x  a)
2 x  2a  b  a 2 x  (b  a)
z  1 
(1  (1)) 
1 

;
ba
ba
be
ba
b
1
a
1
 f ( x)dx    ( z) dz
2dx
ba
dz 
 dx 
dz
ba
2
(b  a) z  (b  a)
x
2
ab

2
ab
x2 

2
x1 
Для n = 3:
ba ba
ba

* z1 
;
2
2
2
3
1 ba ba
ba
*

* z2 
;
2
2
2
3
1
*
1
n
1
i 1
1
z1  
z2  
3
1
3
 f (t ) dt   A f (t )
i
i
5
1
A1  ; t1  
9
3
8
A2  ; t 2  0
9
5
1
A3  ; t 3 
9
3
Метод Ромберга.
Можно вычислить приближение Симпсона по особым линейным комбинациям формул
трапеций.
а
b
T — площадь под
20 = 1 трапецией
ba
( f (a )  f (b))
T (00 ) =
2
(0)
0
a
b
1
T 0 — площадь под
21 = 2 трапециями
a
b
a
b
2
3
T 0 — площадь под
T 0 — площадь под
2
2 = 4 трапециями
23 = 8 трапециями
к
Пусть промежуток интегрирования разбит на 2 равных частей и для этого разбиение по
формуле трапеций получено значение Т0(к). Значение Т0(к) совпадают со значениями
вычисляемого интеграла, если интегрируемая функция линейна, то есть f (x) является
многочленом 1-й степени.
По формуле:
4 m Tmk11  Tmk1
Tm(k) =
, называемой формулой Ромберга, построим следующую Т — схему:
4m  1
T0(0)
T1(0)
T2(0)
T0(1)
T3(0)
T1
(1)
T2
(1)
T0(2)
T1
T0
(2)
(3)
T1(3)
.
T0(4)
.
.
.
T2(2)
.
.
.
T3(1)
.
.
.
T4(0)
.
.
.
.
.
Для интегрируемых по Риману функций все столбцы и все наклонные строки Т — схемы
сходятся к искомому значению интеграла.
Выпишем явные формулы для следующего фрагмента Т — схемы:
T0(0)
T1(0)
T0(1)
T3(0)
T2
T0
(1)
(2)
1. k = 0; 2k = 20 = 1 часть, то есть (b - a)
ba
T0(0) =
[f (x0) + f (x4)], так как при k = 2; 2k = 22 = 4 части
2
ba
xi = a + i *
, i = 0, 1, 2, 3, 4
4
ba 1
ba 1
ba
2. T0(1) =
* [f (x0) + f (x2)] +
* [f (x2) + f (x4)] =
[f (x0) + 2f (x2) + f (x4)]
2
2
2
2
4
k = 1 → 2k = 21 = 2 части
ba
4*
[ f ( x0 )  2 f ( x 2 )  f ( x 4 )]  T0( 0)
(1)
(0)
1
(1)
(0)
4
T

T
4
*
T

T
0
4
11
11
3. T1(0) =
= 0
=
=
1
3
3
4 1
ba
(b  a)[ f ( x0 )  2 f ( x 2 )  f ( x 4 )] 
[ f ( x0 )  f ( x 4 )]
2
=
3
ba
ba
[2 f ( x0 )  4 f ( x 2 )  2 f ( x 4 )  f ( x0 )  f ( x 4 )] =
[ f ( x0 )  4 f ( x 2 )  f ( x 4 )]
6
6
4. T0(2) =
ba 1
ba 1
ba 1
* [ f ( x0 )  f ( x1 )] 
* [ f ( x1 )  f ( x 2 )] 
* [ f ( x 2 )  f ( x3 )] 
4
2
4
2
4
2
ba 1
ba
* [ f ( x3 )  f ( x 4 )] 
[ f ( x0 )  2( f ( x1 )  f ( x 2 )  f ( x3 )  f ( x 4 )]
4
2
8
5. T1(1) =
4 T T
4 1
1
(1)
11
1
(1)
11

( 2)
0
4T
T
3
(1)
0

4
ba
ba
[ f 0  2( f1  f 2  f 3 )  f 4 ] 
[ f0  2 f2  f4 ]
8
4

3
ba
[2 f 0  4 f1  4 f 2  4 f 3  2 f 4  f 0  2 f 2  f 4 ] =
12
ba
ba
[2 f 0  4 f1  4 f 2  4 f 3  2 f 4  f 0  2 f 2  f 4 ] =
[ f 0  4 f1  2 f 2  4 f 3  f 4 ] —
12
3* 4
формула Симпсона (парабол)
=
6. T2
(0)
4 2 T2(011)  T2(01) 16T1(1)  T1( 0)
=


15
42  1
ba
ba
[ f 0  4 f1  2 f 2  4 f 3  f 4 ] 
[ f0  4 f2  f4 ]
12
6

=
15
ba
[8 f 0  32 f1  16 f 2  32 f 3  8 f 4   f 0  4 f 2  f 4 ] 
=
90
ba
[7 f 0  32 f1  12 f 2  32 f 3  7 f 4 ] — формула Ньютона — Котеса (и т.д.)
=
90
Задача: Известно, что
1
4
0 1  x 2 dx  π
Определить приближённо число π, проведя для указанного интеграла 4 итерации по
Ромбергу.
Дополнение 1:
2
x12  [(b  a)  x1 ] 2  (b 2  ab  a 2 )
3
3[ x12  (b  a) 2  2(b  a) x1  x12 ] = 2 (b 2  ab  a 2 )
16 *
6 x12  6(b  a) x1  3b 2  6ab  3a 2  2b 2  2ab  2a 2  0
6 x12  6(a  b) x1  b 2  4ab  a 2  0
6(b  a)  36(b 2  2ab  b 2 )  24b 2  96ab  24a 2
x1 

12
2
6(b  a)  12b 2  24ab  12a 2 6(a  b)  2 3(a  b)

=
=
12
12
3(a  b)  (b  a ) 3 a  b b  a 3


=
6
2
2 3
ab
3 ba
ab
3 ba


Так как x1 и x 2 симметричен, то: x1 
; x2 
2
3 2
2
3 2
b
ba
ab
3 ba
ab
3 ba
a f ( x)dx  2 [ f ( 2  3 2 )  f ( 2  3 2 )]
Вычисление интеграла по формуле трапеций.
n 1
ba
[
f

2
fi  fn ]

0
a
2n
i 1
Sub Трапеций ()
a = CSng (InputBox(“Нижний предел интегрирования”)
b = CSng (InputBox(“Верхний предел интегрирования”)
n = CSng (InputBox(“Число отрезков разбиения”)
h = (b-a)/n
Int_tr = 0
x…= a + h
for i = 1 to n -1
int_tr = int_tr + Funk (x…)
…
Next i
int_tr = h (Funk(a) + int_tr + Funk(b)) / 2
i = MsgBox(int_tr, 1, “Интеграл по формуле трапеций = ”)
end sub
b
f ( x)dx 
Вычисление интеграла методом Симпсона.
b
S   f ( x)dx  S n  Rn
a
n = 2m частей: x0  a, x1  a  h,..., xn  b с шагом h 
ba
;
n
h
Пусть yi  f ( xi ) , тогда S n  [ y 0  4 y1  2 y 2  4 y 3  ...  y 2 m ]
3
5 2m
h
Rn    y IV ( k ),  k  [ xk 1 , xk ]
90 k 1
Затем количество точек разбиения удваивается и производится оценка точности
вычислений:
| S  Sn |
Rn  2 n
15
Если Rn  E1 , то количество точек разбиения удваивается. Значения суммы
2( y1  y 2  ...  y 2 m1 ) сохраняются, поэтому для вычисления интеграла при удвоении
количества точек разбиения требуется вычислять значения yi лишь в новых точках
разбиения.
Контрольный пример: E1  10 6
0
e
x
dx  1  e 2  6.389056099...
2
Sub Симпсон_автомат ()
e1 = 1E – 6
a = CSng (InputBox(“Нижний предел”))
b = CSng (InputBox(“Верхний предел”))
S2 = 1: h = b – a
x = a : call fun k (x, f): S = f
x = b : call fun k (x, f): S = S + f
m1: S3 = S2 : h = h / 2 : S1 = 0 : x1 = a + h
m2: x1 = x1 : call fun k (x, f) : S1 = S1 + 2 * f
x1 = x1 + 2 * h : if (x1 < b) = (h > 0) then goto m2
S = S + S1 : S2 = (S + S1) * h / 3
x = abs (S3 – S2) / 1S: if x > e1 then goto m1
i = MsgBox (S2, 1,”Интеграл по Симпсону”)
i = MsgBox (x, 1, “Точность = ”)
end Sub
Sub funk (x, f)
f = exp (x)
end Sub
Интеграл по Симпсону
- 6,38905665
Точность =
5,40539622E-07
Вычисление интеграла методом Гаусса.
ba
 Ai f (ti )  Rn
2 i 1
a
ba ba
ti 

xi Узлы xi — корни множеств Лежандра степени n.
2
2
b  a b  a 2n
Rn 
(
) max | f ( 2 n ) ( x) |, x  [a, b]
2.5 n 3n
Так как концы [a, b] не входят в число узлов xi , то интегрирование по Гауссу удобно для
вычисления несобственных интегралов.
Используем восемь узлов (n = b);
x1   x8  0.96028986
b
 f ( x)dx 
n
4
A1  A8  0.10122854
2
 x dx 
0
x3 4
1
|0  21
3
3
x 2   x7  0.79666648
A2  A7  0.22238103
x3   x6  0.52553242
A3  A6  0.31370664
x 4   x5  0.18343464
A4  A5  0.36268378
Sub Гаусс_8 узлов ()
Dim x (1 to 8) As Single, A(1 to 8) As Single
x (1) = -0.96028986
x (2) = -0.96028986
x (3) = -0.96028986
x (4) = -0.96028986
A(1) = 0.10122854
A(2) = 0.10122854
A(3) = 0.10122854
A(4) = 0.10122854
A1 = .5 * (A + B) : A2 = .5 * (B - A) : G = 0
for i = 1 to 4
x = A1 + A2 * x (i)
call funk (x, y)
G = G + A(i) * y
next i
for i = 1 to 4
x = A1 – A2 * x (5 - i)
call funk (x, y)
G = G + A (5 - i) * y
next i
G = G * A2
i = MsgBox (G, 1, “Интеграл по Гауссу = ”)
Sub funk (x, y)
y=x*x
end Sub
Отметим, что точна для полиномов до (2n - 1) степени, то есть до 15-й степени.
b

a
Вычисление интеграла по формуле Симпсона.
h
2h M 1
4h M
f ( x)dx  [ f (a)  f (b) 
f ( x2 k ) 

 f ( x2k 1 )]
3
3 k 1
3 k 1
xk  a  kh, где k = 0, 1, 2, …, 2M;
x0  a
x2 M  b
Sub Симпсон ()
h = (b-a) / (2 * m)
S1 = 0
S2 = 0
For k =1 to m
x = a + h (2 * k - 1)
S1 = S1 + funk (x)
next k
for k =1 to m -1
x=a+h*2*k
S2 = S2 + funk (x)
next k
S = h * (funk (a) + funk (b) + 4 * S1 + 2 * S2) / 3
K = MsgBox (S, 1,”Интеграл по Симпсону = ”)
end Sub
Function funk (x)
funk k = exp (x)
end Function
Дифференциальные уравнения.
Рассмотрим уравнение вида y’ = f (x, y) с начальным условием y( x0 )  y0
Например, y' = y при y (0) = 1
dy
 y решается как y  ae x , то y (0) = 1 = a * e 0  1 → a = 1
Так как
dx
В общем случае решение дифференциального уравнения — семейство кривых, из
которого начальное условие выделяет определённую кривую, которая проходит через
заданную точку.
2ex
ex
1/2ex
2
1
x
1. Решение дифференциального уравнения с помощью ряда Тейлора.
y = f (x)
y ''
y '''
y ( x)  y ( xi )  yi' ( x  xi )  i ( x  xi ) 2  i ( x  xi ) 3  ...
2!
3!
Если считать известными точки ( x0 , y0 ), ( x1 , y1 ),..., ( xi , yi ) предполагая, что xi  x0  ih , то
в точке xi 1 :
h 2 ''
y ( xi 1 )  yi  h * y ( xi ) 
yi ( xi )  ...
2!
'
i
Аппроксимация и интерполяция данных.
Полиномиальная аппроксимация данных измерений, которое сформированы как
некоторый вектор Y, при некоторых значениях аргумента, которые образуют вектор X
такой же длины, что и вектор Y, осуществляется процедурой polyfit (X, Y, h), где h —
порядок аппроксимирующего полинома.
Результатом является вектор длиной (h + 1) коэффициентов аппроксимирующего
полинома (в смысле МНК).
Пример: пусть значений аргумента: x = [1 2 3 4 5 6 7 8], а массив, соответствующий
значению измеренной величины: y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]
Применим указанную функцию при разных значениях порядка аппроксимирующего
полинома:
>> x = [1 2 … … 8]
>> y = [-1.1 … … 0.1]
>> polifit (x, y, 1)
ans = 0.1143 – 0.2393
>> polifit (x, y, 2)
ans = -0.1024 1.0357 -1.7750
>> polifit (x, y, 3)
ans = 0.0177 -0.3410 1.9461 -2.6500
>> polifit (x, y, 4)
ans = -0.0044 0.0961 -0.8146 3.0326 -3.3893
Это означает, что заданную зависимость y (x) можно аппроксимировать:
1. Прямой
y (x) = 0.1143 * x – 0.2393
2. Квадратической параболой:
y (x) = -0.1024 * x2 + 1.0357 * x – 1.7750
3. Кубической параболой:
y (x) = 0.0177 * x 3 – 0.3410 * x2 + 1.9461 * x – 2.6500
4. Параболой 4-ой степени:
y (x) = -0.0044 * x4 + 0.0961 * x3 – 0.8146 * x2 + 3.0326 * x – 3.3893
Построим в одном графическом окне графики заданной дискретной функции и графики
всех полученных при аппроксимации полиномов:
>> x = [ 1 2 3 4 5 6 7 8]
>> y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]
>> P1 = polyfit (x, y, 1);
>> P2 = polyfit (x, y, 2);
>> P3 = polyfit (x, y, 3);
>> P4 = polyfit (x, y, 4);
>> stem (x, y);
>> hold
>> x1 = 0.5 : 0.05 : 8.5;
>> y1 = polyval (P1, x1);
>> y2 = polyval (P2, x1);
>> y3 = polyval (P3, x1);
>> y4 = polyval (P4, x1);
>> plot (x1, y1, x1, y2, x1, y3, x1, y4),
>> grid, set (gca, ‘FontName ‘,’ Arial Cyr ‘,’ FontSize ,’ 16),
>> title (‘Полиномиальная аппроксимация’);
>> xlabel (‘Аргумент’);
>> ylabel (‘Функция’);
Пример: Рассмотрим аппроксимацию функции ошибки erf (x), которая является
ограниченной сверху функцией, в то время как аппроксимирующие полиномы
неограниченны, что приводит к ошибкам аппроксимации.
x
erf (x) = 2/√π ∫ e –t2 dt
0
x = (0 : 0,1 : 2,5);
y = erf (x);
p = polyfit (x, y, 6)
p = 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064
аппроксимирующего полинома 6-й степени.
f = polyval (p, x) — значения полинома в точках сетки.
Сформируем таблицу данных:
table = [x y f y - f]
x
y
f
y-f
0
0.1000
0
0.1125
0.0004
0.1119
-0.0004
0.0006
…
…
…
…
2.4000
2.5000
0.9993
0.9996
0.9995
0.9994
-0.0002
0.0002
0.0004 — коэффициенты
На отрезке [0, 0.25] точность аппроксимации находится в пределах 3 — 4 знаков.
Построим графики функций erf (x) и аппроксимирующего полинома на отрезке [0,5]:
x = (0 : 0.1 : 5);
y = erf (x);
f = polyval (p, x);
plot (x, y, ‘ ob ‘, x, f, ‘-g’),
axis ( [0 5 0 2] )
Аппроксимирование периодических функций на основе быстрого преобразования
Фурье.
yp = inter pft (y, h) — возвращает одномерный массив чисел, который является
периодической функцией, определённой в n точках и аппроксимирующей одномерный
массив y.
Если length (x) = m, а интервал дискретности dx, то интервал дискретности для y
определяется по формуле: dy = dx * m / n, причём n ≥ m всегда.
Пример: рассмотрим аппроксимацию функции y = sin (x), которая задана 11 точками на
интервале [0 10].
x = 0 : 10; y = sin (x);
xp = 0 : 0.25 : 10;
yp = inter pft (y, 41)
xt = 0 : 0.01 : 10; yt = sin (xt);
plot (xt, yt, ‘r’), hold on, plot (x, y, ‘ob’, xp, yp)
На графике построена точная функция y = sin (x) с указанием точек съёма информации и
её аппроксимация в 41 точке. Верно , что аппроксимация вне интервала [0, 15] имеет
нарастающую погрешность.
Интерполяция.
Интерполяция функции одной переменной кубическим сплайном.
yi = spline (x, y, xi) интерполирует значения функции y в точках xi внутри области
определения функции, используя кубические сплайны.
pp = spline (x, y, xi) возвращает pp — форму сплайна, использующую в М — файлах
ppval, mkpp, unmkpp.
V = ppval (pp, xx) вычисляет значение кусочно — гладкого полинома pp для значений
аргумента xx.
Функция pp = mkpp (breaks, coefs) формирует кусочно — гладкий полином pp по его
характеристикам.
Пример: Зададим синусоиду всего 10 точками и проведём интерполяцию кубическими
сплайнами, используя мелкую сетку.
x = 0 : 10; y = sin (x);
xi = 0 : 0.25 : 10;
yi = spline (x, y, xi);
plot (x, y, ‘0’, xi, yi, ‘g’), grid
Определим pp — форму сплайна.
pp = spline (x, y);
[breaks, coeffs, l, k] = unmkpp (pp)
Breaks = 0 1 2 3 4 5 6 7 8 9 10
Coeffs =
1) -0.0419 -0.2612 1.1446 0
2) … … …
.
.
.
10) 0.1190 -0.1894 -0.8856 0.4121
l= 10
k =4
Вычислим pp — форму в узловых точках сетки.
V = ppval (pp, x)
V=
0 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121 -0.5440
Особенности задания параметров:
yi = spline (x, y, xi) — интерполирует значение вектора y, заданного при значениях
аргумента, представленных в векторе x, и выдаёт значение интерполирующей функции в
виде вектора yi при значениях аргумента, заданных вектором xi.
! В случае, когда вектор x не указан, по умолчанию принимается, что он имеет длину
вектора y и каждый его элемент равен номеру этого элемента.
>> x = -0.5 : 0.1 : 0.2;
>> y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1];
>> x1 = -0.5 : 0.01 : 0.2;
>> y2 = spline (x, y, x1);
>> plot (x, y, x1, y2), grid
>> set (gca, ‘FontName’, ‘ArialCyr’, ‘FontSize’, 16),
>> title (‘Интерполяция процедурой SPLINE’);
>> xlabel (‘Аргумент’);
>> ylabel (‘Функция’);
Одномерная табличная интерполяция.
Yi = interp1 (x, y, xi, ‘<метод>’)
‘<метод>’ — ‘hearest’ — ступенчатая.
‘linear’ — линейная.
‘cubic’ — кубическая.
‘spline’ — кубическими сплайнами.
Если метод не указан, по умолчанию осуществляется линейная интерполяция.
Аргумент x должен изменяться монотонно; кроме того для кубической интерполяции
предполагается, что сетка по x равномерна.
Пример: (с тем же вектором)
>> x = -0.5 : 0.1 : 0.2;
>> y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1];
>> x1 = -0.5: 0.01 : 0.2;
>> y1 = interp (x, y, x1);
>> y4 = interp (x, y, x1, ‘nearest’);
>> y2 = interp (x, y, x1, ‘cubic’);
>> y3 = interp (x, y, x1, ‘spline’);
>> plot (x1, y1, x1, y2, x1, y3, x1, y4), grid
>> set (gca, ‘FontName’, ‘ArialCyr’, ‘FontSize’, 16),
>> title (‘Интерполяция процедурой INTERP1’);
>> xlabel (‘Аргумент’);
>> ylabel (‘Функция’);
Аргумент.
Пример: зададим синусоиду всего 10 точками и проведём интерполяцию, используя
мелкую сетку:
x=0:10;
>> y = sin(x);
>> xi = 0:0.25:10;
>> yi = interp1(x,y,xi);
>> plot (x, y, 'o', xi, yi, 'm'), hold on
>> y = interp1(x, y, xi, 'spline');
>> plot (x, y, 'ob', xi, yi, 'g' ), grid, hold off
Высокоуровневая графика.
Matlab показывает графические объекты в специальных графических окнах, имеющих в
заголовке слово Figure.
x = 0 : 0.01 : 2;
y = sin (x);
plot (x,y)
Не убирая окно с экрана:
x = 0 : 0.01 : 2; z = cos (x); plot (x,z) и получаем новый график в том же графическом окне
(при этом старые оси координат и график … — этого можно так же добиться командой
clf. Команда cla удаляет только график приведением осей координат к их стандартным
диапазонам от 0 до 1).
Если 2-ой график провести «поверх 1-го графика», то перед вторичным вызовом
графической функции plot нужно выполнить команду hold on, которая предназначена для
удаления текущего графического окна:
Того же самого можно добиться, потребовав от функции plot построить сразу несколько
графиков в рамках одних и тех же осей координат:
x = 0 : 0.01 : 2;
y = sin (x); z = cos (x);
plot (x, y, x, z)
Если нужно визуализировать несколько графиков, чтобы они не мешали друг другу, то это
можно сделать двумя способами:
1)
Поострить их в разных графических окнах. Например, построив sin и cos x в
пределах одного графического окна, вычисляем массив значений W для функции exp:
W = exp (x);
Затем: figure; plot (x,w) — exp строится в новом графическом окне Figure №2 — в первом
окне по вертикальной оси диапазон — 0,5 до 1, а во втором — от 0 до 8.
2)
Показ нескольких графиков без конфликта диапазонов осей координат является
использование функции.
Subplot — позволяет разбить область вывоза графической информации на несколько
подобластей, в каждую из которых можно вывести графики различных функций.
Subplot (1, 2, 1); plot (x, y, x, z)
Subplot (1, 2, 2); plot (x, w)
1-ый аргумент — число рядов подобластей.
2-й аргумент — число колонок подобластей.
3-й аргумент — номер подобласти.
Логарифмические масштабы графиков.
Semilogx, semilogy, loglog
Подробно: help_имя _функции.
Полярные координаты.
phi = 0 : 0.01 : 2 * pi;
r = sin (3 * phi);
polar (phi, r)
Дополнительные возможности графики — цвет, стиль линии, надписи.
x = 0 : 0.1 : 3; y = sin (x);
plot (x, y, ‘r-’, x, y, ‘ko’)
1-ый стиль: ‘r-’ — проведение линии красным цветом (буква r), — — проведение
сплошной линии.
2-й стиль: ‘ko’ — чёрный цвет (k), 0 — окрестностями в вычисляемых точках.
В общем случае:
Plot (x1, y1, s1, x2, y2, s2, …) — Графики y1(x1), y2(x2), … стилями s1, s2, …
Функция вида: plot (x1, y1, s1, x1, y2, s2) — можно провести график y1(x1) — одним
цветом, а точки на нём (вычисляемые точки) — другим цветом.
Стили s1, s2, … задаются в виде набора 3-х символьных маркеров, заключаемых в
апострофы.
Тип линии:
Маркер
Тип линии
—
Непрерывная
——
Штриховая
:
Пунктирная
—.
Штрих пунктирная
Цвет:
Маркер
с
Цвет линии
Голубой
Маркер
g
Цвет линии
Зелёный
Фиолетовый
Жёлтый
Красный
m
y
r
Синий
Белый
Чёрный
b
w
k
Тип проставляемых «точек»:
Маркер
Тип точки
.
+
*
0
×
Точка
Плюс
Звёздочка
Кружок
Крестик
Можно указывать не все три маркера — тогда используются маркеры, установленные по
умолчанию.
Порядок указания маркеров — произвольный ‘r + - ’ и ‘r - +’ — результат один и тот же.
Если в стиле маркер поставить типа «точка», но не ставить маркер на тип линии, то
отображаться будут только вычисляемые точки, а непрерывной линией они не
соединяться.
Дескрипторный метод оформления графиков (ДМ).
ДМ относится к так называемой низкоуровневой графике Matlab. Дескрипторная графика
имеет дело с базовыми графическими объектами, каждый из которых может быть
индивидуально настроен посредством задания всех его свойств. Детальное знакомство
невозможно минимальными усилиями, так как количество свойств отдельных объектов
доходит до 100.
Пример: Изменение толщины линии:
x = 0 : 0.1 : 3; y = sin (x);
hPlot = plot (x, y);
set (hPlot, ‘LineWidnth’, 7);
Функция plot через опорные (вычисленные) точки с координатами x, y проводит отрезки
прямых линий. Прямые линии в системе Matlab представляют собой графические объекты
типа line. Эти объекты имеют огромное число свойств и характеристик, которые можно
менять. Доступ к этим объектам осуществляется по их описателям — дескрипторам;
handles — англ.
Описатели графического объекта тип line, используется для построения графики,
возвращается функцией plot. Мы его запоминаем в переменной hPlot. Затем этот
описатель предлагается функции set для описания конкретного графического объекта.
Именно для такого опознанного объекта функция set изменяет характеристики, указанные
в других её аргументах. В нашем примере мы указали свойство ‘LineWidnth’ (толщина
линии) и его новое значение 7 (по умолчанию — 0,5).
Текущее значение любого параметра (атрибуты, характеристики) графического объекта
Можно узнать с помощью функции get. Например, если после получения графика ввести
и исполнить width = get (hPlot, ‘LineWidth’), то получим width = 7.
Чтобы ознакомиться со списком всех свойств графического объекта, нужно вызвать
функцию get, указав её описатель объекта в виде единственного параметра. Например, для
описателя hPlot объекта типа line находим весь список его свойства:
Get (hPlot)
0
0
1
Color = [0 0 1]
RGB — кодировка [красный зелёный синий]
Erase Mode = normal (способ стирания)
LineStyle = —
LineWidth = [7]
Marker = none
MarkerSize = [6]
…
…
Type = line
…
…
Visible = on
Оформление осей координат, надписи на осях.
Matlab устанавливает пределы на горизонтальной оси равными тем значениям, которые
указаны для независимой переменной. Для зависимой переменной по вертикальной оси
Matlab самостоятельно вычисляет диапазон изменения значений функции.
Можно явным образом навязать свои пределы изменения переменных по осям координат.
Это делается с помощью функции: axis ([xmin, xmax, ymin, ymax]), причём команду можно
вводить с клавиатуры сколько угодно раз уже после построения графика функции. Такое
масштабирование позволяет лучше визуализировать интересующие нас детали.
Например, для ранее полученного графика sin axis ([1.5 2.5 0.5 2]) — лучше
воспроизводится вершина.
(Эту функцию нужно использовать при графическом отделении корней)
Изменение количества числовых меток на осях.
Изменить отметки на осях можно с помощью функции set, обрабатывающий графический
объект axes. Это объект, который содержит оси координат и белый прямоугольник,
внутри которого проводится график функции. Для получения описателя такого объекта
применяют функцию gca.
Эту функцию вызывают без параметров. Например: hAxes = gca;
Set (hAxes, ‘xtick’, [1.5, 1.75, 2.0, 2.25, 2.5]) — устанавливается 5 меток по горизонтальной
оси.
Проставление надписей на графике.
xlabel — по оси x — название горизонтальной оси.
ylabel — по оси y — название вертикальной оси.
Надпись в произвольном месте:
Text (x, y, ‘текст’)
Общий заголовок — title (‘Функция sin (x)’)
Нанесение измерительной сетки на всю область графика grid on.
Например:
Title (‘Function sin (x) graph’);
xlabel (‘x coordinate ’); ylabel (‘sin (x)’);
text (2.1, 0.9, ‘\ leftarrowsin (x)’); grid on;
Спиральные управляющие символы вводятся внутри текста после символа \. (У нас ← стрелка влево). В частности, для вывода части текста в следующую строку применяется
управляющий символ newline.
Воздействие на текст.
Чтобы воздействовать на шрифт, которым изображается надпись, нужно запомнить
дескриптор, возвращаемый этой функцией:
hText = text (2.1, 0.9, ‘\ leftarrowsin (x)’);
Это описатель графического объекта типа text.
Вообще, если нужно узнать, какой тип графического объекта представляет некоторый
описатель, то для этого нужно вызвать функцию get, запросив у неё свойство ‘Type’.
Type = get (hText, ‘Type’)
Type =
Text
Располагая описателем объекта типа text, можно изменять ряд его атрибутов. Например,
Set (hText, ‘Color’, [0 1 0], ‘FontSize’, [18]); — изменит внешний вид ранее выведенной
надписи — более крупный шрифт, а цвет надписи — зелёный.
Цвет фона.
По умолчанию — белый цвет.
Присвоим цветовому свойству объекта типа axes значение [0.5, 0.8, 0.5] — зеленоватый.
Сначала получим описатель этого объекта:
hAxes = gca; Функция gca предназначена для поиска описателя текущего объекта axes.
Так как у нас имеется единственный объект axes, то проблемы выбора нет. Если
существует несколько областей, в которых рисуются графики функций, то есть, есть
несколько объектов типа axes, то сначала мышью делают объект текущим, а после этого а
после этого вводят представленный выше код.
Сменим цвет фона:
Set (hAxes, ‘Color’, [0.5, 0.8, 0.5]);
Аналогично меняем цвет фона всего графического окна:
FigureColor = [0.8, 0.5, 0.5]; hFigure = get;
Set (hFigure, ‘Color’, FigureColor); — здесь с помощью функции get мы получаем
описатель объекта типа figure, представляющего графическое окно, а затем меняем его
цвет на красноватый.
М — файлы — М — сценарии и М — функции.
Файлы содержащие коды языка Matlab, называются М — файлами.
Для создания М — файла используется текстовый редактор. Вызову М — файла
предшествует присваивание значений входным аргументам. Результатом является
значение выходной переменной. Таким образом, вся процедура включает две операции:
1)
Создать М — файл, используя текстовый редактор:
Function C = myfile (a, b)
C = sqrt ((a^2) + (b^2))
2) Вызвать М — файл из командной строки или из другого М — файла:
>> a = 3
>> b = 4
>> с = my file (a, b)
c=5
Типы М — файлов: М — сценарии и М — функции:
М — сценарий
Не использует входных и выходных
аргументов.
Оперирует с данными из рабочей области.
Предназначен для автоматизации шагов,
которые нужно выполнять много раз.
М — функция
Использует входные и выходные
аргументы.
По умолчанию внутренние переменные
являются локальными по отношению к
функции.
Предназначена для расширения
возможностей Matlab (библиотеки функций,
пакеты прикладных программ).
Структура М — файла.
Строка определения функции: function f = fact (n)
Первая строка комментария: % FACT вычисление факториала.
% Вычислить fact (n) = prod (1: n)
Тело функции: f = prod (1: n); % произведение элементов.
Структура этой простейшей функции содержит компоненты, являющиеся общими для
любых функций системы Matlab:
1) Строка определения функции — задаёт имя, количество и порядок следования
входных и выходных аргументов;
2) Первая строка комментария — определяет назначение функции. Она выводится на
экран с помощью команд: lookfor или help <имя каталога>
3) Комментарий — выводится на экран вместе с первой строкой при использовании
команды help <имя функции>
4) Тело функции — это программный код, который реализует вычисления и
присваивает значения выходным аргументам.
Создание М — файлов.
Можно использовать встроенный редактор — отладчик Matlab или любой текстовый
редактор с ASCII — …
Открыть редактор: Меню: File — New — M—file; затем edit.
Пусть создан файл fact.m
1)
Вывести на экран имена файлов текущего каталога: what
2)
Вывести на экран текст М — файла fact.m: type fact
3)
Вызвать функцию fact с заданными параметрами: fact (5)
Ans = 120
М — сценарий.
Сценарий является самым простым типом М — файла у них нет входных и выходных
аргументов. Они используются для автоматических многократновыполняемых
вычислений. Сценарии оперируют файлами из рабочей области и могут генерировать
новые данные для последующей обработки в этом же файле. Данные, которые
используются в сценарии, сохраняются в рабочей области после завершения сценария и
могут быть использованы для дальнейших вычислений.
Пример: Вычислим радиус — вектор ro для различных тригонометрических функций от
угла phi и … последовательность графиков в полярных координатах.
Строка комментария % М — file petals — сценарий построения лепесткового графика.
Вычисления:
phi = pi : 0.01 : pi;
ro = (1, :) = 2 * sin (5 * phi).^2;
ro = (2, :) = cos (10 * phi).^3;
ro (3, :) = sin (phi).^2;
for i = 1 : 4
polar (phi, ro(i, :))
pause
end
Этот файл является сценарием. Далее надо запомнить маршрут, затем в командной строке
ввести команду petals (без расширения) или вызвать её через окно просмотра маршрутов.
Сценарий отобразит 4 графика путём нажатия Enter или Esc. В сценарии отсутствуют
входные переменные — программа petals.m сама создаёт переменные, которые
сохраняются в рабочей области системы. Когда выполнение завершено, переменные (I,
phi, ro) остаются в рабочей области. Для того, чтобы их увидеть нужно исполнить who (s).
М — функции:
М — функции являются М — файлами, которые допускают … входных и выходных
аргументов. Они работают с переменными в пределах собственной рабочей области;
Пример: функция sred — М — файл, вычисляющий среднее значение элементов вектора:
Function y = sred (x)
% SRED Среднее значение элементов вектора.
% SRED (x), где x — вектор. Вычисляет среднее значение % элементов вектора.
% Если входной аргумент не является вектором, генерируется ошибка.
[m, n] = size (x);
if (~((m = = 1) | (n = = 1)) | (m = = 1 & n = = 1))
error (‘Входной массив должен быть вектором’)
end
y = sum (x) / length (x); % Вычисления
Далее (после создания М — файла sred.m):
В рабочем пространстве Matlab:
z = 1 : 99;
sred (z)
ans = 50
Структура М — функции: М — функция состоит из:
- Строки определения функции;
- Первой строки комментария;
- Собственно комментария;
- Тела функции;
- Строчных комментариев;
Строка определения функции сообщает системе Matlab, что файл является М —
функцией, а также определяет список входных аргументов.
Function y = sred (x);
Function — ключевое слово, определяющее М — функцию;
y — выходной аргумент;
sred — имя функции;
x — входной аргумент.
Если функция имеет более одного выходного аргумента, то список выходных аргументов
помещается в квадратные скобки. Входные аргументы, если они присутствуют,
помещаются в круглые скобки.
В качестве разделителей и тех и других используются запятые.
Function [x, y, z] = sphere (theta, phi, rho)
Имена входных переменных могут, но не обязаны совпадать с именами, указанными в
строке определения функции.
Первые строки комментария выводятся по команде help <имя функции>. Кроме того, 1я строка комментария выводится на экран по команде поиска lookfor.
Оглавление каталога: можно создать комментарий для целого каталога, если
сформировать специальный файл с именем Contents.m . Этот файл должен содержать
только строки комментариев.
Matlab выводит на экран строки файла Contents.m по команде help <имя_каталога>
Если каталог не содержит файла Contents.m, то по команде help<имя _каталога>
распечатывается первая строка комментария для каждого М — файла данного каталога.
Имена М — функций: 31 символ, начиная с буквы _ любые комбинации букв, цифр и
подчёркиваний.
Имя файла, содержащего М — функцию, составляется из имени функции и расширения
.m .
Двойственность функций и команд.
Команды системы Matlab — это операторы вида: load
Help
Многие команды могут быть модифицированы добавлением операндов:
Load marz31. dat
Help magic
Type rank
Альтернативный метод задания модификаторов — определить их в качестве строковых
аргументов функции:
Load (‘marz31. dat’)
Help (‘magic’)
Type (‘rank’)
В этом заключается двойственность понятий команды и функции в системе Matlab. Любая
команда вида command argument может быть записана в форме функции command
(‘argument’)
Преимущество функционального описания проявляется, когда строка аргументов
формируется по частям.
Пример показывает, как может быть обработана последовательность файлов marz1. dat и
т.д. Здесь используется функция int2str, которая переводит целое число в строку символов
что позволяет сформировать последовательность имён файлов:
For d = 1 : 31
S = [‘marz’ int2str(d)’.dat]
Load (S) % Загрузить файл с именем marz ‘d’.dat
% операторы обработки файла
End
Анимация в Matlab.
Существует два основных способа показа анимационных изображений:
1) В цикле выводятся меняющиеся картинки в графический объект axes (задаёт область
размещения графика в окне объекта figure), свойства которого (через свойства его
дочерних объектов _Line, Patch, Surface, Text) устанавливаются специальным образом для
достижения приемлемого качества перерисовки содержимого графического окна
системы Matlab.
2) Используется предварительная подготовка отдельных кадров, которые запасаются для
дальнейшего показа в некотором числовом массиве. Сам же последовательный кадровый
показ осуществляется специальной функцией movie (“кино”).
Иллюстрация 1-го способа: продемонстрируем равномерное движение точки конечного
размера по окружности.
1 этап. Подготовим саму «точку»:
x = -1 : 0.01 : 1;
y1 = sqrt (1 – x * x);
y2 = -y1;
plot (x, y1, ‘k’, x, yr, ‘k’);
axis square; % масштабирование и вывод осей координат hold on
— рисуется чёрным цветом круговая траектория, по которой и будет двигаться «точка».
Команда hold on — весь последующий графический вывод осуществляется в то же самое
графическое окно.
2 этап: Ставим «точку» в её начальное положение:
x = 1; y = 0;
h = plot (x, y, ‘.r’);
set (h, ‘EraseMode’, ‘xor’, ‘MarkerSize’, 18);
«Точка» представляет собой график функции, являющийся прямой линией, то есть
графическим объектом типа line, состоящим из единственной точки красного цвета. Затем
мы динамически будем изменять координаты точки, относящейся к графическому объекту
типа line с дескриптором h. Matlab будет при этом стирать предыдущее изображение этого
графического объекта и рисовать его новые изображения. Чтобы «перерисовка» была
более гладкой, нужно для объекта типа line установить свойство ‘EraseMode’ (способ
стирания) равным значению ‘xor’ («исключающее ИЛИ» над объектом и подпиской).
3 этап: Осуществляем циклическое продвижение «бусинки — точки» и её перерисовку:
t = 0; dt = 0.01; a = 0.5;
While 1, t = t + dt; x = cos (a * t); y = sin (a * t); … set (h, ‘xData’, x, ‘yData’, y); end
Для остановки «бесконечного» цикла вращение (так как условие для циклического
поворота всегда истинно) нужно использовать клавиши Ctrl + C или Ctrl + Break.
Сценарии и М — файлы.
Сценарий — текстовый файл, содержащий инструкции на М — языке, подлежащие
исполнению в автоматическом пакетном режиме. Файл имеет любое имя, но расширение
m: *.m — так называемый М — файл.
Пример: 1) А = [1 2 3; 4 5 6; 7 8 9]; — командное окно Matlab
2) Определим сценарий как М — файл;
В = [2 2 2; 1 0 1; 6 6 7];
C = A + B + 3;
После загрузки М — файла, переменные А, В, С — образуют единое рабочее
пространство Matlab. (М — файлы не путать с МАТ — файлами, в которых хранятся
переменные из рабочего пространства).
Типовой случай применения сценария — запись в М — файл текста, скопированного из
командного окна (через буфер обмена), или сохранённого в текстовом файле командой
diary [MainFile1.txt]. Копирование можно прекратить командой diary off. Затем лишние
инструкции или ошибки удаляются из текста файла и записываются в виде М — файла. В
результате в рабочем пространстве Matlab будут воссозданы все графические объекта
(если они были созданы). (Команды save и load графические объекты не
восстанавливают). Есть особенности при записи анимационных кодов в виде М —
файлов: (пример с «точкой»)
% — — пример анимации — —
x = -1 : 0.01 : 1;
y1 = sqrt (1 – x * x);
y2 = - y1;
plot (x, y1, ‘k’, x, y2, ‘k’);
axis square;
hold on
%———————————
x = 1; y = 0;
h = plot (x, y, ‘. r’);
set (h, ‘EraseMode’, ‘xor’, ‘MarkerSize’, 18);
%———————————
t = 0; dt = 0.01; a = 0.5;
while 1
t = t + dt;
x = cos (a * t); y = sin (a * t);
set (h, ‘xdata’, x, ‘ydata’, y);
drawnow
end
% — Run — To STOP, press Ctrl — C or Ctrl — Break
Команда drawnow не нужна в интерактивном режиме, когда команды вводятся с
клавиатуры и ввод заканчивается <Enter>.
Примечание: в автоматическом режиме, в цикле, команда drawnow означает посылку
системе Matlab специального сигнала о перестановке графического окна.
Графический интерфейс Matlab:
а) Высокоуровневый — включает команды и функции, автоматически контролирующие
масштаб, выбор цветов и т.п. и не требует манипуляций со свойствами графических
объектов.
б) Низкоуровневый интерфейс обеспечивается средствами дескрипторной графики, когда
каждому графическому объекту в составе рисунка ставится в соответствие некоторый
описатель (дескриптор), на который можно ссылаться при обращении к этому объекту.
Дескрипторная графика Handle Graphics — это объектно-ориентированная графическая
система, которая поддерживает компоненты, необходимые для создания графиков.
Объектами подсистемы дескрипторной графики являются базовые графические
элементы, которые используются для визуализации данных. Каждому графическому
объекту присваивается уникальный идентификатор, называемый дескриптором.
Используя дескриптор, можно управлять свойствами графического объекта.
В системе Matlab используется следующая иерархия графических объектов, связанных с
визуализацией.
Root
Figure
Axes
Line
Patch
Surface
Text
Описание объектов:
ROOT — графический объект находится в вершине иерархии и соответствует экрану
компьютера. Это единственный объект, который не имеет родителей, а все другие
графические объекты являются его потомками.
Прямым его потомком является графический объект Figure. Дескриптор объекта Root — 0
(«ноль»). Этот объект создаётся в момент запуска системы Matlab и не может быть удалён.
Но его свойствами можно управлять.
Свойства (их значения) устанавливаются с помощью Set (0). Текущее значение
возвращается с помощью get (0).
Figure — эти объекты соответствуют отдельным графическим окнам на экране терминала,
где отображаются визуализированные данные. В Matlab нет ограничений на количество
создаваемых окон (ограничения связаны с объёмом ОЗУ). Графические объекты Figure
являются прямыми потомками объекта Root.
Все высокоуровневые команды и функции, которые выводят графики (plot, surf, contour),
автоматически создают графический объект Figure, если он не существует.
Если открыто много графических окон, то одно из них выделяется в качестве текущего
графического объекта.
Дескриптором является номер окна: set (1) — установить; get (1) — возвращает значения
свойств Figure #1.
Axes — задаёт область размещения графика в окне объекта Figure. Объект Axes является
потомком для объекта Figure и в то же время родителем для графических объектов Line,
Patch, Surface, Text, которые применяются для визуализации данных.
Все команды и функции, которые выводят графики, например plot, surf, contour, mesh, bar,
автоматически создают графический объект Axes, если он не существует.
Дескриптор графического объекта Axes может быть определён с помощью команды gca.
Установить: set (gca)
Возвратить: get (gca)
Line — графические объекты line являются графическими примитивами, которые
используются для создания двумерных и трёхмерных графиков. Line — потомок Axes.
Высокоуровневые команды и функции plot, plot3, contour создают объекты line.
Дескриптор графического объекта line может быть получен, например, с помощью
функции h = plot ().
Установить: set (h(2)) h (2) — 2-й объект line
Возвратить: get (h(2))
Patch — один или несколько закреплённых многоугольников с выделенными границами.
Surface — трёхмерная визуализация массива данных, когда элемент массива определяет
высоту точки над плоскостью x — y.
Text — это строки символов.
Высокоуровневые команды и функции title, xlabel, ylabel, zlabel, gtext создают
графические объекты Text.
Дескриптор может быть получен, например, с помощью команды h = title (…).
Установить: set (h)
Возвратить: get (h)
Специальная графика Matlab.
Специальная графика направлена на не выявление функциональных зависимостей между
переменными, а на визуализацию информации, накопленной в виде больших массивов
числовых данных.
Визуализация данных, накопленных в одномерном массиве, осуществляется функцией
bar:
Применим bar к вектору x = [4 1 8 3 7 4]:
>> x = [4 1 8 3 7 4]; bar (x) (Enter) — получается столбцовая диаграмма:
Горизонтальная ось нумерует элементы вектора x.
В столбцовых диаграммах каждому элементу массива соответствует один столбец. Этот
принцип сохраняется и при отображении функций bar содержимого матриц, но для
наглядности столбцы, относящиеся к одной строке, группируется. В результате для
матрицы А = [5 2 4; 1 3 5; 2 1 4]; bar (A) порождает изображение, в котором разные
элементы из одной и той же строки изображаются разными цветами.
Значения на горизонтальной оси указывают номер строки.
Наглядность визуализации элементов матрицы улучшается, если перейти к 3-х мерному
изображению с помощью функции bar3.
Помимо функций для построения столбцовых диаграмм в Matlab используются функции
для круговых диаграмм, показывающие, какой процент от суммы всех элементов массива
составляет его конкретный элемент:
x=[3,7,1,2];
(против часовой стрелки)
pie (x)
Для наглядности рисунок целесообразно снабдить надписями с помощью дескрипторной
графики:
h = pie (x); hT = findobj (h, ‘Type’, ‘text’);
Pos = get (hT (1), ‘Position’); Str = get (hT (1), ‘String’);
Set (hT (1), ’String’, [‘1-’, Str], ‘Position’, Pos + [-0.1, 0, 0])
Функция findobj возвращает массив описателей четырёх текстовых объектов. Затем у 1-го
тестового объекта запрашиваем его позицию и его текстовое содержание, модифицируем
их с помощью функции set. Отметим, что для удаления уже проставленной записи нужно
функцией set установить свойство ‘string’ равным пустому массиву, то есть [ ].
Построение гистограмм:
x = rand (1, 10000); hist (x)
Функция rand генерирует вектор из 10000 случайных чисел, равномерно распределённых
на [0, 1]. Функция hist разбивает интервал [0, 1] на 10 подинтервалов.
Черенковая диаграмма: stem (стебель, черенок) — «черенки» позиционируются вдоль
горизонтальной оси: x = -1 : 0.1 : 1; y = asin (x); stem (x, y) — арксинус.
Для наблюдения за движением объектов по некоторой траектории применяют средство
динамической визуализации — функцию comet (комета).
Пример: равномерное движение по окружности в течение времени t от 0 до 20:
t = 0 : 0.1 : 20; x = cos (t); y = sin (t); comet (x, y) — движение материальной точки
моделируется в виде движения абстрактной «кометы» с хвостом, цвет которого
отличается от цвета всей траектории.
Если же нужно наблюдать за динамическим изменением координат x и y со времен t, то
применим comet (t, x); comet (t, y) — каждой из функций разворачивает во времени
процесс изменения координат.
Download