Генерация MEX-функции в командной строке

Изучение целей

В этом примере вы будете учиться как:

  • Автоматически сгенерируйте MEX-функцию из своего кода MATLAB®.

  • Задайте свойства входного параметра функции в командной строке.

  • Задайте верхние границы данных переменного размера.

  • Задайте входные параметры переменного размера.

  • Сгенерируйте генерацию кода, сообщают, что можно использовать, чтобы отладить код MATLAB и проверить, что это подходит для генерации кода.

Учебные предпосылки

Что необходимо знать

Чтобы завершить этот пример, у вас должно быть основное знакомство с программным обеспечением MATLAB.

Необходимые продукты

Чтобы завершить этот пример, необходимо установить следующие продукты:

Для получения инструкций по установке Продуктов Mathworks обратитесь к документации по установке. Если вы установили MATLAB и хотите проверить, который установлены другие Продукты Mathworks, введите ver в Окно Команды MATLAB.

Пример: Евклидово минимальное расстояние

Описание

Евклидово расстояние между точками p и q является продолжительностью линейного сегмента pq¯. В Декартовых координатах, если p = (p1, p2..., pn) и q = (q1, q2..., qn) являются двумя точками на Евклидовом n-пробеле, то расстоянием от p до q дают:

d (p, q) = ‖p−q = (p1−q1) 2 + (p2−q2) 2 +... + (pn−qn) 2 = i=1n (pi−qi) 2

В одной размерности, расстоянии между двумя точками, x1 и x2, на строке просто абсолютное значение различия между двумя точками:

(x2−x1) 2 = | x2−x1 |

В двух измерениях расстояние между p = (p1, p2) и q = (q1, q2): (p1−q1) 2 + (p2−q2) 2

Пример для этого примера вычисляет минимальное Евклидово расстояние между вектором - столбцом x и набором векторов - столбцов в матрице книги шифров cb. Функция имеет три выходных переменные:

  • y, вектор в cb с минимальным расстоянием до x

  • idx, индекс вектора - столбца в соответствии cb самому близкому вектору

  • расстояние, расстояние между x и y

Алгоритм

Этот алгоритм вычисляет минимальное Евклидово расстояние между вектором - столбцом x и набором векторов - столбцов в матрице книги шифров cb. Алгоритм вычисляет минимальное расстояние до x и находит вектор - столбец в cb, который является самым близким к x. Это выводит этот вектор - столбец, y, его индекс, idx, в cb, и расстоянии, расстоянии между x и y.

Функциональная подпись для алгоритма:

function [y,idx,distance] = euclidean(x,cb)

Минимальное расстояние первоначально установлено в первый элемент cb.

idx=1;
distance=norm(x-cb(:,1));

Минимальный расчет расстояния выполняется в for - цикл.

for index=2:size(cb,2)
    d=norm(x-cb(:,index));
    if d < distance
        distance=d;
        idx=index;
    end
end

Вывод y установлен в минимальный вектор расстояния.

y=cb(:,idx);

Файлы для примера

Об учебных файлах

Пример использует следующие файлы:

  • Пример файлы кода MATLAB для каждого шага примера.

    Всюду по этому примеру вы работаете с файлами MATLAB, которые содержат простой Евклидов алгоритм расстояния.

  • Создайте скрипты, которые вы используете, чтобы скомпилировать ваш функциональный код.

  • Тестовые файлы, что:

    • Выполните функции предварительной обработки, например, настроив входные данные.

    • Вызовите заданную Евклидову функцию.

    • Выполните функции последующей обработки, например, строя график расстояний.

  • MAT-файл, который содержит входные данные в качестве примера.

Местоположение файлов

Учебные файлы доступны в следующей папке: docroot\toolbox\coder\examples\euclidean. Чтобы запустить пример, необходимо скопировать эти файлы в локальную папку. Для инструкций смотрите Копирование Файлов Локально.

Имена и описания файлов

