Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
769
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Приложение В. Надстройка для работы с Excel

toolbox\exlink). Указанный файл следует выбрать и подтвердить свой выбор. Как следствие, в списке надстроек в окне Надстройки (см. рис. В.3) появится опция с именем надстройки Spreadsheet Link EX.

Рис. В.2. В окне Параметры Excel в разделе Надстройки необходимо щелкнуть кнопку Перейти

Рис. В.3. Для подключения надстройки Spreadsheet Link EX необходимо установить флажок соответствующей опции

431

Самоучитель Matlab

После того, как надстройка Spreadsheet Link EX подключена, на вкладке Главная ленты приложения Excel появляется группа из одной пиктограммы с фирменным Matlab-овским изображением (рис. В.4).

Рис. В.4. Пиктограмма надстройки Spreadsheet Link EX на вкладке Главная

Данная группа представляет собой раскрывающийся список с командами, посредством которых выполняются некоторые настройки и базовые действия по взаимодействию приложений Matlab и Excel. Для выполнения ряда важных настроек используем команду Preferences из раскрывающегося списка команд (рис. В.4). Открывается окно настроек Matlab Preferences (рис. В.5).

Рис. В.5. Окно настроек надстройки Spreadsheet Link EX

Окно содержит ряд опций и текстовое поле. По умолчанию опция Start Matlab at Excel startup активна, и это означает, что при запуске Excel автоматически будет активироваться (запускаться) и Matlab (в режиме командного окна). Полезность такого режима во многих случаях сомни-

432

Приложение В. Надстройка для работы с Excel

тельна, если только не предполагается использовать Excel исключительно для совместной работы с Matlab. Кроме того, использование режима автоматического запуска Matlab при запуске Excel увеличивает время загрузки приложения. Поэтому нередко от данного режима отказываются – в этом случае необходимо отменить флажок опции Start Matlab at Excel startup.

Если установить флажок опции Use MATLAB desktop, то при запуске Excel приложение Matlab будет запускаться не в режиме командного окна, а в обычном рабочем режиме (главное окно приложения и вспомогательные окна). Наличие флажка этой опции не означает автоматический запуск приложения Matlab при запуске Excel.

Установленный флажок опции Show MATLAB errors означает переход в режим, при котором в рабочем документе Excel, в случае возникновения соответствующей ситуации, будут отображаться сообщения об ошибках вычислительной системы Matlab. Альтернативный режим подразумевает, что в рабочем документе Excel отображаются только сообщения об ошибках вычислительной системы Excel.

Если установить флажок опции Force use of MATLAB cell arrays with MLPutMatrix, перейдем в режим, при котором экспорт данных из рабочего листа Excel в документ Matlab с помощью функции MLPutMatrix() выполняется в виде массива ячеек.

На заметку

Как мы увидим из дальнейшего, для экспорта данных из диапазонов ячеек таблицы Excel в массив в документе Matlab используется функция MLPutMatrix().

Опция Treat missing/empty cells as NaN позволяет контролировать способ обработки пустых ячеек при экспорте из Excel в Matlab. Если флажок опции не установлен, пустые ячейки обрабатываются как такие, что содержат нулевые значения. Если флажок опции установлен, то такие ячейки обрабатываются как имеющие нечисловое значение (значение NaN).

Что касается текстового поля в окне настроек Matlab Preferences, то в этом поле отображается рабочий каталог для приложения Matlab (содержимое каталога отображается в окне Current Folder после загрузки приложения Matlab).

Для начала работы с надстройкой Spreadsheet Link EX необходимо, вопервых, запустить приложение Excel и, во-вторых, загрузить Matlab (загрузить из Excel – это важно!). Если Matlab автоматически не загружается при запуске Excel, необходимо воспользоваться командой Start MATLAB, как показано на рис. В.6.

433

Самоучитель Matlab

Рис. В.6. В случае необходимости выполняем команду Start MATLAB

После того, как все формальности выполнены, можно приступить непосредственно к работе. По большому счету вся "работа" сводится к следующим этапам (в разной последовательности и в разном объеме):

Экспорт данных из рабочего пространства Excel в рабочее пространство Matlab.

Выполнение вычислений и обработка данных в среде Matlab через команды рабочей среды Excel.

