Undefined function or variable matlab как исправить

Possible Solutions

Verify Spelling of Function or Variable Name

One of the most common causes is misspelling the function or variable name.
Especially with longer names or names containing similar characters (such as the
letter l and numeral one), it is easy to make mistakes and
hard to detect them.

Often, when you misspell a MATLAB function, a suggested function name appears in the Command Window.
For example, this command fails because it includes an uppercase letter in the
function name:

Undefined function or variable 'accumArray'.
 
Did you mean:
>> accumarray

When this happens, press Enter to execute the suggested
command or Esc to dismiss it.

Verify Inputs Correspond to the Function Syntax

Object methods are typically called using function syntax: for instance
method(object,inputs). Alternatively, they can be called
using dot notation: for instance object.method(inputs). One
common error is to mix these syntaxes. For instance, you might call the method
using function syntax, but to provide inputs following dot notation syntax and
leave out the object as an input: for instance,
method(inputs). To avoid this, when calling an object
method, make sure you specify the object first, either through the first input
of function syntax or through the first identifier of dot notation.

Make Sure Function Name Matches File Name

When you write a function, you establish its name when you write its function
definition line. This name should always match the name of the file you save it
to. For example, if you create a function named curveplot,

function curveplot(xVal, yVal)
     - program code -

then you should name the file containing that function
curveplot.m. If you create a pcode file for the function,
then name that file curveplot.p. In the case of conflicting
function and file names, the file name overrides the name given to the function.
In this example, if you save the curveplot function to a file
named curveplotfunction.m, then attempts to invoke the
function using the function name will fail:

curveplot
Undefined function or variable 'curveplot'.

If you encounter this problem, change either the function name or file name so
that they are the same.

To Locate the file that defines this function, use the MATLAB
Find Files utility as follows:

  1. On the Home tab, in the
    File section, click

    Find Files.

  2. Under , enter
    *.m

  3. Under , enter
    the function name.

  4. Click the Find button

Make Sure Necessary Toolbox Is Installed and Correct Version

If you are unable to use a built-in function from MATLAB or its toolboxes, make sure that the function is installed and is
the correct version.

If you do not know which toolbox contains the function you need, search for
the function documentation at https://www.mathworks.com/help. The toolbox name
appears at the top of the function reference page. Alternatively, for steps to
identify toolboxes that a function depends on, see Identify Program Dependencies.

Once you know which toolbox the function belongs to, use the ver function to see which
toolboxes are installed on the system from which you run MATLAB. The ver function displays a list of all
currently installed MathWorks® products. If you can locate the toolbox you need in the output
displayed by ver, then the toolbox is installed. If you
cannot, you need to install it in order to use it. For help with installing
MathWorks products, see Install License Manager on License Server.

Verify Path Used to Access Function Toolbox

Tip

If you have a custom file path, this step will delete it.

The MATLAB search path is a subset of all the folders in the file system.
MATLAB uses the search path to locate files used with MathWorks products efficiently. For more information, see What Is the MATLAB Search Path?.

If the function you are attempting to use is part of a toolbox, then verify
that the toolbox is available using ver.

Because MATLAB stores the toolbox information in a cache file, you need to first
update this cache and then reset the path.

  1. On the Home tab, in the
    Environment section, click

    Preferences.

    The Preference dialog box appears.

  2. On the > page, select Update Toolbox Path
    Cache
    .

  3. On the Home tab, in the
    Environment section, select

    .

    The Set Path dialog box opens.

  4. Select Default.

    A small dialog box opens warning that you will lose your current path
    settings if you proceed. Select Yes if you decide
    to proceed.

Run ver to see if the toolbox is installed. If not, you
may need to reinstall this toolbox to use this function. For more information
about installing a toolbox, see How do I install additional toolboxes into an existing installation of
MATLAB.

Once ver shows your toolbox, run the following command to
see if you can find the function:

which -all <functionname>

replacing <functionname>
with the name of the function. If MATLAB finds your function file, it presents you with the path to it. You
can add that file to the path using the addpath function. If
it does not, make sure the necessary toolbox is installed, and that it is the
correct version.