ВводИмяОписание
Функциональный код euclidean01.mБазовая реализация MATLAB Евклидова минимального алгоритма расстояния включая функции plot.
euclidean02.mВерсия исходного алгоритма с директивой %#codegen.
euclidean03.mВерсия исходного алгоритма без функций построения графика.
euclidean04.mИзмененный алгоритм, который использует assert, чтобы задать верхние границы переменного N.
Создайте скриптbuild01.mСоздайте скрипт для euclidean03.m m.
build02.mСоздайте скрипт для euclidean03.m, задающего двумерные входные параметры.
build03.mСоздайте скрипт для euclidean03.m, задающего входные параметры переменного размера.
build04.mСоздайте скрипт для euclidean04.m m.
Тестовый скрипт test01.mНачальная версия тестового скрипта, включает функции plot. Тесты MEX-функция euclidean03.
test02.mТестирует трехмерную MEX-функцию euclidean03 с двумерными входными параметрами.
test03.mТестирует двумерную MEX-функцию euclidean04 с двумерными входными параметрами.
test04.mТесты MEX-функция euclidean03_varsize с двумерными и трехмерными входными параметрами.
test05.mТесты MEX-функция euclidean04, задающая, сколько элементов каждого входного параметра к процессу.
Matfileeuclidean.matСодержит входные данные, используемые алгоритмом.

Шаги примера

Копирование файлов локально

Скопируйте учебные файлы в папку локальных решений и создайте локальную рабочую папку:

  1. Создайте локальную папку solutions, например, c:\coder\euclidean\solutions.

  2. Изменитесь на папку docroot\toolbox\coder\examples. В подсказке команды MATLAB войдите:

    cd(fullfile(docroot, 'toolbox', 'coder', 'examples')) 

  3. Скопируйте содержимое подпапки euclidean к вашей локальной папке solutions, задав полный путь папки solutions:

    copyfile('euclidean', 'solutions')
    Ваша папка solutions теперь содержит полный набор решений для примера. Если вы не хотите выполнять шаги для каждой задачи в примере, можно просмотреть решения видеть, как код должен выглядеть.

  4. Создайте локальную папку work, например, c:\coder\euclidean\work.

  5. Скопируйте следующие файлы от своей папки solutions до вашей папки work.

    • euclidean01.m

    • euclidean.mat

    • Файлы типа "build" build01.m через build04.m

    • Тестовые скрипты test01.m через test05.m

    Ваша папка work теперь содержит файлы, что необходимо начать с примером.

Выполнение оригинального кода MATLAB

В этом примере вы работаете с функцией MATLAB, которая реализует Евклидов алгоритм минимизации расстояния. Вы делаете версию MATLAB этого алгоритма подходящей для генерации кода и тестируете получившуюся MEX-функцию, чтобы подтвердить функциональность модифицированного кода. Когда вы работаете через пример, вы совершенствовали дизайн алгоритма, чтобы принять входные параметры переменного размера.

Прежде, чем сгенерировать MEX-функцию, запустите исходную функцию MATLAB, чтобы видеть, как Евклидов алгоритм минимизации расстояния работает.

  1. Установите свою текущую папку MATLAB на папку работы, которая содержит ваши файлы для этого примера.

    cd work
    работа является именем полного пути папки работы, содержащей ваши файлы. Для получения дополнительной информации смотрите Файлы и Папки что MATLAB доступы (к MATLAB).

  2. Загрузите файл euclidean.mat в свой MATLAB workspace.

    load euclidean.mat
    Ваш MATLAB workspace теперь содержит:

    • Матричный x, содержащий 40000 трехмерные векторы.

    • Матричный cb, содержащий 216 трехмерные векторы.

    Алгоритм Евклида минимизирует расстояние между вектором - столбцом, x1, взятым от матричного x, и векторами - столбцами в матрице книги шифров cb. Это выводит вектор - столбец в cb, который является самым близким к x1.

  3. Создайте единственный входной вектор x1 из матричного x.

    x1=x(:,1)

    Результатом является первый вектор от x:

    x1 =
    
        0.8568
        0.7455
        0.3835
  4. Используйте Алгоритм Евклида, чтобы найти вектор в матрице книги шифров cb, который является самым близким к x1. В подсказке команды MATLAB войдите:

    [y, idx, distance]=euclidean01(x1,cb)

    Алгоритм Евклида запускает и строит графики от x1 до каждого вектора в cb.

    После завершения алгоритма это выводит координаты точки y, который является вектором в cb, самом близком к x1, вместе с индексом idx x1 в cb, и расстояние, distance, между y и x1.

    y =
        0.8000
        0.8000
        0.4000
    
    idx =
       171
    
    distance =
        0.0804

    Алгоритм вычисляет это точка, которую y=0.8000, 0.8000, 0.4000, 171-й вектор в cb, является самым близким, чтобы указать x1. Расстоянием между y и x1 является 0.0804.