Импорт данных из рабочего пространства Matlab в рабочий документ Excel.

При этом непосредственно вычисления в рабочем документе Excel мы особо не выделяем, поскольку в том нет ничего необычного (во всяком случае, для пользователей, знакомых с Excel). Рассмотрим небольшой пример. В нем реализованы все три этапа. А именно, в документе Excel вводятся элементы некоторой матрицы. Эта матрица экспортируется в Matlab, там для матрицы вычисляется обратная, и эта обратная матрица импортируется в Excel.

На заметку

Сразу отметим, что такая задача может быть решена исключительно средствами Excel без привлечения Matlab. Но здесь именно тот случай, когда важен не результат, а метод его получения.

Рабочий документ Excel, в котором выполняются соответствующие вычисления, представлен на рис. В.7.

Значения элементов исходной матрицы записаны в ячейки диапазона E2:G4. Для сравнения в ячейках E7:G9 с помощью встроенной функции Excel МОБР() вычисляется обратная матрица.

434

Приложение В. Надстройка для работы с Excel

Рис. В.7. Документ Excel с вычислениями

На заметку

Для вычисления обратной матрицы выделяем диапазон ячеек E7:G9 и вводим формулу массива =МОБР(E2:G4) (формула вводится нажатием комбинации клавиш <Ctrl>+<Shift>+<Enter>).

Но главные события происходят не здесь. Все, что нас интересует в первую очередь, связано с ячейками C2:C4. Если все вычисления выполнены корректно, в этих ячейках должны быть нули. В ячейку C2 вводится формула =MLPutMatrix("A";E2:G4). Эта команда означает, что содержимое диапазона ячеек E2:G4 экспортируется в Matlab и присваивается в качестве значения переменной A. Первым аргументом функции надстройки MLPutMatrix() указывается (в двойных кавычках) имя переменной в рабочей среде Matlab, которой присваивается, в качестве значения, содержимое диапазона, который указывается вторым аргументом функции MLPutMatrix(). В результате выполнения этой команды в рабочем пространстве Matlab создается переменная A и ей присваивается соответствующее значение (этот факт мы еще проверим).

На заметку

В русифицированной версии Excel аргументы функций разделяются точкой с запятой. В оригинальной версии приложения аргументы функций разделяются запятыми.

435

Самоучитель Matlab

В ячейку C3 вводится и выполняется формула =MLEvalString("B= inv(A)"). Функция MLEvalString() позволяет выполнять команды среды Matlab. Команды (в двойных кавычках) указываются аргументом функции MLEvalString(). Если команд несколько, они разделяются точкой с запятой. В данном случае команда одна: B=inv(A). Именно такую команду нам надо было бы выполнить в командном окне Matlab, если бы мы работали непосредственно с приложением Matlab. Результат команды такой: в переменную B записывается результат выражения inv(A), то есть обратная матрица к той, что записана в переменную A. После того, как обратная матрица вычислена, содержимое переменной B из рабочего пространства Matlab необходимо импортировать в рабочий документ Excel. Для этого в ячейку C4 и вводится формула =MLGetMatrix("B";"E12"). Функцией MLGetMatrix() элементы матрицы (первый аргумент функции) рабочего пространства Matlab копируются в ячейки диапазона, указанного вторым аргументом функции. Оба аргумента заключаются в двойные кавычки. Если вторым аргументом указана одна ячейка, то она определяет верхнюю левую ячейку заполняемого в Excel диапазона. В данном случае диапазон ячеек E12:G14 будет заполнен элементами матрицы, обратной к исходной (диапазон ячеек E2:G4).

На заметку

В ячейки диапазона E12:G14 копируются числовые значения, а не формулы. Это обстоятельство достаточно важно для понимания принципов использования надстройки Spreadsheet Link EX.

Теперь проверим, что произошло в рабочем пространстве Matlab. Для этого в командном окне проверяем значения переменных A и B, как показано на рис. В.8.

Видим, что и переменная A, и переменная B содержат корректные значения. Причем стоит обратить внимание, что непосредственно в рабочем документе Matlab мы эти переменные не объявляли.

На заметку