Confirm The License Is Active

If you are unable to use a built-in function from a MATLAB toolbox and have confirmed that the toolbox is installed, make
sure that you have an active license for that toolbox. Use license to display currently active licenses.
For additional support for managing licenses, see Manage Your Licenses.

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

Проблема

Можно столкнуться со следующим сообщением об ошибке или чем-то подобным, при работе с функциями или переменными в MATLAB®:

Undefined function or variable 'x'.

Эти ошибки обычно указывают, что MATLAB не может найти конкретную переменную или файл программы MATLAB в текущем каталоге или на пути поиска файлов.

Возможные решения

Проверьте написание имени функции или имени переменной

Одна из наиболее распространенных причин пишет c ошибкой имя функции или имя переменной. Особенно с более длинными именами или именами, содержащими похожие символы (такие как буква l и цифра “один”), легко сделать ошибки и трудно обнаружить их.

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

Undefined function or variable 'accumArray'.
 
Did you mean:
>> accumarray

Когда это произойдет, нажмите Enter, чтобы выполнить предложенную команду или Esc, чтобы отклонить его.

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

Методы объекта обычно называются с помощью синтаксиса функций: например, method(object,inputs). В качестве альтернативы они могут быть названы с помощью записи через точку: например, object.method(inputs). Одна распространенная ошибка должна смешать эти синтаксисы. Например, вы можете вызвать метод с помощью синтаксиса функций, но обеспечить входные параметры после синтаксиса записи через точку и не учесть объект как вход: например, method(inputs). Чтобы избежать это, при вызове метода объекта, убеждается, что вы задаете объект сначала, или через первый вход синтаксиса функций или через первый идентификатор записи через точку.

Убедитесь, что имя функции совпадает с именем файла

Когда вы пишете функцию, вы задаете ее имя, когда вы пишете ее функциональную линию определения. Это имя должно всегда совпадать с именем файла, в котором она сохранена. Например, если вы создаете функцию с именем curveplot,

function curveplot(xVal, yVal)
     - program code -

затем необходимо назвать файл, содержащий эту функцию curveplot.m. Если вы создаете a pcode файл для функции, затем назовите тот файл curveplot.p. В случае конфликтной функции и имен файлов, имя файла заменяет имя, данное функции. В этом примере, если вы сохраняете curveplot функционируйте в файл с именем curveplotfunction.m, то попытка обратиться к функции по имени будет неудачной:

curveplot
Undefined function or variable 'curveplot'.

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

Чтобы Определить местоположение файла, который задает эту функцию, используйте утилиту Find Files MATLAB можно следующим образом:

  1. На вкладке Home, в разделе File, нажимают
    Find Files.

  2. Под введите имя функции.

  3. Нажмите кнопку Find

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

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

Если вы не знаете, какой тулбокс содержит необходимую функцию, обратитесь к поиску по функциям в https://www.mathworks.com/help. Имя тулбокса появляется наверху страницы ссылки на функцию. В качестве альтернативы для шагов, чтобы идентифицировать тулбоксы, от которых зависит функция, смотрите, Идентификация программных зависимостей.

Если вы знаете, какому тулбоксу функция принадлежит, используйте ver функция, чтобы видеть, какие тулбоксы установлены в системе, от которой вы запускаете MATLAB. ver функционируйте отображает список всех в настоящее время установленных продуктов MathWorks®. Если можно определить местоположение тулбокса, вам нужно в выводе, отображенном ver, затем тулбокс установлен. Если вы не можете, необходимо установить его для того, чтобы использовать его. Если вы не можете, необходимо установить его для того, чтобы использовать его. Для справки с установкой Продуктов Mathworks смотрите Установку и Лицензирование.

Проверьте путь, используемый к тулбоксу функции доступа

Совет

Если у вас будет пользовательский путь к файлу, этот шаг удалит его.

