Как ввести функцию в матлаб

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

В поле редактора напишем простую программу, но чуть-чуть усложним её:

function draw_plot(x)
y = log(x); % Задаём первую функцию
subplot(1, 2, 1), plot(x, y); % Строим первый график
y = sqrt(x); % Задаём вторую функцию
subplot(1, 2, 2), plot(x, y); % Строим второй графикМы добавили вторую функцию и будем выводить сразу два графика рядом друг с другом. Знаком процента обозначаются в среде MATLAB комментарии.
Не забудем сохранить программу. Стандартное расширение файла с программой Матлаб – *.m.
Теперь закройте редактор и окно с графиком, который мы построили ранее.

Внешние функции

При обработке вызова функционального foo в коде MATLAB ® генератор кода находит определение foo и генерирует код для его тела. В некоторых случаях вы можете хотеть обойти генерацию кода и вместо этого использовать движок MATLAB, чтобы выполнить вызов. Используйте coder.extrinsic(‘foo’) , чтобы объявить, что вызовы foo не генерируют код и вместо этого используют движок MATLAB для выполнения. В этом контексте foo упоминается как внешняя функция. Эта функциональность доступна только, когда движок MATLAB доступен в MEX-функциях или во время вызовов coder.const во время компиляции.

Если вы генерируете автономный код для функции, которая вызывает foo и включает coder.extrinsic(‘foo’) , генератор кода пытается определить, влияет ли foo на вывод. Если foo не влияет на вывод, доходы генератора кода с генерацией кода, но исключает foo из сгенерированного кода. В противном случае генератор кода производит ошибку компиляции.

Генератор кода автоматически обрабатывает много общих функций визуализации MATLAB, таких как plot , disp и figure , как внешние. Вы не должны явным образом объявлять их как внешние функции при помощи coder.extrinsic . Например, вы можете хотеть вызвать plot , чтобы визуализировать ваши результаты в среде MATLAB. Если вы генерируете MEX-функцию от функции, которая вызывает plot , и затем запустите сгенерированную MEX-функцию, вызовы отправок генератора кода функции plot к движку MATLAB. Если вы генерируете библиотеку или исполняемый файл, сгенерированный код не содержит вызовы функции plot . Отчет генерации кода подсвечивает вызовы от вашего кода MATLAB до внешних функций так, чтобы было легко определить, какие функции поддерживаются только в среде MATLAB.

Для неподдерживаемых функций кроме общих функций визуализации необходимо объявить, что функции являются внешними (см. Разрешение Вызовов функции для Генерации кода). Внешние функции не скомпилированы, но вместо этого выполнены в MATLAB во время симуляции (см. Разрешение Внешних Функций Во время Симуляции).

Существует два способа объявить, что функция является внешней:

Используйте построение coder.extrinsic в основных функциях или локальных функциях (см. Объявление функций MATLAB как Внешние Функции).

Объявление функций MATLAB как внешние функции

Чтобы объявить, что функция MATLAB является внешней, добавьте построение coder.extrinsic во главе основной функции или локальной функции:

Объявление внешних функций

Следующий код объявляет функцию patch MATLAB, внешнюю в локальной функции create_plot . Вы не должны объявлять axis как внешний, потому что axis является одной из общих функций визуализации, которые генератор кода автоматически обрабатывает как внешний.

Читайте также:  Датчик температуры и влажности xiaomi mijia bluetooth

Генератор кода не производит код для patch и axis , но вместо этого отправляет их MATLAB для выполнения.

Чтобы протестировать функцию, выполните эти шаги:

Преобразуйте pythagoras в MEX-функцию путем выполнения этой команды в посдказке MATLAB:

Щелкните по ссылке к отчету генерации кода и затем, в отчете, просмотрите код MATLAB для create_plot .

Отчет подсвечивает patch и функции axis , чтобы указать, что они поддержаны только в среде MATLAB.

Запустите MEX-функцию путем выполнения этой команды:

MATLAB отображает график прямоугольного треугольника как красный объект закрашенной фигуры:

Когда Использовать Построение coder.extrinsic

Используйте построение coder.extrinsic для:

Вызовите функции MATLAB, которые не производят вывод во время симуляции, не генерируя ненужный код (см. Разрешение Внешних Функций Во время Симуляции).

Сделайте свое самодокументирование кода и легче отладить. Можно отсканировать исходный код для операторов coder.extrinsic , чтобы изолировать вызовы функций MATLAB, которые могут потенциально создать и распространить mxArrays (см. Работу с mxArrays).

Сохраните ввод. С одним оператором coder.extrinsic каждый последующий вызов функции является внешним, пока вызов и оператор находятся в том же осциллографе (см. Осциллограф Внешних Объявлений функции).