Куда Пойти Затем.  Прежде, чем продолжить пример, необходимо настроить компилятор C, как детализировано в Подготовке компилятора C.

Подготовка вашего компилятора C

MATLAB CODER автоматически определяет местоположение и использует поддерживаемый установленный компилятор. Для текущего списка поддерживаемых компиляторов см. Поддерживаемые и Совместимые Компиляторы на веб-сайте MathWorks.

Можно использовать mex -setup, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).

Факторы для того, чтобы сделать ваш код совместимым

Разработка для Генерации кода.  Прежде, чем сгенерировать код, необходимо подготовить код MATLAB к генерации кода. Первый шаг должен устранить неподдерживаемые построения.

Проверка Проблемы во Время проектирования.  Существует два инструмента, которые помогают вам обнаружить проблемы генерации кода во время проектирования: анализатор кода и инструмент готовности генерации кода.

Вы используете анализатор кода в редакторе MATLAB, чтобы проверить на проблемы кода во время проектирования, минимизируя ошибки компиляции. Анализатор кода постоянно проверяет ваш код, когда вы вводите его. Это сообщает о проблемах и рекомендует модификациям максимизировать производительность и поддерживаемость.

Чтобы использовать анализатор кода, чтобы идентифицировать предупреждения и ошибки, характерные для MATLAB для генерации кода, необходимо добавить директиву %#codegen (или прагма) к файлу MATLAB. Полный список MATLAB для сообщений анализатора кода Генерации кода доступен в настройках Анализатора КОДА MATLAB. Смотрите Выполнение Отчета Анализатора кода (MATLAB) для получения дополнительной информации.

Примечание

Анализатор кода не может обнаружить весь MATLAB для проблем генерации кода. После устранения ошибок или предупреждений, что анализатор кода обнаруживает, скомпилируйте свой код с MATLAB CODER, чтобы определить, имеет ли код другие проблемы соответствия.

Инструмент готовности генерации кода экранирует код MATLAB на функции и функции, которые не поддерживаются для генерации кода. Инструмент предоставляет отчет, который перечисляет исходные файлы, которые содержат неподдерживаемые функции и функции и индикацию относительно того, сколько работает, требуется, чтобы делать код MATLAB подходящим для генерации кода.

Можно получить доступ к инструменту готовности генерации кода следующими способами:

  • В браузере текущей папки — путем щелчка правой кнопкой по файлу MATLAB

  • В командной строке — при помощи функции coder.screener.

  • В проекте — когда вы добавляете файл MATLAB к проекту, если MATLAB CODER обнаруживает проблемы генерации кода, он обеспечивает ссылку на отчет готовности генерации кода.

Проверка Проблемы во Время Генерации кода.  Можно использовать codegen, чтобы проверить на проблемы во время генерации кода. codegen проверяет, что ваш код MATLAB подходит для генерации кода.

Когда codegen обнаруживает ошибки или предупреждения, он автоматически генерирует сообщение об ошибке, которое описывает проблемы и обеспечивает ссылки на оскорбление код MATLAB. Для получения дополнительной информации см. Отчеты Генерации кода.

После генерации кода codegen генерирует MEX-функцию, которую можно использовать, чтобы протестировать реализацию в MATLAB.

