Как исправить ошибку в матлабе

Main Content

Note

As of version 7.5, MATLAB® supports error handling that
is based on the MException class. Calling rethrow with
a structure argument, as described on this page, is now replaced by
calling rethrow with an MException object, as described
on the reference page for rethrow. rethrow called with
a structure input will be removed in a future version.

Syntax

rethrow(errorStruct)

Description

rethrow(errorStruct)
reissues the error specified by errorStruct. The
currently running function terminates and control returns to the keyboard
(or to any enclosing catch block). The errorStruct argument
must be a MATLAB structure containing at least the message and identifier fields:

Fieldname

Description

message

Text of the error message

identifier

Identifier for the error

stack

Information about the error from the program stack

For information about error identifiers, see MException.

Examples

rethrow is usually used in conjunction with try, catch statements
to reissue an error from a catch block after performing catch-related
operations. For example,

try
   do_something
catch
   do_cleanup
   rethrow(previous_error)
end

Tips

The errorStruct input can contain the field stack,
identical in format to the output of the dbstack command.
If the stack field is present, the stack of the
rethrown error will be set to that value. Otherwise, the stack will
be set to the line at which the rethrow occurs.

Extended Capabilities

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

This function fully supports thread-based environments. For
more information, see Run MATLAB Functions in Thread-Based Environment.

Version History

Introduced before R2006a

Main Content

Generate, catch, and respond to warnings and errors

To make your code more robust, check for edge cases and problematic
conditions. The simplest approach is to use an if or
switch statement to check for a specific condition,
and then issue an error or warning. try/catch statements
allow you to catch and respond to any error.

MATLAB Language Syntax

try, catch Execute statements and catch resulting errors

Functions

error Throw error and display message
warning Display warning message
lastwarn Last warning message
assert Throw error if condition false
onCleanup Cleanup tasks upon function completion

Topics

  • Issue Warnings and Errors

    To flag unexpected conditions when running a program, issue a warning. To flag
    fatal problems within the program, throw an error. Unlike warnings, errors halt
    the execution of a program.

  • Suppress Warnings

    Your program might issue warnings that do not always adversely affect
    execution. To avoid confusion, you can hide warning messages during execution by
    changing their states from 'on' to
    'off'.

  • Restore Warnings

    You can save the warning current states, modify warning states, and restore
    the original warning states. This technique is useful if you temporarily turn
    off some warnings and later reinstate the original settings.

  • Change How Warnings Display

    You can control how warnings appear in MATLAB®, including the display of warning suppression information and
    stack traces.

  • Use try/catch to Handle Errors

    Use a try/catch statement to execute code after your
    program encounters an error.

  • Clean Up When Functions Complete

    It is a good programming practice to leave your program environment in a clean
    state that does not interfere with any other program code.

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

Пример
предупреждения:

>>
sin(0)/0

Warning:
Divide
by
zero.

ans =

NaN

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

>>
sqr(2)

???
Undefined function or variable ‘sqr’.

Это
сообщение об ошибке говорит о том (на
английском языке), что не определена
функция или переменная и указывает на
sqr.

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

Существует несколько
способов возврата в строку ввода ранее
введенных команд.

Первый
способ

– с помощью клавиш <↑>
и <↓>
(см. разд. 1.2).

При
вычислении значения обнаружена
синтаксическая
ошибка:

не определена функция sqr.
Клавишей <↑> вернем команду >>
sqr(2) в командную строку. Отредактируем
ее: после sqr
вставим t
и нажмем клавишу <Enter>:

>> sqrt(2)

ans =

1.4142

Второй
способ

– копирование из окна Command
History.

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

Если
в окне Command
History
дважды щелкнуть левой кнопкой мыши на
какой — либо команде, эта команда будет
выполнена. Это равнозначно вводу данной
команды в командное окно и последующему
нажатию клавиши <Enter>
(рис. 1.4).

Рис. 1.4

Если
щелкнуть на какой — либо команде окна
Command
History
левой
кнопкой мыши, то данная команда становится
текущей (на синем фоне). Можно выделить
нужную последовательность команд при
помощи комбинации клавиш <Shift>+<↑>,
<
Shift>+<↓>.
При щелчке правой кнопкой мыши на
выделенной области окна Command
History
появляется
всплывающее меню. Выбор пункта Copy
приводит к копированию выделенной
последовательности в буфер обмена
Windows.
При щелчке правой кнопкой мыши на области
окна Command
Window
появляется всплывающее меню. Выбор
пункта Paste
приводит к вставке скопированной
последовательности команд в командную
строку. Весь вставленный в командную
строку набор команд отправляется на
выполнение нажатием клавиши <Enter>.