Объявите функцию (функции) MATLAB, внешнюю в осциллографе функции вызова (см. Осциллограф Внешних Объявлений функции). Чтобы сузить осциллограф, используйте feval (см., что функции MATLAB Вызова Используют feval).

Правила для внешних объявлений функции

Наблюдайте следующие правила при объявлении функций, внешних для генерации кода:

Объявите функцию, внешнюю, прежде чем вы вызовете ее.

Не используйте внешнее объявление в условных операторах.

Осциллограф внешних объявлений функции

Построение coder.extrinsic имеет функциональный осциллограф. Например, рассмотрите следующий код:

В этом примере rat и min , столь же обработанном как внешнем каждый раз, они называются в основном функциональном foo . Существует два способа сузить осциллограф внешнего объявления в основной функции:

Объявите функцию MATLAB, внешнюю в локальной функции, как в этом примере:

Здесь, функциональный rat является внешним каждый раз, когда он называется в основном функциональном foo , но функциональный min является внешним только, когда названо в локальной функции mymin .

Вызовите функцию MATLAB с помощью feval , как описано в Вызове функций MATLAB Используя feval.

Вызов функций MATLAB Используя feval

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

Рассмотрите следующий пример:

Поскольку feval является внешним, оператор feval(‘min’, N, D) оценен MATLAB — не скомпилированный — который имеет тот же результат как объявление функционального min , внешнего для просто этого вызова. В отличие от этого, функциональный rat является внешним в функциональном foo .

Генератор кода не поддерживает использование feval , чтобы вызвать локальные функции или функции, которые расположены в частной папке.

Внешнее объявление для нестатических методов

Предположим, что вы задаете класс myClass , который имеет нестатический метод foo , и затем создайте экземпляр obj этого класса. Если вы хотите объявить метод obj.foo как внешний в вашем коде MATLAB, который вы предназначаете для генерации кода, следуете этим правилам:

Запишите вызов foo как вызов функции. Не пишите вызов при помощи записи через точку.

Объявите , что foo является внешним при помощи синтаксиса coder.extrinsic(‘foo’) .

Читайте также:  Джош рэднор с женой

Например, задайте myClass как:

Вот функция MATLAB в качестве примера, которая объявляет foo как внешний.

Нестатические методы также известны как обычные методы. См. Методы и Функции (MATLAB).

Разрешение внешних функций во время симуляции

Генератор кода разрешает вызовы внешних функций — функции, которые не поддерживают генерацию кода — можно следующим образом:

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

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

Работа с mxArrays

Выводом внешней функции является mxArray — также вызвал массив MATLAB. Единственные допустимые операции для mxArrays :

Хранение mxArrays в переменных

Передача mxArrays к функциям и возврату их от функций

Преобразование mxArrays к известным типам во время выполнения

Чтобы использовать mxArrays , возвращенный внешними функциями в других операциях, необходимо сначала преобразовать их в известные типы, как описано в Преобразовании mxArrays к Известным Типам.

Преобразование mxArrays к Известным Типам

Чтобы преобразовать mxArray в известный тип, присвойте mxArray переменной, тип которой задан. Во время выполнения mxArray преобразован в тип переменной, присвоенной ему. Однако, если данные в mxArray не сопоставимы с типом переменной, вы получаете ошибку времени выполнения.

Например, рассмотрите этот код:

Здесь, функциональный foo верхнего уровня вызывает внешнюю функцию MATLAB rat , который возвращает два mxArrays , представляющий числитель N и знаменатель D рационального дробного приближения pi . Несмотря на то, что можно передать их mxArrays другой функции MATLAB — в этом случае, min — вы не можете присвоить mxArray , возвращенный min в вывод y .

Если при запуске этот функциональный foo в блоке MATLAB function в модели Simulink ® , код генерирует следующую ошибку во время симуляции:

Чтобы решить эту проблему, задайте y , чтобы быть типом и размером значения, которое вы ожидаете , что min возвратит — в этом случае, скаляр дважды — можно следующим образом:

Ограничения на внешние функции для генерации кода

Полная среда выполнения MATLAB не поддержана во время генерации кода. Поэтому следующие ограничения применяются при вызове функций MATLAB внешне:

Функции MATLAB, которые осматривают вызывающую сторону, или читают или пишут в рабочую область вызывающей стороны, не работают во время генерации кода. Такие функции включают:

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

Функции в сгенерированном коде могут привести к непредсказуемым результатам, если ваша внешняя функция выполняет следующие действия во время выполнения:

Измените путь MATLAB

Удалите или добавьте файлы MATLAB

Измените предупреждение состояний

Измените настройки MATLAB

Измените параметры Simulink

Генератор кода не поддерживает использование coder.extrinsic , чтобы вызвать функции, которые расположены в частной папке.

