Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Excel_new.doc
Скачиваний:
97
Добавлен:
22.02.2015
Размер:
5.05 Mб
Скачать

Обращение комплексной матрицы

Наиболее часто используемым алгоритмом обращения матриц является присоединение к ним справа единичной матрицы с последующим преобразованием объединенной матрицы. При этом, если в левой части будет получена единичная матрица, правая часть будет представлять обратную матрицу. В процессе исключения элементов в левой части, как правило, используется исключение Гаусса с выбором главного элемента по столбцу. В качестве примера реализации упомянутого алгоритма предлагается программа обращения матрицы комплексных чисел, на наш взгляд, полезная для инженеров-электриков.

Rem Обращение матрицы

Public Function revcompl (blok)

Dim n As Integer, m As Integer, matr() As String ' Размерность matr() будет переопределена.

Dim r As String, s As String

With blok

n = .Rows.Count 'Определение числа строк и столбцов исходной матрицы

m = .Columns.Count

If (n <> m) Then ' Необходимая проверка

Application.Msbox ("Матрица не квадратная")

Exit Function

End If

ReDim matr(n, 2 * n) ' Выделение памяти и указание размерности матрицы matr()

Rem Расширение исходной матрицы справа единичной

For i = 1 To n

For j = 1 To n

matr(i, j) = .Cells(i, j).Value

If i <> j Then matr(i, n + j) = "0+0j" Else matr(i, n + j) = "1+0j"

Next j

Next i

Rem Прямой ход исключения переменных

For k = 1 To n 'Цикл по шагам исключения переменных

s = matr(k, k): j = k

For i = k + 1 To n 'Выбор главного элемента

r = matr(i, k)

If (Abscompl(r) > Abscompl(s)) Then s = r : j = i

Next i

If s = "0+0i" Then MsgBox ("Решения нет"): Exit Function

If (j <> k) Then 'Замена строк

For i = k To 2 * n

t = matr(k, i) : matr(k, i) = matr(j, i): matr(j, i) = t

Next i

End If

For j = k To 2 * n 'Деление строки на главный элемент

matr(k, j) = Devcompl(matr(k, j), s)

Next j

For i = k + 1 To n 'коррекция строк

For j = k + 1 To 2 * n

matr(i, j) = Subcompl(matr(i, j), Mulcompl(matr(k, j), matr(i, k)))

Next j

Next i

Next k

Rem Обратный ход

For j = n + 1 To 2 * n

For i = n - 1 To 1 Step -1

For k = i + 1 To n

matr(i, j) = Subcompl(matr(i, j), Mulcompl(matr(k, j), matr(i, k)))

Next k

Next i

Next j

Rem Перепись матрицы (для присвоения имени функции)

For i = 1 To n

For j = 1 To n

matr(i - 1, j - 1) = matr(i, j + n)

Next j

Next i

End With

revcompl = matr

End Function

Самостоятельная работа

  • Выполните отладку представленной программы.

  • На основе программыrevcompl () составьте и отладьте программу matmatcmpl() умножения матриц комплексных чисел.

  • Используя разработанные функции комплексных чисел выполните расчет сети переменного тока для схемы, представленной на рис. 4.7.

  • Рис. 4.77 Схема сети

    Выполните расчет схемы при условии, что в узлах заданы мощности S1=20+j10 и S2= -(60+j20).

Рекомендации

Рассмотрим систему нелинейных уравнений узловых напряжений для сети переменного тока в форме баланса токов:

.

Решение может быть найдено минимизацией суммы квадратов модулей невязок токов в узлах (процедура Сервис/Поиск решения). Поскольку варьируются как продольные, так и поперечные составляющие напряжений, их следует выделить в виде смежных столбцов. Вектор-столбец проводимостей на базу Yb рекомендуется располагать рядом с основной матрицей проводимостей, а напряжение базисного узла - под вектором напряжений. Это позволяет выполнять умножение расширенной матрицы проводимости на расширенный вектор напряжений. Не следует забывать, что узловые токи равны сопряженным значениям мощностей, деленным на сопряженные значения напряжений.

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