До
нажатия клавиши <Enter>
содержимое набора можно редактировать,
используя обычные приемы редактирования,
общие для Windows
— приложений, в том числе и с помощью
мыши. Можно вносить в команды необходимые
изменения, удалять лишние команды и
добавлять новые. При редактировании
клавиши <↑>
и
<↓>

могут использоваться для перемещения
между строками набора.

Третий
способ

– копирование из содержимого текстового
поля рабочего окна.

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

При
вычислениях любое арифметическое
выражение набирается с клавиатуры в
командной строке. Редактор MATLAB укажет
на синтаксические ошибки. Но он не
обнаружит так называемые семантические
ошибки
,
когда, например, пользователь ошибочно
заменит знаки операций <+> на <–>
или неверной расстановкой скобок изменит
общий порядок выполнения операций и т.
д.

MATLAB
совместно с пакетом ToolBox
Symbolic
Math
(Глава 7) предоставляет возможность
визуального контроля введенного
выражения.

Пусть требуется
вычислить значение выражения

F=

при
x
= 0,1,
y
= 0,2
.

Введем
значения переменных x
и y.
Наберем с клавиатуры арифметическое
выражение F
и вычислим его значение, нажав клавишу
<Enter>.
Редактор MATLAB синтаксических ошибок
ввода не обнаружил. В результате получим
F
=

7,2111
(рис. 1.5).

В
третьей командной строке редактируется
предыдущая команда (<↑>)
для придания арифметическому выражению
F
статуса символьного с помощью команды
sym
(разд.
7.1). Выведенное в командное окно символьное
выражение F
синтаксически совпадает с арифметическим.

Рис. 1.5

Далее
команда pretty(F)
(см.
разд. 7.1) выводит в командное окно
символьное выражение F
в виде, близком к математической формуле.
Выведенная и исходная формулы не
совпадают. Предполагаемая ошибка ввода
– знаменатель исходной дроби не заключен
в скобки.

В
пятой командной строке редактируется
третья команда (<↑↑>)
для устранения ошибки ввода.

Затем
команда pretty(F)
отображает в командном окне исправленное
выражение. Теперь выведенная формула
совпадает с исходной.

В седьмой командной
строке редактируется пятая команда
(<↑↑>) для придания исправленному
символьному выражению статуса
арифметического. Седьмая команда
вычисляет правильный результат F =— 2,6904.

Иногда появляется
совершенно неожиданный или явно
неправильный результат. Так, если вы
попытаетесь вычислить приx
= -8
, набирая

>> x=-8;r=x^(1/3)

r=

1.0000 + 1.7321i

ответ, который система
MATLABсоздает, не похож на
ожидаемый результат-2. Тем не менее,
полученный результат является кубическим
корнем из-8, что подтверждается
возведением этого результата в куб:

>> r^3

ans =

-8.0000 + 0.0000i

Дело в том, что
многозначная функция имеет в комплексной
плоскости три ветви, а уравнение x3
= -8
– три разных значения корня:

>> solve(‘x^3=-8’)

ans =

[ -2]

[ 1-i*3^(1/2)]

[ 1+i*3^(1/2)]

Система MATLABвоспринимает для отрицательногоxкак значение

.

Поэтому для получения
ожидаемого результата при вычислении
, x = -8, надо набирать

>> x=-8;r=sign(x)*abs(x)^(1/3)

r=

-2

Это обстоятельство
надо обязательно учитывать, например,
при построении графика функции y
=
.

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

  • #
  • #

Обзор

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

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

То, когда MATLAB обнаруживает серьезный отказ в команде или программе, это запускается, это собирает информацию о том, что происходило во время ошибки, отображает сообщение, чтобы помочь пользователю изучить то, что пошло не так, как надо и отключает команду или программу. Это называется throwing an exception. Можно получить исключение при вводе команд в командной строке MATLAB или при выполнении кода программы.

Получение исключения в командной строке

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

Определение отказа из сообщения об ошибке

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

