Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_ekzamenu_2_semestr(1).doc
Скачиваний:
2
Добавлен:
20.11.2019
Размер:
1.65 Mб
Скачать
  1. Решение систем линейных уравнений итерационными методами. Метод простой итерации.

Систему линейных алгебраических уравнений можно записать виде ax=b (1)-матричная форма.

Метод пр.ит.применяется для нахождения корней системы лин.уравнений с заданной точностью. Число шагов (итераций) определяется выбором начального приближения, x1 (0), x2(0)xn(0), погрешностью и зависит от коэффициента матрицы системы.

Для проведения итерационного процесса система записывается в виде: xx, где α=ε-zA, β=zB.

Матрица z выбирается так, чтобы выполнялось достаточное условие сходимости метода пр.итерации. ||α||=q < 1.

Нормой вектора B и матрицы А называют соответственно следующие числа: ;

(2)

Процесс последовательного приближения по методу пр.итераций может быть построении в соответствии с формулой: x(m+1)= αx(m)+ β (3), где начальное приближение – есть столбец свободных элементов

x(0)=

Если |α| < 1 то последовательность x(m) сходится по норме к истинному решению x, и справедливы следующие оценки:

|x(m)-x|≤ |x(m)- x(m-1)| (4);

|x(m)-x|≤ |x(1)- x(0)| (5)

Из (5) следует, что для достижения требуемой точности ε необходимо выполнить количество итераций m: m (6)

Если требуемая точность достигнута |x(m)- x(m-1)| ≤ , то процесс последовательного решения x прекращаем.

Существует формула, задающая уравнение прямой, проходящей через 2 точки со следующими координатами (2). Уравнение (3) . Тогда уравнение хорды будет следующее(4)

Найдем значение x=x1, для которого y=0 и выразим x1 .

X1=a-(f(a)(b-a))/(f(b)-f(a))

Теперь наш корень находится на отрезке [x1;b]. Применим метод хорд к этому отрезку. Проведем хорду, соединяющую точки А1( x1, f(x1)) и B0 (b, f(a)) и найдем x2-точку пересечения хорды А1 В0 с осью х. Получится следующая формула: X2= X1-(f(X1)(b- X1))/(f(b)-f(X1))

Продолжая этот процесс, получаем рекуррентную формулу вычисления приближений корня:

Xn+1= Xn-(f(Xn)(b- Xn))/(f(b)-f(Xn))

В этом случае конец b отрезка [a, b] остается неподвижным, а а перемещается. Вычисления продолжаются до тех пор, пока не достигнем Е. | Xn+1- Xn|<Е

f(a)<0, f(b)>0, f(a)>0, f(b)<0,

f’(x)>0, f ’’(x)<0 f’(x)<0, f ’’(x)>0

Соединим точки A0(a, f(a)) и B0(b, f(b)) хордой A0B0.

Точку пересечения хорды с осью х будем считать первым приближением корня. В этом случае неподвижным концом отрезка будет а. Уравнение хорды A0B0 :

(y-f(b))/(f(a)-f(b))= (x-b)/(a-b)

y=0 : x1 = b-(f(b)(b-a))/(f(b)-f(a))

x € [a; x1]

Проводим следующую хорду и вычисляем X2

X2= X1-(f(X1)(X1-а))/(f(X1)-f(а))

Xn+1= Xn-(f(Xn)(Xn-а))/(f(Xn)-f(a))

| Xn+1- Xn|<Е

Private Function fun(x As Double) As Double

fun = x * Cos(x) + 0.9 * Sin(x) - 0.1

End Function

Sub Макрос3()

Dim a As Double, a0 As Double, b As Double, b0 As Double, eps As Double, x As Double, i, n As Integer

eps = CDbl(InputBox("точность"))

Range("B2").Cells = eps:a = CDbl(InputBox("a"))

a0 = a:Range("B3").Cells = a:b = CDbl(InputBox("b"))

b0 = b:Range("B4").Cells = b:x = Hor(a0, b0, eps)

Range("C6").Cells = x:Range("C7").Cells = fun(x)

End Sub: Function Hor(a As Double, b As Double, e As Double) As Double: Dim x As Double, x0 As Double, n As Integer: If fun(a) * fun(b) <= 0 Then

n = 0: x0 = a: x = b: While Abs(x0 - x) > e

n = n + 1: x0 = x: x = b - fun(b) * (b - a) / (fun(b) - fun(a)): If fun(a) * fun(x) <= 0 Then: b = x : Else : a = x

End If : Range("C5").Cells = n: Hor = x: Wend : Else

MsgBox ("a,b=?"): Exit Function : End If : End Function

Алгоритм:

  1. Преобразуем исходную систему к виду xx+β.

  2. Находим норму матрицы.

  3. Если |α| < 1, то переходим к пункту 4.

  4. Задается начальное приближение и ε

  5. Рассчитывается количество итераций i.

  6. Вычисляется очередная итерация xi+1=n(xi)

  7. Если |x(m)- x(m-1)| ≤ , то процесс закончен, иначе переход к пункту 6.

Sub Макрос4()

Dim eps As Double, x(4) As Double : Dim i, n As Integer

eps = 0.0000001 : Range("B7").Cells = eps

Call Iter(eps, x, n)

Range("B10").Cells = x(1) : Range("C10").Cells = x(2)

Range("D10").Cells = x(3) : Range("E10").Cells = x(4)

Range("F10").Cells = n

End Sub

Метод простой итерации.

Sub Iter(e, x, n)

Dim x0(4) As Double, s As String

Dim i As Integer, j As Integer

Dim l As Boolean

Dim a(4, 4) As Double, b(4) As Double

For i = 1 To 4

a(i, 1) = Range("A" & Format(i + 1, "#0")).Cells

a(i, 2) = Range("C" & Format(i + 1, "#0")).Cells

a(i, 3) = Range("E" & Format(i + 1, "#0")).Cells

a(i, 4) = Range("G" & Format(i + 1, "#0")).Cells

b(i) = Range("J" & Format(i + 1, "###0")).Cells

x(i) = 0: Next i: n = 0

Do : n = n + 1: l = False

For i = 1 To 4 : x0(i) = x(i) : Next i

For i = 1 To 4 : x(i) = b(i) / a(i, i)

For j = 1 To i – 1 : x(i) = x(i) - a(i, j) / a(i, i) * x0(j) : Next j

For j = i + 1 To 4 : x(i) = x(i) - a(i, j) / a(i, i) * x0(j) : Next j

If Abs(x(i) - x0(i)) > e Then : l = True

End If : Next i : Loop Until Not l : End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]