Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по VBA.doc
Скачиваний:
108
Добавлен:
26.08.2019
Размер:
1.04 Mб
Скачать
  1. Разработка приложения “Решение системы линейных уравнений”

  1. Взять за основу модуль, созданный в лабораторной работе 3. Модуль должен содержать следующие общие процедуры:

MNTab - определение M, N - размерности матрицы,

TabCXCY - копирование идентификаторов столбцов и строк в массивы CX, CY,

TabA - копирование матрицы с листа Excel в массив A,

XAI (I) - вычисление скалярного произведения вектора x на вектор aI (функция) с записью результата в I-ю ячейку первого столбца на листе Excel,

Jordan - шаг жорданова исключения (процедура поясняется ниже) – преобразование всей матрицы A с записью новых значений ее элементов в таблицу на листе Excel, обращение к процедуре TabA, перемена местами элементов CX и CY с записью значений и в ячейки Excel, копирование матрицы с листа Excel в массив A.

  1. Разместить на листе Excel командную кнопку BTN1 с надписью (свойство Caption) Решение системы уравнений.

  2. В событийную процедуру BTN1_Click включить:

  • определение M, N, вывод сообщения и завершение работы, если M не равно N;

  • переопределение размерности массивов CX, CY, A и копирование в них содержимого соответствующих ячеек листа Excel;

  • выполнение шага жорданова исключения N раз (r – номер диагонального элемента матрицы, называемого разрешающим; с ним выполняется шаг жорданова исключения); перед обращением к процедуре Jordan надо проверять, не равен ли нулю элемент матрицы A(r,r) – этот фрагмент программы можно записать так

For r = 1 To N

If Abs(A(r, r)) < 0.00000001 Then

MsgBox "Матрица содержит линейно зависимые строки (столбцы)": Exit Sub

End If

Jordan r

Next r

(проверка на нуль в программах выполняется с учетом точности вычислений);

  • вычисление каждого значения Xi (i=1,…,N) путем умножения вектора y на вектор Ai с использованием функции XAI; заметим, что после того, как были выполнены N шагов жордановых исключений, на месте матрицы A находится обратная матрица A-1, а массивы CX и CY поменялись своим содержимым – в массиве CX теперь хранятся известные значения Yj (j=1,…,N), а в массиве CY (и в первом столбце на листе Excel) – идентификаторы X1,…,XN. Эти идентификаторы и надо заменить вычисленными значениями Xi (i=1,…,N).

Поясним алгоритм шага жорданова исключения. В разделе 4 упоминалось, что матрицу A (см. рис. 2) можно рассматривать как таблицу коэффициентов, позволяющих связать любой Yi уравнением со значениями X1 ,…, XN : Yi = x ∙ Ai. Глядя на эту таблицу, над столбиками представим себе значения Xj (вектор-строку x), а левее строк – значения Yi (вектор-столбец y). Один шаг жорданова исключения с разрешающим элементом Arr приводит к тому, что Xr и Yr меняются местами, а вся матрица A изменяется так:

  • разрешающий элемент A(r,r)=1/A(r,r) ,

  • элементы разрешающего столбца A(i,r)=A(i,r)/A(r,r) , i=1 ,…, N ,

  • элементы разрешающей строки A(r,j)= - A(r,j)/A(r,r), j=1 ,…, N ,

  • прочие элементы A(i,j) = ( A(i,j) ∙ A(r,r) – A(i,r) ∙ A(r,j) ) / A(r,r) .

После того, как будут выполнены N шагов жордановых исключений, вектор y окажется наверху (над матрицей), а вектор x – слева от матрицы. Сама матрица к этому моменту будет обращена – теперь она содержит коэффициенты, позволяющие вычислять значения Xi , если известны значения Yj : X(i)= y ∙ Ai.

Приложение надо отладить на примерах. Подготовить примеры совсем не трудно. Представим себе, что N=3, а значения элементов вектора x известны, например: x={1,2,3}.

Теперь, задавшись матрицей A, например, A={11,13,13; 21,22,24; 30,32,33}, получим y={76, 137, 193}. Неизвестными будем считать значения X1=1, X2=2, X3=3. Их и найдем.

Литература к курсовой работе 1. Зуховицкий С.И., Авдеева Л.И. Линейное и выпуклое программирование. М: Наука, 1967. –460 с.