Проверка Проблемы во Время выполнения.  Можно использовать codegen, чтобы сгенерировать MEX-функцию и проверку на проблемы во время выполнения. В моделировании код, сгенерированный для ваших функций MATLAB, включает проверки на этапе выполнения. Отключение проверок на этапе выполнения и внешних вызовов обычно приводит к оптимизированному сгенерированному коду и более быстрому моделированию. Вы управляете проверками на этапе выполнения с помощью объекта настройки MEX, coder.MexCodeConfig. Для получения дополнительной информации смотрите Проверки на этапе выполнения Управления.

Если вы сталкиваетесь с ошибками времени выполнения в своих функциях MATLAB, стек этапа выполнения появляется автоматически в Окне Команды MATLAB. Смотрите Ошибки времени выполнения Отладки.

Куда Пойти Затем.  Следующий раздел примера, Делая Ваш Код Подходящим для Генерации кода, показывает вам, как использовать анализатор кода MATLAB и codegen, чтобы сделать ваш код подходящим для генерации кода.

Создание КОДА MATLAB, подходящего для генерации кода

Создание Кода, Подходящего для Генерации кода.  Чтобы начать процесс создания вашего кода MATLAB, подходящего для генерации кода, вы работаете с файлом euclidean01.m. Этот файл является версией MATLAB трехмерного Евклидова примера, который строит график расстояний между входным вектором x и каждым из векторов в матрице книги шифров cb. Это определяет, какой вектор в cb является самым близким к x и выводит этот вектор, его положение в cb и расстояние до y.

  1. В вашей папке работы откройте euclidean01.m в редакторе MATLAB.

    edit euclidean01.m

    Файл открывается. Индикатор сообщения анализатора кода в правом верхнем углу редактора MATLAB является зеленым, который указывает, что анализатор кода не обнаружил ошибки, предупреждения или возможности для улучшения кода.

  2. Включите проверку ошибок генерации кода путем добавления директивы компиляции %#codegen после объявления функции.

    function [ y, idx, distance ] = ...
      euclidean01( x, cb )  %#codegen
    Индикатор сообщения анализатора кода остается зеленым, указывая, что он не обнаружил проблемы генерации кода.

    Для получения дополнительной информации об использовании анализатора кода смотрите Выполнение Отчета Анализатора кода (MATLAB).

  3. Поменяйте имя функции на euclidean02 и сохраните файл как euclidean02.m в текущей папке.

    Вы теперь готовы скомпилировать свой код с помощью codegen, который проверяет, что код подходит для генерации кода. После генерации кода codegen генерирует MEX-функцию, которую можно протестировать в MATLAB.

     Лучшая практика — сохранение вашего кода

Генерация MEX-функции Используя codegen

О codegen.  Вы генерируете MEX-функции с помощью codegen, функции, которая компилирует код MATLAB в MEX-функцию. codegen также проверяет, что ваш код MATLAB подходит для генерации кода.

Используя codegen.  Поскольку C использует статический контроль типов, codegen должен определить свойства всех переменных в файлах MATLAB во время компиляции. Поэтому необходимо задать свойства всех входных параметров функции в то же время, что и вы компилируете файл с codegen. Чтобы скомпилировать euclidean02.m, необходимо задать размер входного вектора x и матрица книги шифров cb.

  1. Скомпилируйте файл euclidean02.m.

    codegen -report euclidean02.m -args {x(:,1), cb}

    • По умолчанию codegen генерирует MEX-функцию под названием euclidean02_mex в текущей папке. Можно сравнить результаты выполнения MEX-функции с результатами выполнения оригинального кода MATLAB.

    • Опция -args дает команду codegen компилировать файл euclidean02.m при помощи демонстрационных входных параметров x(:,1) и cb.

    • Опция -report дает команду codegen представлять отчет генерации кода.

  2. Чтобы открыть Средство просмотра Отчета MATLAB CODER, нажмите, просматривают отчет.

  3. Просмотрите код MATLAB для функции plot_distances.

