Академический Документы
Профессиональный Документы
Культура Документы
Нижний Новгород
2020
Составители:
УДК 621.311.1
Научный редактор
Редактор
© Нижегородский государственный
технический университет им.
Р.Е. Алексеева, 2020
©, 2020
СОДЕРЖАНИЕ
Цель...............................................................................................................................4
Задание..........................................................................................................................4
Порядок выполнения, примеры.................................................................................4
1. Уравнения узловых напряжений........................................................................4
1.1. Алгоритм решения системы методом Гаусса..........................................4
1.2. Метод Зейделя - модификация метода Якоби.........................................5
2. Средства VBA, которые использовались при выполнении задания..............8
2.1. Макрос, выполняющий операцию ввода информации о матрице.........9
2.2. Макрос, очищающий область расчета......................................................9
2.3. Макрос, выполняющий расчет по методу Гаусса.................................10
2.4. Макрос, выполняющий расчет по методу Зейделя...............................11
Содержание отчета....................................................................................................13
Контрольные вопросы...............................................................................................14
Библиографический список......................................................................................15
Цель
Целью работы является повторение операции работ с матрицами,
составление макроса, позволяющего производить решение системы
линейных уравнений средствами VBA в MS Office Excel.
Задание
Составить макрос для ввода данных строк и столбцов, макрос для
расчета по методу Гаусса, по методу Зейделя.
4
μik = Aik / AKmax, где I номер строки, из которой происходит
вычитание. (I = k + 1, k + 2, …, n).
Aij = Aij – μik Akj, bi = bi – μikbk. (I = k + 1, …, n. J = k, …, n).
В результате выполнения этого пункта, все элементы матрицы A из
k-того столбца, стоящие ниже диагонали, превращаются в нулевые.
K = k + 1.
Если k меньше n, то перейти на пункт 2. Результатом работы
прямого хода метода Гаусса является верхняя треугольная матрица. Все
элементы, стоящие ниже главной диагонали, в преобразованной матрице
будут равны нулю.
Обратный ход.
xn = bn / Ann.
K = n – 1.
Найти сумму d = Akk + 1xk + 1 + … + Akn∙xn , и k-тую компоненту
решения xk = (bk – d) /Akk. k = k – 1.
Вывести полученный массив x. Конец подпрограммы.
1.2. Метод Зейделя - модификация метода Якоби
Метод Зейделя:
x1 b12 x2 b13 x3 ... b1, m1 xm 1 b1m xm c1
x2 b21 x1 b23 x3 ... b2, m 1 xm1 b2 m xm c2
x3 b31 x1 b32 x2 ... b3, m1 xm1 b3 m xm c3
...
xm bm1 x1 bm 2 x2 bm 3 x3 ... bm ,m 1 xm 1 ... cm
bi
aij
bij ci
aii , aij i, j 1, 2,..., m, j i
, .
Введем нижнюю и верхнюю треугольные матрицы:
0 0 ... 0 0 b12 ... bm1
b 21 0 ... 0 0 0 ... bm 2
B1 B2
... ...
bm1 bm 2 ... 0 , 0 0 ... 0 .
5
x ( k 1) B1 x ( k 1) B2 x ( k ) c .
|| x ( n ) x || q n || x (0) x || ,
|| B 2 ||
q 1.
где 1 || B1 ||
Доказательство:
x ( k 1) x B1 ( x ( k 1) x) B2 ( x ( k ) x ) ,
поэтому x x при n .
(n)
Расчетные формулы:
x1( k 1) b12 x1( k ) c1 ;
x1( k 1) b12 x1( k ) c1 ;
a12 a
b12 ; b21 21 ;
a11 a22
b1 b
c1 ; c2 2 .
a11 a22
Первое уравнения задает на плоскости х1О х2 прямую l1, второе –
прямую l2.
7
Замечание: метод Якоби ориентирован на системы с матрицами,
близкими к диагональным, а метод Зейделя - на матрицы, близкие к
нижним треугольным.
2. Средства VBA, которые использовались при выполнении
задания
В ходе работы были использованы элементы управления формы –
«Кнопка». Вы бор этого элемента происходит следующим образом. На
панели разработчика необходимо нажать кнопку «Вставить», после чего
выбрать элемент «Кнопка». Этот элемент размещаем там, где необходимо,
предварительно изменяя его геометрические размеры до необходимых,
также задаем ему имя. (по картинкам передвигаемся строго по
направлению красных стрелок).
8
Рис. 2.2. Выполнение макроса
9
Next i
End Sub
2.3. Макрос, выполняющий расчет по методу Гаусса
Sub Метод_Гаусса()
Dim i, j, k, S, Sum, n, a, b As Double
n = Cells(1, 2) 'Порядок Матрицы
For k = 1 To n - 1 Step 1
For i = 1 To n Step 1 'Форма для записи промежуточных действий
For j = 1 To n + 1 Step 1
Cells(i + n * k + 2, j) = Cells(i + n * (k - 1) + 2, j)
Cells(i + n * k + 2, j).Interior.ColorIndex = 7 + k
Next j 'добавление ячеек, над которыми не производится никаких
действий
Next i
'Прямой ход метода Гаусса
For i = k + 1 To n Step 1
a = Cells(n * (k - 1) + k - 1 + 3, k)
b = Cells(i + 2 + n * (k - 1), k)
For j = k To n + 1 Step 1
Cells(i + n * k + 2, j) = Cells(n * (k - 1) + k + 2, j) * b / -a + Cells(i + 2 + n
* (k - 1), j)
Cells(i + n * k + 2, j).Interior.ColorIndex = 7 + k
Next j
Next i
Next k
'Обратный ход метода
MsgBox "Промежуточные преобразования матрицы вместе со свободными
членами выделены разными цветами!", vbOKOnly
Cells(1, 4).Value = "Решения"
Cells(1, 4).Interior.ColorIndex = 3
Cells(2, 4).Value = "Значения"
Cells(2, 4).Interior.ColorIndex = 3
Cells(1, n + 4).Value = "X_" & n
Cells(1, n + 4).Interior.ColorIndex = 3
Cells(2, n + 4) = Cells(n * n + 2, n + 1) / Cells(n * n + 2, n)
Cells(2, n + 4).Interior.ColorIndex = 3
For k = n - 1 To 1 Step -1
Sum = 0
For j = k + 1 To n Step 1
Sum = Sum + Cells(n * (n - 1) + k + 2, j) * Cells(2, j + 4)
Next j
10
Cells(1, k + 4).Value = "X_" & k
Cells(1, k + 4).Interior.ColorIndex = 3
Cells(2, k + 4) = (Cells(n * (n - 1) + k + 2, n + 1) - Sum) / Cells(n * (n - 1) + k
+ 2, k)
Cells(2, k + 4).Interior.ColorIndex = 3
Next k
End Sub
2.4. Макрос, выполняющий расчет по методу Зейделя
'1) Основная программа
Sub RESHENIE()
Dim C As Integer
C = Cells(1, 2)
ReDim a(C, C) As Single
ReDim b(C, 1) As Single
ReDim X(C) As Single
Call VVOD(1, 3, 1, C, C, a())
Call VVOD(1, 2, C + 1, C, 1, b())
Call PROVERKA(1, C, a())
Call ZEIDEL(1, C, a(), b(), X())
Call VIVOD(1, C, X())
End Sub
'2) Программа ввода данных
Sub VVOD(list As Integer, row As Integer, col As Integer, n As Integer, m As
Integer, M1() As Single)
Dim i As Integer
Dim j As Integer
For i = 1 To n
For j = 1 To m
M1(i, j) = Worksheets(list).Cells(row + i - 1, col + j - 1).Value
Next j
Next i
End Sub
'3) Программа проверки сходимости
Sub PROVERKA(list As Integer, n As Integer, M1() As Single)
Dim i As Integer
Dim j As Integer
Dim d As Integer
Dim sum As Integer
Worksheets(list).Cells(1, n + 3).Value = "Проверка сходимости"
d=0
For i = 1 To n
11
sum = 0
For j = 1 To n
If j <> i Then sum = sum + Abs(M1(i, j))
Next j
If Abs(M1(i, i)) > Abs(sum) Then d = d + 1
Next i
If d = n Then
Worksheets(list).Cells(2, n + 3).Value = "Сходится"
Else
Worksheets(list).Cells(2, n + 3).Value = "Не сходится"
End If
End Sub
'4) Программа решения СЛАУ методом Зейделя
Sub ZEIDEL(list As Integer, n As Integer, M1() As Single, M2() As Single, M3()
As Single)
Dim i As Integer
Dim j As Integer
Dim g As Integer
Dim S As Single
ReDim m(n) As Single
ReDim X(n) As Single
Dim e As Single
Dim f As Single
Dim v As Single
e = 0.001
g=o
‘Подсчет начальных приближений. Подготовка таблицы решения.
For i = 1 To n
X(i) = M2(i, 1) / M1(i, i)
Worksheets(list).Cells(n + 3, 1).Value = "1"
Worksheets(list).Cells(n + 3, 2).Value = Str(g)
Worksheets(list).Cells(n + 4 + i, 1).Value = "X" + Str(i)
Worksheets(list).Cells(2 * n + 5 + i, 1).Value = "раз-ть X" + Str(i)
Worksheets(list).Cells(3 * n + 7, 1).Value = "MAX разность"
Worksheets(list).Cells(n + 4 + i, g + 2).Value = CInt(X(i) * 1000) / 1000
Next i
Do
'Подсчет суммы решения
For i = 1 To n
For j = 1 To n
If i <> j Then S = S + M1(i, j) * X(j)
Next j
12
'Нахождение приближений
v = X(i)
X(i) = (1 / M1(i, i)) * (M2(i, 1) - S)
Worksheets(list).Cells(n + 4 + i, g + 3).Value = CInt(X(i) * 1000) / 1000
S=0
m(i) = Abs(X(i) - v)
Worksheets(list).Cells(2 * n + 5 + i, g + 3).Value = CInt(m(i) * 10000) / 10000
'Выбор наибольшей разности
f = m(1)
j=1
Do
If f < m(j) Then f = m(j)
j=j+1
Loop Until j > n
Worksheets(list).Cells(3 * n + 7, g + 3).Value = CInt(f * 10000) / 10000
Next i
g=g+1
Worksheets(list).Cells(n + 3, g + 2).Value = g
Loop Until f < e
For i = 1 To n
M3(i) = X(i)
Next i
End Sub
'5) Программа вывода корней СЛАУ
Sub VIVOD(list As Integer, n As Integer, M3() As Single)
Dim i As Integer
Dim col As Integer
col = n + 6
Worksheets(list).Cells(1, col).Value = "Корни СЛАУ"
For i = 1 To n
Worksheets(list).Cells(1 + i, col).Value = "X" + Str(i)
Worksheets(list).Cells(1 + i, col + 1).Value = CInt(M3(i) * 1000) / 1000
Next i
End Sub
Содержание отчета
Отчет должен содержать титульный лист, цель работы, методику
расчета систем уравнений методом Гаусса и методом Зейделя, код
макроса, выводы по работе; к отчёту должен быть приложен файл MS
Office Excel с выполненными макросами.
13
Контрольные вопросы
1. Методы расчета систем линейных уравнений.
2. В чем заключается метод Зейделя.
3. Преимущества и недостатки метода Зейделя.
4. В чем заключается метод Гаусса.
5. Преимущества и недостатки метода Гаусса.
14
Библиографический список
15