Путь поиска файлов MATLAB является подмножеством всех папок в файловой системе. MATLAB использует путь поиска файлов, чтобы определить местоположение файлов, используемых с Продуктами Mathworks эффективно. Для получения дополнительной информации смотрите то, Что Путь поиска файлов MATLAB?.

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

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

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

    Диалоговое окно Preference появляется.

  2. На странице > выберите Update Toolbox Path Cache.

  3. На вкладке Home, в разделе Environment, выбирают
    .

    Диалоговое окно Set Path открывается.

  4. Выберите Default.

    Маленькое диалоговое окно открывает предупреждение, что вы потеряете свои текущие настройки пути, если вы продолжите. Выберите Yes, если вы решаете продолжить.

Запущенный ver видеть, установлен ли тулбокс. В противном случае вы, возможно, должны переустановить этот тулбокс, чтобы использовать эту функцию. Для получения дополнительной информации о том, чтобы установить тулбокс, смотрите, Как я установил дополнительные тулбоксы в существующую установку MATLAB.

Однажды ver показывает ваш тулбокс, запустите следующую команду, чтобы видеть, можно ли найти функцию:

which -all <functionname>

заменяя <functionname> именем функции. Если MATLAB находит ваш файл функции, он дарит вам путь к нему. Можно добавить что файл в путь с помощью addpath функция. Если это не делает, убедитесь, что необходимый тулбокс установлен, и что это – правильная версия.

Подтвердите, что лицензия активна

Если вы не можете использовать встроенную функцию от тулбокса MATLAB и подтвердили, что тулбокс установлен, убедитесь, что у вас есть активная лицензия на тот тулбокс. Используйте license отобразить в настоящее время активные лицензии. Для дополнительной поддержки лицензий управления смотрите, Управляют Вашими Лицензиями.

There are multiple approaches passing constants to MATLAB functions

Defining variables as global is a simple solution.
Using global makes the variable “visible” to all functions and scripts. The downside of using global, is that it’s not extendable, and prevents code reuse.
From academic software engineering perspective, you shouldn’t use global variables at all. Assuming your code is used for solving a specific problem and not going to be extended or reused, using global is permitted.

Using global:
Declare the constants as global before initialization:

global K g
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2

Declare the variables as global in any function that uses them:

function v1=velocity1(f)
    global K g
    v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end

Using nested functions:
Instead of using global, you can use “nested functions” approach – an inner function can access the variables of an outer function.
Define your main script as a function, and velocity1 as an inner function:

function main()
%main is the outer function, and velocity1 is an inner function

K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
h=1;L=3;D=4;

f1= 2; %(value obtained from external function)  
v1=velocity1(f1);

    %Inner function:
    function v1=velocity1(f)
        v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
    end
end

Passing a struct of parameters to the function:
A common solution is MATLAB is passing a struct with constant parameters to all functions that uses them:

param.K=0.5; % minor loss coefficient (square edged)
param.g=9.8; % gravity in m/s2
param.h=1;param.L=3;param.D=4;

f1= 2; %(value obtained from external function)  
v1=velocity1(f1, param);

function v1=velocity1(f, par)
    K = par.K;
    g = par.g;
    h=par.h;L=par.L;D=par.D;
    v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end

There are other approaches, but I can’t list them all…

Сообщения об ошибках и исправление ошибок

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

Рассмотрим еще
ряд примеров.

Введем, к примеру,
ошибочное выражение » sqr(2)

и нажмем клавишу
ENTER. Система сообщит об ошибке:

???
Undefined function or variable ‘sqr’.

Это сообщение
говорит о том, что не определена переменная
или функция, и указывает, какая именно
— sqr. В данном случае, разумеется, можно
просто набрать правильное выражение.
Однако в случае громоздкого выражения
лучше воспользоваться редактором. Для
этого достаточно нажать клавишу вниз
для
перелистывания предыдущих строк. В
результате в строке ввода появится
выражение » sqr(2)
с курсором в его конце.
В версии MATLAB 6 можно теперь нажать клавишу
Tab. Система введет подсказку, анализируя
уже введенные символы. Если вариантов
несколько, клавишу Tab придется нажать
еще раз. Из предложенных системой трех
операторов выбираем sqrt. Теперь с помощью
клавиши вниз вновь выбираем нужную
строку и, пользуясь клавишей влево,
устанавливаем курсор после буквы r.
Теперь нажмем клавишу вверх, а затем
клавишу ENTER. Выражение примет следующий
вид:
»
sqrt(2)

