Vba_расчеты
.pdfПри решении задачи A действия выполняются над числовыми коэффициентами, а имена неизвестных не участвуют в вычислениях. Поэтому при решении задачи в Excel будем хранить только коэффициенты и значения правых частей уравнений, записывая их в расширенную (n*(n+1))-матрицу Ab: A x b с расширенной (n (n 1)) -матрицей Ab
|
2 |
1 |
1 x |
|
|
7 |
|
|
2 |
1 |
1 |
7 |
|
|
|
1 |
|
|
|
Ab Ab1 |
|
|
|
|
|
|
4 |
3 |
0 x2 |
|
10 , |
|
4 |
3 |
0 |
10 |
||
|
2 2 |
|
|
|
|
|
|
2 2 |
3 |
|
||
|
3 x3 |
|
11 |
|
|
11 |
Для изучения в Excel метода Гаусса с выбором главного элемента по столбцу для решения СЛАУ используем следующий алгоритм:
a. На k-ом (k=1,..., n-1) шаге среди строк с k-ой |
|
|
0 |
1 |
0 |
|
|
|
|
||
по n-ую выбирают ту (допустим l-ую), кото- |
P1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
0 |
|
|
|
|
||||
рая в k-ом столбце имеет наибольший по аб- |
|
|
0 |
0 |
1 |
|
|
|
|
|
|
солютной величине элемент – главный эле- |
|
|
|
|
|
|
|
||||
|
|
|
|
4 |
|
3 |
0 |
10 |
|
||
мент. Эту строку (l-ую) матрицы Abk пере- |
|
|
|
|
|
||||||
|
Ab1 |
|
|
|
|
|
|
|
|
||
ставляют с k-ой строкой. Перестановку на k- |
P1 |
|
2 |
|
1 1 |
7 |
|
|
|||
|
|
|
|
2 |
2 |
3 |
11 |
|
|||
ом шаге при изучении метода в Excel удоб- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
но реализовывать умножением Pk Ab матрицы перестановок Pk |
на |
расширенную матрицу Ab. Матрица перестановок – это единичная матрица, в которой единицы с главной диагонали k-го и l-го столбца переставлены соответственно в l-ый и k-ый столбцы.
b. Далее готовится (в Excel) матрица |
Lk , умножая |
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
0 |
0 |
|
|
|
|
||
|
|
|
|
|
|
|
|
||||
которую на расширенную матрицу |
Abk , произ- |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
1 |
0 |
|
|
|
|||
|
|
|
|
|
|
|
|||||
водят исключение неизвестных. При подготовке |
|
|
2 |
0 |
|
|
|
|
|
||
(в Excel) сначала в единичную матрицу E на ме- |
|
|
1 |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
сто элементов k-го столбца, расположенных в |
|
|
|
|
1 |
|
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
строках с k-ой по n-ую, переписывают элементы |
|
L1 |
- 0,5 |
1 |
0 |
|
|
||||
A с тем же расположением. А затем нормируют |
|
|
|
|
0,5 |
|
0 |
|
|
|
|
|
|
|
|
|
1 |
|
|
||||
их – делят все переписанные эле- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
3 |
|
0 |
10 |
|
||
|
|
|
|
|
|
||||||
менты на главный элемент. |
Ab2 L1 P1 Ab1 |
|
|
|
|
|
|
|
|
|
|
c. Затем умножением Lk Abk выпол- |
|
0 |
- 0,5 |
1 |
2 |
|
|
||||
|
|
|
|
0 |
3,5 |
3 |
|
|
|
||
|
|
|
|
|
16 |
|
|||||
няется исключение k-го неизвест- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
ного из строк с (k+1)-ой по n-ую, то есть фактически обнуляются соответствующие элементы расширенной матрицы.
d. После (n-1)-го шага матрица системы A |
|
|
|
|
|
|
|
|
4 |
3 |
0 |
10 |
|||
становится верхней треугольной, то есть |
|
||||||
|
|
|
|
|
|
|
|
имеет нули ниже главной диагонали. Ре- |
Ab3 |
0 |
3,5 |
3 |
16 |
|
|
|
|
0 |
0 |
1,43 |
|
|
|
|
|
|
|||||
шается система уравнений с верхней |
|
|
4,29 |
||||
x3 |
4,29/1,43 |
3 |
|
|
|||
треугольной матрицей просто: из по- |
|
|
|||||
|
(16 3 |
3) / 3,5 2 |
|
|
|||
следнего уравнения находится неизвест- |
x2 |
|
|
||||
ное xn , которое затем подставляется в |
x1 (10 0 3 3 2) / 4 1 |
|
|||||
|
|
|
|
|
|
|
|
предыдущие уравнения. Затем находится |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xn 1, и так далее. То есть осуществляется обратная подстановка метода Гаусса.
Отметим особенности реализации алгоритма
Перестановку строк выполняется умножением матрицы перестановок на матрицу Ab. Матрица перестановок k-ой и l-ой строк – это единичная матрица, у которой в k-ой и l-ой строках единицы с главной диагонали смещены соответственно в l-ой и k-ой столбцы.
Для умножения матриц в Excel имеется функция МУМНОЖ, а вот для автоматического создания единичной матрицы E в выделенной квадратной области следует подготовить специальный макрос (который будем вызывать по нажатию клавиш Ctrl+Shift+E или щелчку по связанной с макросом фигуре – кружку E, см. табл. 1.1). Операцию перестройки единичной матрицы в матрицу перестановок будем выполнять вручную.
Исключение неизвестных на k-ом шаге выполняется умножением матрицы исключений на расширенную матрицу. Матрица исключений получается из единичной после замены на сходственных элементов в k-ом столбце и их нормировании – делении на элемент Abk,k . Эту замену можно выполнять вручную (специальной вставкой), а вот для нормирования полезно разработать специальный макрос (его будем вызывать по нажатию клавиш Ctrl+Shift+L или щелчку по L- кружку).
Обратный ход метода Гаусса можно выполнять вручную, но можно подготовить для этого (и с целью контроля) специальный макрос, ко-
12
торый будет решать СЛАУ с верхней треугольной матрицей (его будем вызывать по нажатию клавиш Ctrl+Shift+x или щелчку по x-кружку).
Макрос, используемый на этапах a и b алгоритма:
Sub E( ) |
' Запускается по Ctrl+Shift+E и создаѐт единичную матрицу E |
|
Dim TR As Range |
' в выделенной прямоугольной области. |
|
Dim n As Integer |
|
|
For Each TR In Selection.Areas |
' Цикл по выделенным областям. |
|
n = Sqr(TR.Count) |
' Определение числа выделенных ячеек. |
|
i1 = TR.Row: j1 = TR.Column |
' Номера начальных строки и столбца. |
|
TR = 0 |
|
' Обнуление диапазона и запись |
For i = 1 To N: Cells(i1 + i - 1, j1 + i - 1) = 1: Next i ' на главную диагональ. |
||
Next |
|
' Конец цикла по выделенным областям |
End Sub |
|
|
|
Макрос, используемый на этапе b алгоритма: |
|
Sub Lk() |
' запускается по Ctrl+Shift+L и нормирует главный столбец |
|
Dim TR As Range: Dim n As Integer |
||
For Each TR In Selection.Areas |
' Цикл по выделенным областям. |
n = TR.Count: i1 = TR.Row: j1 = TR.Column ' опр. числа эл-тов и индексов For i = i1 + 1 To i1 + n - 1
Cells(i, j1) = - Cells(i, j1) / Cells(i1, j1)
Next i Cells(i1, j1) = 1
Next End Sub
Макрос для этапа d алгоритма:
Sub TrSolve( ) |
' запускается по Ctrl+Shift+x и решает СЛАУ |
|
Dim n As Integer |
|
' с верхней треугольной матрицей |
Dim TR As Range |
|
' в выделенной прямоугольной области. |
For Each TR In Selection.Areas |
' Цикл по выделенным областям. |
|
in = TR.Row: jn = TR.Column |
' строка и столбец начала матрицы |
|
n = TR.Rows.Count |
|
' число строк матрицы |
If n + 1 <> TR.Columns.Count Then
13
MsgBox "Выделена не подходящий диапазон", , "TrSolve": Exit Sub
End If
Dim b( ) As Double: ReDim b(n)
For i = 1 To n: b(i) = TR.Cells(i, n + 1): Next 'готовим массив b правых чаcтей
For k = n To 1 Step - 1 |
|
|
Cells(in + n, jn + k - 1) = b(k) / TR.Cells(k, k) |
' вычисление и запись Xk |
|
For i = 1 To n – 1 |
' цикл подстановки в уравнения вычисленного Xk |
b(i) = b(i) - TR.Cells(i, k) * Cells(in + k - 1, jn + n + 1)
Next i Next k
Next End Sub
Описание решения на Excel задачи A
При решении задачи A (на этапе 1 ) расширенную матрицу Ab1 поме-
щаем в диапазон G2:J4 (см. таблицу 1.1). |
|
|
Таблица 1.1 |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A |
|
B |
C |
D |
|
E |
|
|
F |
G |
H |
I |
|
J |
|
|
|
1 |
|
|
|
Матрица перестановок (шаг k=1) |
2 |
|
Расширенная матрица СЛАУ |
|
|
1 |
|
|||||||||
2 |
|
|
|
0 |
1 |
|
0 |
|
|
|
|
2 |
1 |
1 |
|
7 |
|
|||
3 |
|
|
P1= |
1 |
0 |
|
0 |
|
|
|
Ab1= |
4 |
3 |
0 |
|
10 |
|
|||
4 |
|
|
|
0 |
0 |
|
1 |
|
|
|
|
-2 |
2 |
3 |
|
11 |
|
|||
5 |
|
|
|
Матрица исключений (шаг k=1) |
4 |
|
Строки переставлены (шаг k=1) |
|
|
3 |
|
|||||||||
6 |
|
|
|
1 |
0 |
|
0 |
|
|
|
|
4 |
3 |
0 |
|
10 |
|
|||
7 |
|
|
L1= |
-0,5 |
1 |
|
0 |
|
|
|
P1*Ab1= |
2 |
1 |
1 |
|
7 |
|
|||
8 |
|
|
|
0,5 |
0 |
|
1 |
|
|
|
|
-2 |
2 |
3 |
|
11 |
|
|||
9 |
|
|
|
Матрица перестановок (шаг k=2) |
6 |
|
Матрица СЛАУ после шага k=1 |
|
5 |
|
||||||||||
10 |
|
|
|
1 |
0 |
|
0 |
|
|
|
|
4 |
3 |
0 |
|
10 |
|
|||
11 |
|
|
P2= |
0 |
0 |
|
1 |
|
|
|
Ab2=L1*(P1*Ab1)= |
0 |
-0,5 |
1 |
|
2 |
|
|||
12 |
|
|
|
0 |
1 |
|
0 |
|
|
|
|
0 |
3,5 |
3 |
|
16 |
|
|||
13 |
|
|
|
Матрица исключений (шаг k=2) |
8 |
|
|
Строки переставлены шаг k=2 |
|
7 |
|
|||||||||
14 |
|
|
|
1 |
0 |
|
0 |
|
|
|
|
4 |
3 |
0 |
|
|
10 |
|
||
15 |
|
|
L2= |
0 |
1 |
|
0 |
|
|
|
P2*Ab2= |
0 |
3,5 |
3 |
|
16 |
|
|||
16 |
|
|
|
0 |
0,14286 |
|
1 |
|
|
|
|
0 |
-0,5 |
1 |
|
2 |
|
|||
17 |
|
|
|
|
|
|
|
|
|
|
|
|
Матрица СЛАУ после шага k=2 |
|
9 |
|
||||
18 |
|
|
|
|
|
|
|
|
|
|
|
|
4 |
3 |
0 |
|
10 |
|
||
19 |
|
|
|
|
|
|
|
|
|
|
|
Ab3=L2*(P2*Ab2)= |
0 |
3,5 |
3 |
|
16 |
|
||
20 |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1,4286 |
4,2857 |
|
|||
21 |
10 Решение СЛАУ с верхней треугольной матрицей x1,x2, x3= |
1 |
2 |
3 |
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В 1-ом столбце Ab1 главный элемент равен 4, он находится во 2-ой строке. В соответствии с этим, (на этапе 2 ) слева в ячейках B2:D4 на-
14
биваем (или переделываем из единичной) матрицу перестановок P1, которая будет задавать перестановки 1-ой и 2-ой строк. Под матрицей Ab1 (в диапазоне G6:J8) разместим (на этапе 3 ) матрицу, которая получится как результат умножения P1 на Ab1.
Напомним, как выполняется в Excel умножение матриц. Для этого: выделяем G6:J8, нажимаем F2, в ячейку G6 вставляем как формулу функцию МУМНОЖ. Вызвав эту функцию, указываем сначала диапазон B2:D4 первой матрицы, а затем – второй G2:J4. Для записи матрицы результата в диапазон, начинающийся в ячейке G6, следует нажать
Ctrl+Shift+Enter.
После получения матрицы P1*Ab1 с переставленными 2-ой и 1-ой строками готовим (на этапе 4 ) слева матрицу L1 для исключения неиз-
вестных из строк со 2-ой по 3-ью (c k+1 по n) первого столбца. Для этого выделяем диапазон B6:D8 (строк c k по n) и запускаем макрос E создания единичной матрицы (по Ctrl+Shift+E или кликнув по кружку E - фигуры, с которой мы связали этот макрос). Затем выделяем в матрице P1*Ab1 1-ый столбец (G6:G8) с главным элементом. Копируем значе-
ния из G6:G8 и, выделив B6:B8, помещаем специальной вставкой (зна-
чения) в столбец единичной матрицы. Не сбрасывая выделение B6:B8, запускаем (по Ctrl+Shift+L или кликнув по L-кружку фигуры) макрос Lk нормирования этого вектора. В результате получим показанную в таблице 1.1 (для этапа 4 ) матрицу L1. После умножения (на этапе 5 ) этой
матрицы на расширенную матрицу P1*Ab1 (диапазон G6:J8) заносим в G10:J12 матрицу произведения Ab2=L1*(P1*Ab1) с исключенным неиз-
вестным x1 из G11:G12.
Аналогичным образом действуем дальше (на этапах 6 , 7 , 8 , 9 ) до получения матрицы Ab3 (G18:J20), у которой все элементы под главной диагональю (левой (3х3)-подматрицы Ab3) равны нулю. Расширенная матрица Ab3 соответствует СЛАУ с верхней треугольной матрицей; она просто решается последовательным вычислением x1, x2 , x3 - обратной подстановкой. Еѐ алгоритм реализован в макросе TrSolve, который запускается по Ctrl+Shift+x (или кликнув по соответствующему x-кружку фигуры) при предварительно выделенной расширенной матрице
(G18:J20) и выводит (на этапе 10 ) вычисленные неизвестные x1, x2 , x3
15
системы в ячейки G21:I21 под соответствующими столбцами верхней треугольной матрицы Ab3.
1.3. Применение в Excel процедуры метода Гаусса
Задача В. Используя обращение к стандартной процедуре решения СЛАУ методом Гаусса, составить в Excel «функцию, определѐнную пользователем» для решения СЛАУ.
Замечание. В Excel есть функция МОБР для обращения матриц, с помощью которой решают СЛАУ, по схеме:
|
|
|
|
|
Ax b |
|
|
x A 1b |
|
|
|
|
|
|
|
|
|
|||||
Например, матрица A (см. рис. 1.1) записана в ячейки диапазона A1:C3, |
||||||||||||||||||||||
а для |
моделиро- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
|
E |
|
||||
вания |
реальных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
1 |
|
100000 |
|
200000 |
|
300000 |
|
700000 |
|
733184 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
вычислений |
по- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
2 |
|
400000 |
|
500000 |
|
600000 |
|
1000000 |
|
1044480 |
|
||||||||||
следний |
еѐ |
ко- |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
3 |
|
700000 |
|
800000 |
|
900000 |
|
1100000 |
|
1155072 |
|
||||||||||
эффициент |
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
4 |
|
|
-4,908E+13 |
|
9,817E+13 |
|
-4,908E+13 |
|
3,534E+15 |
|
|
|
||||||||
900000 |
в |
ячейке |
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
С3 задан с отно- |
Рис. 1.1. |
|
сительной погрешностью 5×10-15 представления чисел в машине. Определитель матрицы A, вычисленный с помощью функции МОПРЕД, ра-
вен -122,236. Вычисленные через обратную матрицу A 1 и столбец b правых частей (D1:D3) неизвестные x1, x2, x3, помещены в ячейки A4:C4 под соответствующие столбцы матрицы A.
Встречаются руководства, в которых для «проверки» полученные неизвестные умножают на матрицу A, ожидая получить вектор b. В нашем случае после умножения этот вектор (он записан в ячейках E1:E3) с инженерной погрешностью (до 4%) совпадает с исходным. Но оказывается, мы «решили» систему, которая не имеет решения – решили «без проблем» и не почувствовали этого. То есть процедура МОПР не выявляет особенных матриц и спокойно вычисляет обратные матрицы и в случаях, когда этих матриц не существует. Такие случаи возможны, когда СЛАУ составлена не верно, и какие-либо еѐ уравнения является линейной комбинацией других уравнений системы.
16
Кроме того методически не правильно применять для решения СЛАУ более трудоѐмкую процедуру обращения матриц (вычисление A 1 из
AA 1 E равносильно решению стольких СЛАУ, сколько имеется неизвестных). Поэтому целесообразно пополнить арсенал функций Excel процедурой эффективного решения СЛАУ с оценкой близости системы к вырожденной – с оценкой числа обусловленности.
Решение задачи В. Рассмотренный алгоритм решения СЛАУ методом Гаусса удобно записать на Фортране – языке, хорошо подходящем для записи алгоритма. Упрощѐнный (без оценки числа обусловленности), но более наглядный, вариант процедуры представлен ниже:
Subroutine KGAUSS(Ab, N, X, IAI)
Real(8) Ab(N,N+1), X(N) |
! Описание массивов |
||
IAI=1 |
|
|
|
Do k=1, N |
! |
<==> For k=1 To N ! Перебор строк - шаги прямого хода |
|
Call CMEHA |
|
! Выбор и анализ гл. элемента |
|
If( IAI == 0 ) Return ! <==> Exit Sub ! Выход, если гл. элемент = 0 |
|||
Do i=k+1, N |
|
! Перебор строк с k+1-ой по N-ую |
|
Ab(i,k) = Ab(i,k)/Ab(k,k) |
|
||
Ab(i,k+1:N+1) = Ab(i,k+1:N+1) - Ab(i,k)*Ab(k,k+1:N+1) |
|||
End Do |
|
|
|
End Do |
! |
<==> Next k |
|
Do k = N, 1,-1 |
|
! Обратная подстановка (обратный ход) |
X(k)=Ab(k,N+1)/Ab(k,k)
Ab(1:N-1,N+1) = Ab(1:N-1,N+1) - Ab(1:N-1,k)*X(k)
End Do
Contains ! ------- Внутренние подпрограммы: ----------------------------------------
Subroutine CMEHA ! Процедура выбора гл. элемента и перестановки строк
Real(8) W(N+1) ; Integer L(1) |
! Описание массивов |
L=MaxLoc(abs(Ab(K:N,K))) |
! Опр. номера строки с гл. элементом |
W=Ab(K,:); Ab(K,:)=Ab(L(1)+K-1,:); Ab(L(1)+K-1,:)=W ! Перестановки |
|
If(abs(Ab(K,K) )== 0D0) IAI=0 ! |
IAI - признак вырожденности системы |
End Subroutine End
Замечание. В Фортране примечания записываются справа от знака «!». Цикл Do – End Do Фортрана соответствует циклу For – Next Бейсика. Запись A(i, j1:j2) указывает на элементы с j1-го по j2-ой в i-ой строке, а запись A(i, : ) - на все элементы i-ой строки матрицы A.
17
Дополнив процедуру KGAUSS оценкой числа обусловленности, оттранслировав и включив дополненную процедуру KFGAUSS (Карл Фридрих Гаусс) в библиотеку (названную нами Math32.dll) динамического вызова, получим возможность обращаться к ней из VBA. Однако при этом следует учесть ряд особенностей. Во-первых, необходимо в VBA декларировать подключаемую процедуру, записав:
Declare Sub KFGAUSS Lib "С:\Путь\Math32.dll" (ByRef Ab As Double, _
ByVal N As Long, ByRef X As Double, ByRef CD As Double)
Во-вторых, следует учесть, что в процедуру надо передавать адрес начала массивов, а не весь массив, включая границы индексов, как это делается в Бейсике. То есть обращение из VBA к процедуре KFGAUSS может иметь вид:
Call KFGAUSS(AiB(1, 1), N, X(1), CD)
Отметим ещѐ одну особенность реализации процедуры KFGAUSS, позволяющую вычислять определитель левой квадратной (N×N)-части расширенной матрицы AiB. Этот определитель вычисляется как произведение диагональных элементов матрицы, а знак произведения, который зависит от чѐтного или нечѐтного числа выполненных перестановок, кодируется знаком переменной CD, то есть определитель
det(A)= Aib(1,1)×…×AiB(N,N)×знак(CD).
Число обусловленности матрицы системы положительное и равно абсолютной величине |CD|. Если |CD| порядка десятков (не больше 1000), то система достаточно хорошо обусловлена, и точность еѐ решения высокая. Большая величина |CD|, скажем, 1012, говорит о близости системы к вырожденной, |CD|=1E32 указывает на точную вырожденность системы. Отметим, что для представленной на рис. 1.1 СЛАУ число обусловленности равно 3,534×1015. Оно получено в ячейке D4 с помощью разбираемой ниже функции пользователя для решения СЛАУ и указывает на близость рассмотренной системы к вырожденной.
С учѐтом сделанных замечаний в Excel функция, определённая пользователем, для решения СЛАУ и выдачи числа обусловленности матрицы системы, может иметь следующий вид:
18
Public Function xCdGauss(Ab As Range) As Variant
Dim N As Long, CD As Double
N = Ab.Rows.Count
ReDim AiB(1 To N, 1 To N + 1) As Double
ReDim X(1 To N + 1) As Double
For i = 1 To N
For j = 1 To N + 1
AiB(i, j) = Ab(i, j)
Next j
Next i
Call KFGAUSS(AiB(1, 1), N, X(1), CD) |
|
|
|
|
|
|
|
|
Рис. 1.2. |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
X(N + 1) = Abs(CD) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
|
||
xCdGauss = X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
1 |
|
2 |
1 |
1 |
7 |
|
||||||||||
|
|
|
|
|
|
|
|||||||||||||
End Function |
|
|
|
2 |
|
4 |
3 |
0 |
10 |
|
|||||||||
Функция |
используется |
следующим |
|
|
3 |
|
-2 |
2 |
3 |
11 |
|
||||||||
|
|
4 |
|
|
1 |
|
|
2 |
|
|
3 |
|
|
13,52941 |
|
|
|||
образом. Для решения СЛАУ с рас- |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
Рис. 1.3. |
|
|
|
|
|||||||
ширенной |
матрицей A1:D3 коэффи- |
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
циентов, например, показанной на рис. 1.3, выделяется горизонтальный диапазон, например, A4:D4 из N+1 ячеек (N=3 – число уравнений). Затем нажимают клавишу F2 и выбирают в ленте: Формулы, Вставить функцию, Категория - Определѐнные пользователем, xCdGauss, OK. В
возникшем окне Аргументы функции (см. рис. 1.2) указывают для аргумента Ab диапазон A1:D3 ячеек с коэффициентами расширенной матрицы СЛАУ, а затем нажимают Ctrl+Shift+Enter. В ячейках A4:C4 появятся вычисленные значения неизвестных СЛАУ, а в ячейке D4 число обусловленности матрицы системы.
Подготовка на листе матриц с вычисляемыми коэффициентами
Часто в математических расчѐтах встречаются СЛАУ, коэффициенты которых могут быть вычислены по сравнительно простым формулам. Как правило, эти СЛАУ имеют большое число уравнений. При необходимости размещения коэффициентов таких систем в ячейках листа Excel целесообразно подготовить формулу, задающую коэффициенты,
19
и использовать вместе с ней заранее составленную (стандартную) процедуру, заполняющую числами ячейки прямоугольного диапазона.
Идею организации подобного заполнения рассмотрим на следующем простом примере
Пример 1.9. Подготовить в выделяемом квадратном диапазоне единичную матрицу E.
Решение примера начнѐм с присвоения имѐн i, j, f соответственно ячейкам I1, J1, F1 рабочего листа. Переменными i и j будем обозначать соответственно строки и столбцы выделенного диапазона, а в ячейку с именем f запишем формулу =ЕСЛИ(i=j; 1; 0) . В процедуре, заполняющей выделяемый диапазон, будем ссылаться на поименованные ячейки:
Sub PutKoeff()
Dim R As Range
Set R = Application.InputBox(prompt:="Укажите матрицу", Type:=8)
i1 = R.Row: j1 = R.Column |
|
For i = 0 To R.Rows.Count - 1 |
|
For j = 0 To R.Columns.Count - 1 |
|
Range("i") = i + 1 |
' запись в ячейку i номера строки |
Range("j") = j + 1 |
' запись в ячейку j номера столбца |
Cells(i1 + i, j1 + j) = Range("f") |
' перезапись в ячейку диапазона значения из f |
Next j |
|
Next i |
|
End Sub |
|
Свяжем запуск данного макроса с фигурой (как это упомянуто вскользь в разделе «Описание решения на Excel задачи A»). Для этого вставим на лист (или, как это было сделано ранее, на рисунок SmartArt) какую-либо фигуру, вызвав нажатием правой клавишей мыши контекстное меню, назначим макрос данному объекту. После этого макрос запускается щелчком по фигуре, мы выделяем квадратный диапазон ячеек, в котором затем формируется единичная матрица.
В следующем примере разбирается более сложный случай.
20