Вышемыиспользовалитривстроенныефункциинадстройки:MLPutMatrix(), MLEvalString() и MLGetMatrix(). При успешном выполнении функции возвращают в качестве значения 0. Это характерная ситуация для функций надстройки Spreadsheet Link EX. Здесь проявляется принципиальное отличие функций надстройки от встроенных функций Excel. Встроенные функции Excel возвращают результат, а функции надстройки выполняют действия.

Несмотря на кажущуюся эффективность описанного выше подхода, есть одна маленькая проблема, которая может стать достаточно большой. Связана она с автоматическим пересчетом содержимого документа Excel (с формулами на основе функций надстройки Spreadsheet Link EX) при изменении данных в ячейках документа. Проиллюстрируем это на примере с ранее

436

Приложение В. Надстройка для работы с Excel

созданным документом. Для этого меняем, например, значение в ячейке E4 с 0 на 1, как показано на рис. В.9.

Рис. В.8. Проверка значений переменных в командном окне Matlab

Рис. В.9. Изменение содержимого ячейки E4 не приводит к пересчету результата

в ячейках E12:G14

437

Самоучитель Matlab

Если результат в ячейках E7:G9, вычисленный на основе встроенной функции МОБР(), автоматически пересчитан, то ячейки диапазона E12:G14 остались неизменными. При этом если проверить содержимое переменных A и B, то значение переменной A изменилось, а значение переменной B – нет (рис. В.10).

Рис. В.10. Проверка значений переменных A и B

Дело в том, что в Excel при изменении ячеек пересчитываются те ячейки, которые содержат зависимые ячейки (то есть ячейки, которые содержат формулы со ссылкой на изменяемые ячейки). Поэтому если изменить ячейку в диапазоне E2:G4, то значение в ячейке C2 пересчитывается, поскольку формула в ячейке содержит ссылку на диапазон E2:G4. В результате переменная A в рабочем пространстве Matlab получает новое значение. А значение в ячейке C3 не пересчитывается, поскольку формула в этой ячейке не содержит ссылок ни на ячейку C2, ни на ячейки диапазона E2:G4.

Проблему можно решать по-разному. Общая идея состоит в том, чтобы изменить формулы в ячейках C2 и C3 так, чтобы они изменялись при изменении ячеек в диапазоне E2:G4. Не мудрствуя лукаво, вводим в ячейку C3

формулу =MLEvalString("B=inv(A)")+СУММ(E2:G4), а в ячейку C4

вводим формулу =MLGetMatrix("B";"E12")+C3. В первом случае не особенно важно, какая использована "дополнительная" функция – главное, чтобы она содержала весь диапазон ячеек E2:G4 и чтобы значение этой "дополнительной" функции менялось при изменении значения хотя бы одной ячейки. В рассматриваемом случае функция СУММ() вполне подходит. В результате при успешном вычислении формулы =MLEvalString

438

Приложение В. Надстройка для работы с Excel

("B=inv(A)")+СУММ(E2:G4) в ячейке C3 отображается сумма ячеек диапазона E2:G4. Сам по себе этот факт маловажен. Намного важнее то, что формула содержит ссылку на диапазон ячеек E2:G4. Это означает, что при изменении ячеек диапазона E2:G4 будет пересчитываться и значение

вячейке C3, чего мы, собственно, и добивались. Более того, изменение ячейки диапазона E2:G4 приводит к изменению значения ячейки C3. Ссылка на эту ячейку содержится в формуле =MLGetMatrix("B";"E12")+C3

вячейке C4. Поэтому пересчитывается значение и в этой ячейке. На рис. В.11 показан документ Excel с внесенными в него изменениями.

Рис. В.11. В формулы в ячейках C3 и C4 внесены изменения

ДляконтролярезультатавячейкуE4вместоисходногозначения0вводимзначение 1. В результате выполняется пересчет документа, как показано на рис. В.12.

Рис. В.12. После изменения ячейки в диапазоне E2:G4 корректно вычисляются значения

ячеек диапазона E12:G14

439

Самоучитель Matlab

Видим, что обратная матрица, вычисленная путем использования средств Matlab, совпадает с обратной матрицей, вычисленной средствами Excel.

Разумеется, что в общем случае приложение Matlab используется совместно с приложением Excel для решения более сложных задач – как правило, таких, которые не могут быть решены (или которые сложно решать), используя только утилиты Excel.

440