ans=
1.4142

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

»
hsin(1)

???
Undefined function or variable ‘hsin’.

»
sinh(1)

ans=
1.1752

В этом примере мы
забыли, какое имя имеет внешняя функция,
вычисляющая гиперболический синус.
Система подсказала, что функция или
переменная с именем hsin не определена
ни как внутренняя, ни как m-функция.

Зато далее мы
видим, что функция с именем sinh есть в
составе функций системы MATLAB — она задана
в виде М-функции.

Между тем в последнем
примере мы не давали системе никаких
указаний на то, что следует искать именно
внешнюю функцию. И это вычисление прошло
так же просто, как вычисление встроенной
функции, такой как sin.

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

Иногда в ходе
вывода результатов вычислений появляется
сокращение NaN (от слов Not a Number — не число).
Оно обозначает неопределенность,
например вида 0/0 или Inf/Inf, где Inf —
системная переменная со значением
машинной бесконечности. Могут появляться
и различные предупреждения об ошибках
(на английском языке). Например, при
делении на 0 конечного/ числа появляется
предупреждение «Warning: Devide by Zero.» («Внимание:
Деление на ноль»).

Вообще говоря, в
MATLAB надо отличать предупреждение
об ошибке
от сообщения
о ней.
Предупреждения
(обычно после
слова Warning) не останавливают вычисления
и лишь предупреждают пользователя о
том, что диагностируемая ошибка способна
повлиять на ход вычислений. Сообщение
об ошибке
(после знаков ???) останавливает вычисления.

Соседние файлы в папке Matlab

  • #
  • #

    20.02.201635.74 Mб80Инженерные расчеты в Mathcad Макаров 2005.djvu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function out=hukuhara()
%исходные данные%
t_0=0; %начальный момент времени
t_1=1; %конечный момент времени
n=10; %на сколько частей делим промежуток [t_0,t_1]
delta=(t_1-t_0)/n;
m=24; %сколько будет углов гамма для вычисления пси
A=[1 0.1;0 1]; %матрица системы
c=[1 0]; %центр начального множества
 
%начальная инициализация%
i=1;
for gamma=0:(2*pi/m):(2*pi)
    psi(1,i)=cos(gamma);
    psi(2,i)=sin(gamma);
    C_X(i,1)=norm(psi(:,1)); % опорная функция диф. ур. с производной Хукухары в начальный момент времени
    C_F(i)=norm(psi(:,i))+c*psi(:,i); %опорная функция управления
    i=i+1;
end
kol=i-1;
 
%решение дифференциального уравнения с производной Хукухары%
for k=1:n
    for i=1:kol
        psi1=A'*psi(:,i)/norm(A'*psi(:,i));
        min_norma=norm(psi1-psi(:,1));
        min=1;
        for j=2:kol
            if min_norma<norm(psi1-psi(:,j))
               min_norma=norm(psi1-psi(:,j));
               min=j;
            end
    end
    C_AX(i)=C_X(min,k)*norm(A'*psi(:,i));
    C_X(i,k+1)=C_X(i,k)+delta*(C_AX(i)+C_F(i));
end
end
%описанный многоугольник%
for k=i:n
    for i=1:kol-1
        AA=[psi(1,i) psi(2,i); psi(1,i+1) psi(2,i+1)];
        FF=[C_X(i,k); C_X(i+1,k)];
        X(:,i,k)=inv(AA)*FF;
    end
    X(:,kol,k)=X(:,kol-1,k);
    X(:,kol+1,k)=X(:,1,k);
end
%построение графика%
for k=1:n
    for j=1:kol+1
        xx((k-1)*(kol+1)+j)=X(1,j,k);
        yy((k-1)*(kol+1)+j)=X(2,j,k);
        time((k-1)*(kol+1)+j)=t_0+(k-1)*delta;
    end
end
plot3(time,xx,yy);

Добавить комментарий