Рассмотрение провального кода

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

surf

Error using surf (line 49)
Not enough input arguments.

Текст включает имя функции, которое выдало ошибку (surf, в этом случае), и показывает провальный номер строки в программном файле этой функции. Кликните по номеру строки; MATLAB открывает файл и располагает курсор в местоположении в файле где порожденная ошибка. Можно смочь определить причину ошибки путем исследования этой линии и кода, который предшествует ему.

Продвижение через код в отладчик

Можно использовать Отладчик MATLAB, чтобы продвинуться через провальный код. Кликните по подчеркнутому тексту ошибки, чтобы открыть файл в редакторе MATLAB в или около точки ошибки. Затем кликните по дефису в начале той линии, чтобы установить точку останова в том местоположении. Когда вы повторно выполняете свою программу, MATLAB приостанавливает выполнение в точке останова и позволяет вам продвинуться через код программы. Команда dbstop on error также полезно в нахождении точки ошибки.

См. документацию относительно Отладки Файлы кода MATLAB для получения дополнительной информации.

Получение исключения в коде программы

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

Некоторые вещи, которые вы можете хотеть сделать в блоке выгоды:

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

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

  • Попытайтесь выполнить задачу под рукой некоторым другим способом.

  • Очистите любые нежелательные побочные эффекты ошибки.

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

Используйте MException возразите, чтобы получить доступ к информации об исключении в вашей программе. Для получения дополнительной информации смотрите, Отвечают на Исключение.

Генерация нового исключения

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

  • Сохраняет информацию о том, что пошло не так, как надо и что код выполнял во время ошибки.

  • Собирает любую другую уместную информацию об ошибке.

  • Дает MATLAB команду выдавать исключение.

Используйте MException возразите, чтобы получить информацию об ошибке. Для получения дополнительной информации смотрите, Выдают Исключение.

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Error Handling is the approach of creating a program that handles the exceptions thrown by different conditions without crashing the program. For example, consider the case when you are multiplying two matrices of orders (m x n) and (m x n). Now, anyone who has done elementary linear algebra knows that this multiplication is not feasible because the number of columns in matrix 1 is not equal to the number of rows in matrix 2. Computers are also aware of the same fact and any programming language will through an Error/Exception in this scenario. To avoid crashing of the program, the programmer inserts a condition that checks for the same scenario. This is error handling. Now we will see how Error Handling is done in MATLAB.

    Using if-else Ladder:

    A trivial way of handling errors is by using the if-else conditional. Consider the following example, where we create a function to calculate the combination of two positive integers. Now, the only error possible in this function is when k>n. So, let us see how MATLAB responds to the case.

    Example 1:

    Matlab

    comb(5,9)    

    function c = comb(n,k)

        c=factorial(n)/(factorial(k)*factorial(n-k));

    end

    Output:

    MATLAB gives following error.

    To avoid this error, we can simply insert an if-else conditional to check whether k<n or not. If not then, the program will calculate the combination of (k, n).

    Example 2:

    Matlab

    n=5

    k=9

    if(n>k)

        comb(n,k)

    else

        comb(k,n)

    end

    function c = comb(n,k)

    c=factorial(n)/(factorial(k)*factorial(n-k));

    end

    Output:

    This will calculate the combination of (9,5):

    The Try-Catch Blocks:

    A better approach for doing the same is by using the try-catch block. Try block takes the statements that might throw an error/exception and when encountered, all the remaining statements are skipped, and the program moves to the catch block for the handled error/exception.

    Example 3:

    Matlab

    n=5;

    k=9;

    try

        comb(n,k)

    catch

        comb(k,n)

    end

    function c = comb(n,k)

    c=factorial(n)/(factorial(k)*factorial(n-k));

    end

    Output:

    The benefit of using try-catch block over the if-else conditional is that the latter can only handle exceptions which are known before compilation. On the other hand, try-catch can handle exceptions that are not known in advanced.

    Last Updated :
    11 Oct, 2022

    Like Article

    Save Article

    Понравилась статья? Поделить с друзьями:
  • Как исправить ошибку в майнкрафте opengl 1282
  • Как исправить ошибку в матлабе
  • Как исправить ошибку в майнкрафте no further information
  • Как исправить ошибку в маркировке товара
  • Как исправить ошибку в майнкрафте io netty handler codec