MATLAB CODER обрабатывает общие функции визуализации MATLAB как внешние. Это не генерирует код для этих функций. Вместо этого для MEX-функции это генерирует код, чтобы запустить функцию в MATLAB. Эти функции включают line, grid, clf, axis и pause. Отчет подсвечивает внешние функции. Если функция не поддерживается для генерации кода и не обработана как внешняя, необходимо явным образом объявить, что функция является внешней при помощи coder.extrinsic. Смотрите Внешние Функции.

Вы готовы начать следующую задачу в этом примере, Подтверждая MEX-функцию.

Проверка MEX-функции

Протестируйте MEX-функцию, которую вы сгенерировали в Генерации MEX-функции Используя codegen, чтобы проверить, что это обеспечивает ту же функциональность как оригинальный код MATLAB. Вы запускаете MEX-функцию с теми же входными параметрами, которые вы использовали в Выполнении оригинального кода MATLAB.

Выполнение сгенерированной MEX-функции

  1. Создайте единственный входной вектор x1 из матричного x.

    x1=x(:,1)

    Результатом является первый вектор в x:

    x1 =
        0.8568
        0.7455
        0.3835
  2. Используйте MEX-функцию euclidean02_mex, чтобы найти вектор в матрице книги шифров cb, который является самым близким к x1.

    [y, idx, distance] = euclidean02_mex(x1,cb)

    MEX-функция запускает и строит графики от x1 до каждого вектора в cb. После завершения алгоритма это выводит координаты точки y, который является вектором в cb, самом близком к x1, вместе с индексом idx y в cb, и расстояние, distance, между y и x1.

    y =
        0.8000
        0.8000
        0.4000
    
    idx =
       171
    
    distance =
        0.0804

    Графики и выходные параметры идентичны сгенерированным с исходной функцией MATLAB. MEX-функция euclidean02_mex функционально эквивалентна оригинальному коду MATLAB в euclidean01.m m.

Используя сборку и тестовые скрипты

Под контролем для Проблем Во время выполнения, вы сгенерировали MEX-функцию для своего кода MATLAB путем вызова codegen из командной строки MATLAB. В этой части примера вы используете скрипт сборки, чтобы сгенерировать вашу MEX-функцию и тестовый скрипт, чтобы протестировать его. Первый шаг должен изменить код в euclidean02.m, чтобы переместить функцию построения графика в отдельный тестовый скрипт.

 Почему скрипты сборки использования?

 Почему тестовые скрипты использования?

Изменение Кода, чтобы Удалить Функцию plot.  В файле euclidean02.m m:

  1. Удалите вызов plot_distances.

  2. Удалите локальную функцию plot_distances.

  3. Поменяйте имя функции на euclidean03 и сохраните файл как euclidean03.m в текущей папке.

 Содержимое euclidean03. m

Используя Скрипт build01 Сборки. m  . Затем вы используете скрипт сборки build01.m, который компилирует euclidean03.m с помощью codegen. Используйте опцию -report, которая сообщает, что codegen, чтобы сгенерировать генерацию кода сообщает, что можно использовать, чтобы отладить код MATLAB и проверить, что это подходит для генерации кода.

 Лучшая практика — генерация отчета генерации кода

 Содержимое Файла типа "build" build01. m

В подсказке команды MATLAB войдите:

build01
codegen запускает и генерирует MEX-функцию euclidean03_mex в текущей папке.

Вы готовы протестировать MEX-функцию euclidean03_mex.

Используя Тестовый скрипт test01. m  . Вы используете тестовый скрипт test01.m, чтобы протестировать MEX-функцию euclidean03_mex.

Тестовый скрипт:

  • Загружает тестовые данные из файла euclidean.mat.

  • Запускает исходный файл MATLAB euclidean03.m и строит график расстояний.

  • Запускает MEX-функцию euclidean03_mex и строит график расстояний.

 Содержимое Тестового скрипта test01. m

Выполнение Тестового скрипта.  В подсказке команды MATLAB войдите:

test01

Выполнения тестового файла, строит графики от x1 до каждого вектора в cb и выходные параметры:

Running MATLAB function euclidean03
y = 0.8         0.8         0.4
idx = 171
distance = 0.080374
Running MEX function euclidean03_mex
y = 0.8         0.8         0.4
idx = 171
distance = 0.080374
Выходные параметры для оригинального кода MATLAB и MEX-функции идентичны.

Вы теперь готовы начать следующую задачу в этом примере, Изменяя Алгоритм, чтобы Принять Вводы Переменного Размера.

Изменение алгоритма, чтобы принять вводы Переменного Размера

Почему Изменяют Алгоритм?.  Алгоритм, который вы использовали до сих пор в этом примере, подходит только для входных параметров процесса, размерности которых совпадают с размерностями входных параметров в качестве примера, обеспеченных с помощью опции -args. В этой части примера вы запускаете euclidean03_mex, чтобы видеть, что это не принимает двумерные входные параметры. Вы затем перекомпилировали свой код с помощью двумерных входных параметров в качестве примера и тестируете получившуюся MEX-функцию с двумерными входными параметрами.

О сборке и тестовых скриптах

 Содержимое test02. m

 Содержимое build02. m

 Содержимое test03. m

Выполнение сборки и тестовых скриптов

  1. Запустите тестовый скрипт test02.m, чтобы протестировать euclidean03x с двумерными входными параметрами.

    test02

    MATLAB сообщает об ошибке при указании, что MEX-функция не принимает двумерные переменные для входного параметра cb.

     MATLAB expression 'x' is not of the correct size: 
    expected [3x1] found [2x1].
    
    Error in ==> euclidean03

    Чтобы обработать двумерные входные параметры, необходимо перекомпилировать код, предоставляющий двумерные входные параметры в качестве примера.

  2. Запустите файл типа "build" build02.m, чтобы перекомпилировать euclidean03.m с двумерными входными параметрами.

    build02
    codegen компилирует файл и генерирует MEX-функцию euclidean03_2d в текущей папке.

  3. Запустите тестовый файл test03.m, чтобы запустить получившуюся MEX-функцию euclidean03_2d с двумерными входными параметрами.

    В подсказке команды MATLAB войдите:

    test03
    На этот раз, выполнения MEX-функции и выходные параметры векторный y в матричном cb, который является самым близким к x2d в двух измерениях.
    Running new 2-D version of MEX function
    y = 0         0.4
    idx = 3
    distance = 0.053094

Эта часть примера демонстрирует, как создать MEX-функции, чтобы обработать входные параметры с различными размерностями. Используя этот подход, вам была бы нужна библиотека MEX-функций, каждый подходящий только для входных параметров с заданными типами данных, размерностями и сложностью. Также можно изменить код, чтобы принять входные параметры переменного размера. Чтобы учиться как, смотрите Вводы Переменного Размера Определения.

Определение Вводов Переменного Размера.  Исходная функция MATLAB подходит для многих различных входных параметров размера. Чтобы обеспечить эту ту же гибкость в вашем сгенерированном коде C, используйте coder.typeof с параметром командной строки codegen -args.

coder.typeof(a,b,1) задает входной параметр переменного размера с тем же классом и сложностью как a и тот же размер и верхние границы как вектор размера b. Для получения дополнительной информации смотрите, Задают Вводы Переменного Размера в Командной строке.

  1. Скомпилируйте этот код с помощью файла типа "build" build03.m m. Этот файл типа "build" использует coder.typeof, чтобы задать входные параметры переменного размера к функции euclidean03.

    build03

    codegen компилирует файл без предупреждений или ошибок и генерирует MEX-функцию euclidean03_varsizex в текущей папке.

     Содержимое build03. m

  2. Запустите получившуюся MEX-функцию с двумерным и затем трехмерными входными параметрами с помощью тестового файла test04.m m.

    В подсказке команды MATLAB войдите:

    test04

    Выполнения тестового файла и выходные параметры:

    Running euclidean03_varsizex with 2-D inputs
    y  = 0         0.4
    idx = 3
    distance = 0.053094
    Running euclidean04_varsizex with 3-D inputs
    y = 0.6         0.8         0.2
    idx = 134
    distance = 0.053631
    Вы создали алгоритм, который принимает входные параметры переменного размера.

     Содержимое test04. m