Генератор кода не поддерживает использование coder.extrinsic , чтобы вызвать локальные функции.

Ограничьте на аргументах функции

Можно вызвать функции максимум с 64 входными параметрами и 64 выходными параметрами.

Оператор BREAK – прерывание выполнения цикла

Оператор break прерывает выполнение циклов for и while. Для вложенных циклов прерывание возможно только из самого внутреннего цикла.

Цикл while будет выполняться до тех пор, пока не будет введено нулевое или отрицательное значение переменной:

Читайте также:  Видеокарта ati radeon x1600 pro

n=input(‘Введите n. Прекращение ввода n х = input( )

Функция х = input( ) выводит на экран строку с приглашением и ожидает ввода выражения, допустимого в системе MATLAB: арифметическое выражение, имя встроенной функции или М-

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

Функция х = input( , ‘s’) ожидает ввода строки и возвращает строку, которая введена пользователем. Если нажать клавишу Enter без ввода строки, то будет введен пустой массив символов.

Вводимая строка символов может содержать одну или несколько групп символов
, которая соответствует переходу на следующую строку. Используя управляющие символы строка приглашения может быть размещена на нескольких строках.

Для вывода обратного слэша нужно использовать комбинацию символов \.

Задействовать клавишу Enter для ввода ответа по умолчанию.

i=input(‘Продолжить? Да/Нет [Да]’,’s’); if isempty(i)

ans = strcat(‘Ваш ответ -‘,i); disp(ans)

Оператор KEYBOARD – переключение на работу с клавиатуры из М- файла

Оператор keyboard прерывает исполнение М-файла и передает управление клавиатуре. Этот специальный режим работы отмечается тем, что на экране появляется приглашение К”. Фактически – это режим отладки m – файла. В этом режиме можно проверить или изменить переменные. Доступны все команды системы MATLAB. Работа в этом режиме будет завершена, если выполнить команду return; после этого управление будет передано М-файлу, или команду dbquit – управление будет возвращено MATLAB.

Задействовать клавишу Enter для ввода ответа по умолчанию c режимом отладки.

i=input(‘Продолжить? Да/Нет [Да]’,’s’); if isempty(i)

i=’Нет’; End keyboard;

ans = strcat(‘Ваш ответ -‘,i); disp(ans)

Оператор PAUSE – приостановка выполнения М-файла

Команда pause приводит к паузе в работе системы и ожиданию нажатия любой клавиши для продолжения.

Команда pause(n) приостанавливает работу системы MATLAB на n секунд. Это позволяет привлечь внимание пользователя к выдаваемой на экран в процессе работы М-файла числовой или графической информации.

for i=3:10, mesh(magic(i)),pause(2),end

Функция MENU – создание меню

k = menu(‘ ‘, ‘выбор 1, ‘выбор 2’, . ‘выбор n’)

Функция k = menu(‘ ‘, ‘выбор 1, ‘выбор 2’, . ‘выбор n’) при работе с оконным интерфейсом выводит на экран меню с заголовком и кнопками выбора. Выходному параметру k присваивается номер выбранной кнопки.

k=menu(‘Базис’,’Полиномы Чебышева 1 рода’,’Полиномы Чебышева 2 рода’,’Полиномы Лежандра’,’Выход’);

switch k case 1

s=’Полиномы Чебышева 1 рода’; case 2

s=’Полиномы Чебышева 2 рода’; case 3

s=’Полиномы Лежандра’; case 4

s break, end; disp(s);

Результат последовательного выбора пунктов меню

Ввод данных из файла

Основные функции ввода приведены в таблице:

fscanf Чтение форматированных данных из файла

textread Чтение форматироавнных данных из текстового файла

fread Чтение данных из двоичного файла

fgetl Чтение очередной символьной строки из файла. Символы конца строки не включаются.

fgets Чтение очередной символьной строки из файла. Символы конца строки включаются

fopen Открытие файла на чтение или запись

FOPEN – открытие файла

присваивает ему идентификатор файла – FID. Если файл окрыт на чтение и не найден в текущем каталоге MATLAB, FOPEN ищет его в установленных каталогах MATLAB.

Опции могут быть следующими строками: ‘r’ чтение

‘w’ запись, создание, если необходимо

‘a’ добавление, создание, если необходимо ‘r+’ чтение или запись существующего файла

‘w+’ перезапись или открытие на чтение или запись ‘a+’ чтение или дабавление в файл

‘W’ запись без автоматического обновления

‘A’ добавление без автоматического обновления

По умолчанию, файлы открываются в двоичном формате. Для открытия в текстовом формате, необходимо добавлять опцию-

Ссылка на основную публикацию
Adblock detector