- Почему в моем проекте Matlab ничего не работает?
- Почему Matlab не видит мою функцию?
- Почему Matlab не видит мою функцию?
- MATLAB — Функции
- пример
- Анонимные функции
- пример
- Основные и подфункции
- пример
- Вложенные функции
- пример
- Частные функции
- пример
- Глобальные переменные
- пример
- Документация
- Синтаксис
- Описание
- Примеры
- Функция с одним Выводом
- Функция с несколькими Выходными параметрами
- Функция в файле скрипта
- Несколько функций в функциональном файле
- Функция с валидацией аргумента
- Смотрите также
- Открытый пример
- Документация MATLAB
- Поддержка
Почему в моем проекте Matlab ничего не работает?
Я пытаюсь заговорить с Матлабом. В частности, я стараюсь использовать множество онлайн-источников, но никто из них не работает.
Вот моя проблема, я пытаюсь построить выражение: y = 2 * (x-1)/(x-4) Kb/L, и меня интересует диапазон x между 0 и 1.
но он возвращает:
Я знаю, что linspace — это не правильный способ построения. Как я могу построить эту функцию? Я хочу сохранить декларацию K, b, L, потому что я мог бы их заменить последним.
y=2*(x-1)./(x-4)*K*b/L; вы должны использовать ./ replace /
Я предполагаю, что вы новый пользователь Matlab :). Программа в целом хорошо, но вы должны думать о некоторых вещах. Первый,
linspace не является функцией построения графика. Функция полезна, хотя. С вашим синтаксисом он создает вектор длиной 1000 с диапазоном [0,1]. Для печати введите:
Linecolor и стиль можно установить как
Для предопределенных цветов (здесь ‘r-.’ Означает красную пунктирную линию). Есть также некоторые дополнительные свойства, которые можно найти, чтобы проверить онлайн-справку сюжета.
Также, как говорят другие, если вы хотите работать с каждым элементом вектора, используйте ./ . / — матричный оператор.
Как сказал hzy199411, вы должны использовать «.». операция.
Я бы посоветовал вам ввести «помощь». в командной строке MATLAB. MATLAB будет реагировать с большим индексом результатов, но посмотрите раздел «Арифметические операторы».
Вы также можете попробовать команду «doc arith», но я думаю, что «помощь». более полезен, потому что, по крайней мере, в MATLAB 2013 он подробно перечисляет более «точечные» операторы.
Короче говоря, несколько арифметических операторов с префиксом ‘.’ («Dot») являются «Element-by-Element» операциями и, как таковые, они работают с каждым индексом массива/матрицы.
Например, если у вас был массив s = 1: 20, и вы выполнили операцию s/s, вы получили бы ans = 1, где, как если бы вы сделали s./s, вы получили массив из 1 с той же длиной, что и «.
Источник
Почему Matlab не видит мою функцию?
Моя функция определенно работает; она была проверена и в какой-то момент была признана.
Здесь прототип функции:
Здесь звонок, который я делаю с терминала Matlab:
Здесь ошибка выскакивает у меня:
Теперь я на 100% уверен, что я в том же каталоге, что и функция. Я даже использовал
Чтобы убедиться. Он просто не работает, и я озадачен.
Любая помощь приветствуется.
Чтобы обобщить другие сообщения, здесь приведен рабочий процесс для определения причины проблемы.
Вы ошибочно указали название функции. Проверьте определение функции и убедитесь, что она действительно называется calculateEllipse .
Вы сохранили функцию в файле с именем, отличным от имени функции. Проверьте имя файла и убедитесь, что оно совпадает с именем функции.
Папка, содержащая имя функции, не находится на пути MATLAB. Есть несколько способов проверить это. Введите path чтобы увидеть текущий путь или which calculateEllipse чтобы найти местоположение, которое MATLAB использует для этого файла. (Если есть проблема, эта последняя команда отобразит ‘calculateEllipse’ not found. Обратите внимание, что addpath не постоянно обновляет путь, поэтому, когда вы закрываете MATLAB, путь будет сброшен. Используйте для этого путь savepath .
Папка, содержащая эту функцию, является подкаталогом matlabroot . Эти папки зарезервированы для полноценных панелей инструментов; плохие вещи происходят, когда вы храните свой код здесь. См. Ответ Боба для получения дополнительной информации.
Другие полезные вещи для проверки:
Можете ли вы вызвать другие функции, которые хранятся в одной папке?
Если вы сохраните функцию в другой папке, она будет запущена?
Добавление к тому, что сказал Джефф; Другая возможность заключается в том, что вы разместили функцию где-то внутри вашей установки MATLAB. По умолчанию MATLAB не пересматривает свою собственную файловую структуру для новых файлов; он предполагает, что его внутренняя файловая структура остается неизменной. Убедитесь, что вы сохраняете файл (который, как указал Джефф, должен называться calculateEllipse.m) где-то вне вашей установки MATLAB.
Чтобы получить больше информации.
Я могу придумать пару причин, которые могут произойти.
Во-первых, как сказал Джефф, вы могли бы назвать файл “calcEllipse.m” вместо “calculateEllipse.m”. В этом случае вам нужно переименовать функцию так же, как и файл m, который вы сохранили.
Во-вторых, вы не добавили правильный путь. Нет никаких оснований для того, чтобы в противном случае я мог сообщить об этом другим. Дважды проверьте, что вы добавили путь к m файлу, который сохраняется. Простой способ проверить, если вы наберете “calculateEll”, а затем нажмите вкладку, работает ли автозаполнение? Если нет, вы находитесь вне пути.
Надеюсь, это одна из тех вещей, которые вы можете быстро исправить!
Ключом к этой проблеме является следующее: %Has no license available . Это означает, что функция в каталоге функции, которую вы пытаетесь использовать, имеет то же имя, что и функция в панели инструментов, которой вы не владеете. MATLAB по умолчанию отключает весь каталог, а не только функцию с тем же именем в панели инструментов, которой у вас нет. Вот пример:
файлы в каталоге:
Если я не владею “Инструментом обработки сигналов”, тогда blackman.m отключит весь каталог.
Источник
Почему Matlab не видит мою функцию?
Моя функция определенно работает; она была проверена и в какой-то момент была признана.
Здесь прототип функции:
Здесь звонок, который я делаю с терминала Matlab:
Здесь ошибка выскакивает у меня:
Теперь я на 100% уверен, что я в том же каталоге, что и функция. Я даже использовал
Чтобы убедиться. Он просто не работает, и я озадачен.
Любая помощь приветствуется.
Чтобы обобщить другие сообщения, здесь приведен рабочий процесс для определения причины проблемы.
Вы ошибочно указали название функции. Проверьте определение функции и убедитесь, что она действительно называется calculateEllipse .
Вы сохранили функцию в файле с именем, отличным от имени функции. Проверьте имя файла и убедитесь, что оно совпадает с именем функции.
Папка, содержащая имя функции, не находится на пути MATLAB. Есть несколько способов проверить это. Введите path чтобы увидеть текущий путь или which calculateEllipse чтобы найти местоположение, которое MATLAB использует для этого файла. (Если есть проблема, эта последняя команда отобразит ‘calculateEllipse’ not found. Обратите внимание, что addpath не постоянно обновляет путь, поэтому, когда вы закрываете MATLAB, путь будет сброшен. Используйте для этого путь savepath .
Папка, содержащая эту функцию, является подкаталогом matlabroot . Эти папки зарезервированы для полноценных панелей инструментов; плохие вещи происходят, когда вы храните свой код здесь. См. Ответ Боба для получения дополнительной информации.
Другие полезные вещи для проверки:
Можете ли вы вызвать другие функции, которые хранятся в одной папке?
Если вы сохраните функцию в другой папке, она будет запущена?
Источник
MATLAB — Функции
Функция — это группа операторов, которые вместе выполняют задачу. В MATLAB функции определены в отдельных файлах. Имя файла и функции должны совпадать.
Функции работают с переменными в их собственном рабочем пространстве, которое также называется локальным рабочим пространством , отдельно от рабочего пространства, к которому вы обращаетесь в командной строке MATLAB, которое называется базовым рабочим пространством .
Функции могут принимать более одного входного аргумента и могут возвращать более одного выходного аргумента.
Синтаксис оператора функции —
пример
Следующая функция с именем mymax должна быть записана в файл с именем mymax.m . Он принимает пять чисел в качестве аргумента и возвращает максимум чисел.
Создайте файл функции с именем mymax.m и введите в него следующий код —
Первая строка функции начинается с ключевого слова function . Это дает название функции и порядок аргументов. В нашем примере функция mymax имеет пять входных аргументов и один выходной аргумент.
Строки комментариев, которые идут сразу после оператора функции, содержат текст справки. Эти строки печатаются при вводе —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вы можете вызвать функцию как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Анонимные функции
Анонимная функция похожа на встроенную функцию в традиционных языках программирования, определенную в одной инструкции MATLAB. Он состоит из одного выражения MATLAB и любого количества входных и выходных аргументов.
Вы можете определить анонимную функцию прямо в командной строке MATLAB или в функции или скрипте.
Таким образом, вы можете создавать простые функции без необходимости создавать файл для них.
Синтаксис для создания анонимной функции из выражения:
пример
В этом примере мы напишем анонимную функцию с именем power, которая будет принимать два числа в качестве входных данных и возвращать первое число, возведенное в степень второго числа.
Создайте файл сценария и введите в нем следующий код —
Когда вы запускаете файл, он отображает —
Основные и подфункции
Любая функция, кроме анонимной, должна быть определена в файле. Каждый файл функции содержит требуемую первичную функцию, которая появляется первой, и любое количество необязательных подфункций, которые идут после основной функции и используются ею.
Первичные функции могут быть вызваны из-за пределов файла, который их определяет, либо из командной строки, либо из других функций, но подфункции не могут быть вызваны из командной строки или других функций вне файла функции.
Подфункции видны только основной функции и другим подфункциям в файле функций, который их определяет.
пример
Напишем функцию с именем quadratic, которая будет вычислять корни квадратного уравнения. Функция будет принимать три входа: квадратичный коэффициент, линейный коэффициент и постоянный член. Это вернуло бы корни.
Файл функций quadratic.m будет содержать основную функцию quadratic и вспомогательный диск , который вычисляет дискриминант.
Создайте файл функции quadratic.m и введите в него следующий код —
Вы можете вызвать вышеуказанную функцию из командной строки как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вложенные функции
Вы можете определить функции в теле другой функции. Это так называемые вложенные функции. Вложенная функция содержит любой или все компоненты любой другой функции.
Вложенные функции определены в области действия другой функции и имеют общий доступ к рабочему пространству содержащей функции.
Вложенная функция имеет следующий синтаксис:
пример
Перепишем функцию quadratic из предыдущего примера, однако на этот раз функция диска будет вложенной функцией.
Создайте файл функции quadratic2.m и введите в него следующий код —
Вы можете вызвать вышеуказанную функцию из командной строки как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Частные функции
Закрытая функция — это основная функция, которая видна только ограниченной группе других функций. Если вы не хотите показывать реализацию функции (й), вы можете создать их как частные функции.
Закрытые функции находятся в подпапках со специальным именем private .
Они видны только функциям в родительской папке.
пример
Перепишем квадратичную функцию. На этот раз, однако, функция диска, вычисляющая дискриминант, будет частной функцией.
Создайте подпапку с именем private в рабочем каталоге. Сохраните в нем следующий файл функции disc.m —
Создайте функцию quadratic3.m в вашем рабочем каталоге и введите в нее следующий код:
Вы можете вызвать вышеуказанную функцию из командной строки как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Глобальные переменные
Глобальные переменные могут совместно использоваться более чем одной функцией. Для этого вам нужно объявить переменную как глобальную во всех функциях.
Если вы хотите получить доступ к этой переменной из базовой рабочей области, объявите переменную в командной строке.
Глобальное объявление должно произойти до того, как переменная будет фактически использована в функции. Рекомендуется использовать заглавные буквы для имен глобальных переменных, чтобы отличать их от других переменных.
пример
Давайте создадим файл функции с именем medium.m и наберем в нем следующий код:
Создайте файл сценария и введите в нем следующий код —
Когда вы запустите файл, он покажет следующий результат —
Источник
Документация
Объявите имя функции, входные параметры и выходные параметры
Синтаксис
Описание
function [y1. yN] = myfun(x1. xM) объявляет функцию с именем myfun это принимает, вводит x1. xM и возвращает выходные параметры y1. yN . Этот оператор объявления должен быть первой исполняемой линией функции. Допустимые имена функций начинаются с буквенного символа и могут содержать буквы, числа или символы нижнего подчеркивания.
Можно сохранить функцию:
В файле функции, который содержит только функциональные определения. Имя файла должно совпадать с именем первой функции в файле.
В файле скрипта, который содержит команды и функциональные определения. Функции должны быть в конце файла. Файлы скрипта не могут иметь того же имени как функция в файле. Функции поддерживаются в скриптах в R2016b или позже.
Файлы могут включать несколько локальных функций или вложенных функций. Для удобочитаемости используйте end ключевое слово, чтобы указать на конец каждой функции в файле. end ключевое слово требуется когда:
Любая функция в файле содержит вложенную функцию.
Функция является локальной функцией в файле функции, и любая локальная функция в файле использует end ключевое слово.
Функция является локальной функцией в файле скрипта.
Примеры
Функция с одним Выводом
Задайте функцию в файле с именем average.m это принимает входной вектор, вычисляет среднее значение значений и возвращает один результат.
Вызовите функцию из командной строки.
Функция с несколькими Выходными параметрами
Задайте функцию в файле с именем stat.m это возвращает среднее и стандартное отклонение входного вектора.
Вызовите функцию из командной строки.
Функция в файле скрипта
Задайте скрипт в файле с именем integrationScript.m это вычисляет значение подынтегрального выражения в
Примечание: Включая функции в скриптах требует MATLAB® R2016b или позже.
Несколько функций в функциональном файле
Задайте две функции в файле с именем stat2.m , где первые вызовы функции второе.
Функциональный avg local function. Локальные функции только доступны для других функций в том же файле.
Вызовите функциональный stat2 из командной строки.
Функция с валидацией аргумента
Задайте функцию, которая ограничивает вход числовым вектором, который не содержит Inf или NaN элементы. Эта функция использует arguments ключевое слово, которое допустимо для MATLAB ® версии R2019b и позже.
В arguments блок кода, (1,:) указывает на тот x должен быть вектор. Функции валидации,
Вызывание функции с вектором, который содержит элемент, который является NaN нарушает объявление входного параметра. Это нарушение приводит к ошибке, будучи выданным mustBeFinite функция валидации.
Смотрите также
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
© 1994-2021 The MathWorks, Inc.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Источник