Определение верхних границ для локальных переменных

В этой части примера вы изменяете алгоритм, чтобы вычислить только расстояние между первыми элементами N данного векторного x и первыми элементами N каждого вектора - столбца в матричном cb.

Чтобы изменить Евклидов минимальный алгоритм расстояния, euclidean03.m, чтобы разместить изменения в размерностях, по которым можно вычислить расстояния:

  1. Обеспечьте новый входной параметр, N, чтобы задать число элементов, чтобы рассмотреть. Новая функциональная подпись:

    function [y,idx,distance] = euclidean03(x,cb,N) 

  2. Задайте верхнюю границу для переменного N с помощью assert. Добавьте эту строку после объявления функции.

    assert(N<=3);

    Значение верхней границы должно соответствовать максимальному количеству размерностей матричного cb. Если вы не задаете верхнюю границу, ошибка границ массивов происходит, если вы запускаете MEX-функцию со значением для N, который превышает количество размерностей матричного cb. Для получения дополнительной информации смотрите, Задают Верхние границы для Массивов Переменного Размера.

  3. Измените строку кода, которая вычисляет начальное расстояние, чтобы использовать N. Замените строку:

    distance=norm(x-cb(:,1));
    с:
    distance=norm(x(1:N)-cb(1:N,1));

  4. Измените строку кода, которая вычисляет каждое последовательное расстояние, чтобы использовать N. Замените строку:

    d=norm(x-cb(:,index));
    с:
    d=norm(x(1:N)-cb(1:N,index)); 

  5. Поменяйте имя функции на euclidean04 и сохраните файл как euclidean04.m в текущей папке.

     Содержимое euclidean04. m

  6. Скомпилируйте этот код с помощью файла типа "build" build04.m m.

    В подсказке команды MATLAB войдите:

    build04

    codegen компилирует файл без предупреждений или ошибок и генерирует MEX-функцию euclidean04x в текущей папке.

     Содержимое build04. m

  7. Запустите получившуюся MEX-функцию, чтобы обработать первые два элемента входных параметров x и cb, затем обработать все три элемента этих входных параметров. Используйте тестовый файл test05.m m.

    В подсказке команды MATLAB войдите:

    test05

    Выполнения тестового файла и выходные параметры:

    Running euclidean04_mex for first two elements of inputs x and cb
    y = 0.8         0.8           0
    idx = 169
    distance = 0.078672
    Running eucidean04_mex for three elements of inputs x and cb
    y = 0.8         0.8         0.4
    idx = 171
    distance = 0.080374

     Содержимое test05. m

Ключевые пункты, чтобы помнить

  • Поддержите свой код MATLAB, прежде чем вы измените его.

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

  • Используйте скрипты сборки, чтобы создать ваши файлы.

  • Используйте тестовые скрипты, чтобы отделиться пред - и последующая обработка от основного алгоритма.

  • Используйте опцию -args, чтобы задать входные параметры в командной строке.

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

  • Используйте опцию -report, чтобы создать отчет генерации кода.

  • Используйте coder.typeof(a,b,1), чтобы задать входные параметры переменного размера.

Где узнать больше

Следующие шаги

К...Смотрите...

Узнать, как сгенерировать код С из вашего кода MATLAB

Генерация кода C в командной строке

Узнать, как интегрировать ваш код MATLAB с моделями Simulink®

Отслеживаемый объект Используя КОД MATLAB (Simulink)

Узнайте больше об использовании генерации кода от MATLAB

Программирование MATLAB для генерации кода

Используйте данные переменного размера

Генерация кода для массивов Переменного Размера

Ускорьте фиксированную точку код MATLAB

fiaccel

Интегрируйте пользовательский код С в код MATLAB и сгенерируйте встраиваемый код

Внешняя интеграция кода

Интегрируйте пользовательский код С в функцию MATLAB

coder.ceval

Сгенерируйте HDL из кода MATLAB

www.mathworks.com/products/slhdlcoder

Была ли эта тема полезной?