Для порядка скомпилированного MATLAB® функционирует из Microsoft® Excel® электронная таблица, выполните следующие действия с машин разработки и развертывания, как указано.
Примечание
Для порядка функции с помощью синтаксиса функции Microsoft Excel (=myfunction(input)
), функция MATLAB должна вернуть один скалярный выходной аргумент.
Выполните следующие шаги на машине разработки:
Создайте следующие функции MATLAB в трех отдельных файлах с именем doubleit.m
, incrementit.m
, и powerit.m
, соответственно:
function output = doubleit(input) output = input * 2;
function output = incrementit(input1, input2) output = input1 + input2;
function output = powerit(input1, input2) output = power(input1, input2);
Запустите Library Compiler.
Используйте следующую информацию во время работы с этим примером, используя инструкции в разделе Создание надстройки Excel из MATLAB:
Имя приложения | myexcelfunctions |
Имя класса | myexcelfunctionsclass |
Экспортированные функции |
|
Выполните следующие шаги на машине развертывания:
Скопируйте содержимое for_redistribution_files_only
на машину (машины) развертывания. Скопируйте файл в стандартное место для использования с Microsoft Excel, например
где Office_Installation_folder
\ Библиотека\MATLABOffice_Installation_folder
является папкой, такой как C:\Program Files\Microsoft Office\OFFICE11
.
Регистрация myexcelfunctions_1_0.dll
.
Внимание
Вам нужно перерегистрировать файл DLL, если вы перемещаете его после создания. В отличие от файлов DLL, файлы Excel могут быть перемещены куда угодно в любое время.
Запуск Microsoft Excel. Электронная таблица Book1
должен быть открыт по умолчанию.
В Excel выберите Tools > Visual Basic Editor. Microsoft Visual Basic® Запускается редактор.
В редакторе Microsoft Visual Basic выберите File > Import File.
Поиск myexcelfunctions.bas
и нажмите Open. В Project Explorer Module1 появляется под узлом Modules под VBAProject (Book1).
В редакторе Microsoft Visual Basic выберите View > Microsoft Excel. Теперь можно использовать doubleit
, incrementit
, и powerit
функционирует в Book1 электронной таблице.
Протестируйте функции, выполнив следующее:
Введите =doubleit(2.5)
в камеру A1.
Введите =incrementit(11,17)
в камеру A2.
Введите =powerit(7,2)
в камеру A3.
Вы должны увидеть значения 5, 28 и 49 в камерах A1, A2 и A3 соответственно.
Как использовать doubleit
, powerit
, и incrementit
во всех новых электронных таблицах Microsoft Excel выполните следующие действия:
Выберите File > Save As.
Измените опцию Save as type на .xlt (Template).
Перейдите к
папка.Office_Installation_folder
\ XLSTART
Сохраните файл следующим
.Office_Installation_folder
\ XLSTART\Book.xlt
Примечание
Чтобы сохранить этот шаблон, необходимо установить уровень безопасности макросов Microsoft Excel на Medium или Low.
Для получения дополнительной информации о доступе к коду примера из продукта, смотрите Пример копирования файла.
Эта функция обеспечивает легкий интерфейс для легкого доступа к данным MATLAB Runtime. Это позволяет совместно использовать данные между образцом MATLAB Runtime, кодом MATLAB, выполняемым на этом MATLAB Runtime, и кодом оболочки, который создал MATLAB Runtime. Посредством вызовов интерфейса MATLAB Runtime User Data API, вы получаете доступ к данным MATLAB Runtime путем создания ассоциативного массива образца по MATLAB Runtime mxArray
s, состоящий из отображения из строковых ключей в mxArray
значения. Причины для этого включают, но не ограничиваются:
Необходимо предоставить информацию профиля во время выполнения клиенту, выполняющему приложение, созданное с помощью Parallel Computing Toolbox™. Информация о профиле может быть предоставлена (и изменена) на базис выполнения. Например, два образцов одного и того же приложения могут запускаться одновременно с различными профилями.
Вы хотите инициализировать MATLAB Runtime с постоянными значениями, которые могут быть доступны всем вашим приложениям MATLAB.
Вы хотите настроить глобальную рабочую область - глобальную переменную или переменные, к которым могут получить доступ MATLAB и ваш клиент.
Вы хотите сохранить состояние любой переменной или группы переменных.
MATLAB Compiler™ поддерживает доступ к образцу MATLAB Runtime через объектно-ориентированный API. В отличие от MATLAB Compiler, доступ к состоянию образца MATLAB Runtime является необязательным, а не включенным по умолчанию. Вы можете получить доступ к этому состоянию, добавив setmcruserdata.m
и getmcruserdata.m
в проект развертывания или путем указания их в командной строке. Кроме того, вы используете вспомогательную функцию для вызова этих методов, как показано на Сведениях о профиле во время выполнения поставки для приложений Parallel Computing Toolbox.
Для получения дополнительной информации см. Руководство пользователя MATLAB Compiler.
Ниже приведен полный пример использования интерфейса пользовательских данных MATLAB Runtime в качестве механизма определения профиля для приложений Parallel Computing Toolbox.
Примечание
Независимые исполняемые файлы и общие библиотеки, сгенерированные MATLAB Compiler или MATLAB Compiler SDK™ для параллельных приложений, теперь могут запускать до двенадцати локальных работников без MATLAB Parallel Server™.
Шаг 1: Напишите код Parallel Computing Toolbox
Скомпилируйте sample_pct.m
в MATLAB.
Этот пример кода использует кластер, определенный в профиле по умолчанию.
Этот выход принимает, что профиль по умолчанию local
.
function speedup = sample_pct (n) warning off all; tic if(ischar(n)) n=str2double(n); end for ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time1 =toc; parpool; tic parfor ii = 1:n (cov(sin(magic(n)+rand(n,n)))); end time2 =toc; disp(['Normal loop times: ' num2str(time1) ... ',parallel loop time: ' num2str(time2) ]); disp(['parallel speedup: ' num2str(1/(time2/time1)) ... ' times faster than normal']); delete(gcp); disp('done'); speedup = (time1/time2);
Запустите код следующим образом после изменения профиля по умолчанию на local
, при необходимости.
a = sample_pct(200)
Проверьте, что вы получаете следующие результаты:
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers. Normal loop times: 0.7587,parallel loop time: 2.9988 parallel speedup: 0.253 times faster than normal Parallel pool using the 'local' profile is shutting down. done a = 0.2530
Шаг 2: Установите профиль Parallel Computing Toolbox. В порядок скомпилировать код MATLAB в COM- компонента и использовать Parallel Computing Toolbox, mcruserdata
должен быть установлен непосредственно из MATLAB. Для доступа к MCRUserdata
нет доступного API как и для приложений на C и C++, созданных с помощью MATLAB Compiler.
Чтобы задать mcruserdata
из MATLAB создайте init
функция в классе COM. Это отдельная функция MATLAB, которая использует setmcruserdata
чтобы установить профиль Parallel Computing Toolbox один раз. Затем вы вызываете свои другие функции, чтобы использовать функции Parallel Computing Toolbox.
Создайте следующую init
функция:
function init_sample_pct % Set the Parallel Profile: if(isdeployed) [profile] = uigetfile('*.settings'); % let the USER select file setmcruserdata('ParallelProfile',[profile]); end
Шаг 3: Скомпилируйте функцию с помощью Deploytool или командной строки. Можно скомпилировать функцию из командной строки, введя следующее:
mcc -B 'cexcel:exPctComp,exPctClass,1.0' init_sample_pct.m sample_pct.m
Также можно использовать deploytool следующим образом:
Чтобы скомпилировать приложение, выполните следующие действия в разделе Создание надстройки Excel из MATLAB.
Когда компиляция заканчивается, создается новая папка (с тем же именем, что и проект).
Имя проекта | exPctComp |
Имя класса | exPctClass |
Файл для компиляции | sample_pct.m и init_sample_pct.m |
Примечание
Если вы используете функцию GPU Parallel Computing Toolbox, необходимо вручную добавить файлы PTX и CU.
Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.
Если вы используете mcc
команда, используйте -a
опция.
Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only
папка, содержащая следующее, для конечных пользователей.
exPctComp.dll
Модуль VBA (.bas
файл)
MATLAB Runtime
Профиль кластера
Примечание
Конечный компьютер конечного пользователя должен иметь доступ к кластеру.
Шаг 4: Измените сгенерированное приложение драйвера VBA (файл BAS). После регистрации библиотеки COM DLL на компьютере развертывания и импорта файла BAS в Excel измените сгенерированный код файла BAS по мере необходимости.
Dim MCLUtil As Object Dim bModuleInitialized As Boolean Dim exPctClass As Object Private Sub InitModule() If Not bModuleInitialized Then On Error GoTo Handle_Error If MCLUtil Is Nothing Then Set MCLUtil = CreateObject("MWComUtil.MWUtil7.10") End If Call MCLUtil.MWInitApplication(Application) bModuleInitialized = True Exit Sub Handle_Error: bModuleInitialized = False End If End Sub Function init_sample_pct() As Variant On Error GoTo Handle_Error Call InitModule If exPctClass Is Nothing Then Set exPctClass = CreateObject("exPctComp.exPctClass.1_0") End If Call exPctClass.init_sample_pct init_sample_pct = Empty Exit Function Handle_Error: init_sample_pct = "Error in " & Err.Source & ": " & Err.Description End Function Function sample_pct(Optional pelle As Variant) As Variant Dim speedup As Variant On Error GoTo Handle_Error Call InitModule If exPctClass Is Nothing Then Set exPctClass = CreateObject("exPctComp.exPctClass.1_0") End If Call exPctClass.sample_pct(1, speedup, pelle) sample_pct = speedup Exit Function Handle_Error: sample_pct = "Error in " & Err.Source & ": " & Err.Description End Function
Выходные выходы следующие:
развертываемые архивные данные автоматически встраиваются непосредственно в компоненты MATLAB Compiler по умолчанию и извлекаются во временную папку.
Автоматическое встраивание позволяет использовать функции Кэш через переменные окружения.
Эти переменные позволяют вам задать следующее:
Определите расположение по умолчанию, где необходимо автоматически извлечь развертываемый архив
Добавьте опции печати диагностических ошибок, которые могут использоваться при автоматическом извлечении развертываемого файла в целях устранения неполадок
Настройка размера кэша компонента MATLAB Runtime по причинам эффективности.
Для изменения этих настроек используйте следующие переменные окружения.
Переменная окружения | Цель | Примечания |
---|---|---|
MCR_CACHE_ROOT | При установке местоположения, в котором требуется извлечь развертываемый архив, эта переменная переопределяет расположение кэша компонента по умолчанию для каждого пользователя. Это верно для встроенных .ctf только файлы. | В macOS эта переменная игнорируется в MATLAB R2020a и более поздних версиях. Пакет приложений содержит файлы, необходимые для выполнения. |
MCR_CACHE_SIZE | Когда задан, эта переменная переопределяет размер кэша компонента по умолчанию. | Начальный предел для этой переменной составляет 32M (мегабайт). Однако это может быть изменено после того, как вы установите переменную первый раз. Отредактируйте файл .max_size , который находится в файле, обозначенном запуском mcrcachedir Команда, с желаемым пределом размера кэша. |
Можно переопределить это поведение автоматического встраивания и извлечения путем компиляции с -C
опция. Для получения дополнительной информации см. раздел «Переопределение поведения по умолчанию».
Примечание
Если бежать mcc
указывая конфликтующие типы оболочек и целевых элементов, развертываемый архив не будет встроен в сгенерированный компонент. Для примера, если вы запускаете:
mcc -W lib:myLib -T link:exe test.m test.c
test.exe
не будет иметь встроенного в него развертываемого архива, как если бы вы указали -C
опция в командной строке.
Внимание
Не извлекайте файлы из .ctf
Файл и поместите их индивидуально под систему контроля версий. Начиная с .ctf
файл содержит взаимозависимые функции MATLAB и данные, доступ к файлам в нем должен осуществляться только путем доступа к .ctf
файл. Для достижения наилучших результатов разместите все .ctf
файл под системой контроля версий.
Чтобы извлечь развертываемый архив способом до R2008b, вместе с скомпилированным COM- компонента, скомпилируйте с помощью mcc
-c
опция.
Вы также можете реализовать это переопределение, добавив -c
флаг в Settings разделе приложения компилятора.
Можно хотеть использовать эту опцию для устранения проблем с развертываемым архивом, например, поскольку журналы и диагностические сообщения гораздо более видны.
Дополнительные сведения о развертываемом архиве см. в разделе Развертываемый архив.
-logfile
- Создает именованный файл журнала.
Если Вы скомпилировали надстройку в MATLAB или использовали mcc. Если вы создаете надстройку с помощью MATLAB Library Compiler, выберите Create log file в разделе Additional Runtime Settings.
Если вы создаете надстройку с помощью mcc
, просто задайте -logfile
с mcc
-R
команда
Если вы создали функцию с нуля с помощью мастера функций. Если вы создали функцию с нуля с помощью Мастера функций и хотите задать опции MATLAB Runtime, необходимо вручную изменить .bas
код файла.
Вы делаете это, вызывая следующее MWUtil
Вызовы API, подробно описанные с примерами в Class MWUtil: