MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 3. Программирование в среде Matlab 5

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

3.7. Ошибки и предупреждения

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

Использование функций eval и lasterr. Основные средства обработки ошибок в системе MATLAB основаны на двух функциях:

  • функция eval позволяет не только выполнить основную функцию, но и определить вспомогательную, которая будет выполняться при озникновении шибки;
  • функция lasterr возвращает строку, сгенерированную системой MATLAB и содержащую последнюю ошибку.

Функция eval позволяет обработать ошибки, используя при обращении к ней два аргумента eval('try', 'catch'). Здесь 'try' - строка, содержащая исполняемое выражение, а 'catch’ - строка, содержащая обращение к функции обработки ошибки или ошибок.

Если операция, определенная строкой 'try', выполняется правильно, то функция eval просто возвращает результат; если же генерируется ошибка, то функция обработки ошибок, указанная в строке 'catch', определяет ошибку, генерируемую строкой 'try', и выполняет действия, которые позволяют избежать этой ошибки.

Функция eval('try', 'catch') особенно полезна в связке с функцией lasterr. Функция lasterr возвращает строку, содержащую последнее сообщение об ошибке. Применяя функцию lasterr внутри функции обработки ошибок, можно перехватить и проанализировать сообщение об ошибке, сгенерированное выполняемой функцией.

Пример
Следующая М-функция catch(A, B) для обработки ошибок использует встроенную функцию lasterr, чтобы проверить сообщение об ошибке, которая возникает из-за несогласованности размеров операндов. Если возникает ошибка, то программа уменьшает размеры одной из матриц:

                function C = catch(A, B)
                l = lasterr;
                j = findstr(l, 'Inner matrix dimensions');
                if (~isempty(j))
                     [m, n] = size(A)
                     [p, q] = size(B)
                     if (n>p)
                      A(:, p+1:n) = []
                    else if (n < p)
                      B(n+1:p, :) = []
                    end
                    C = A*B;
                else
                    C = 0;
                end

Использование функции eval с двумя аргументами, одним из которых является функция catch, показано ниже:

               clear
               A = [1 2 3; 6 7 2; 0 1 5];
               B = [9 5 6; 0 4 9];
               eval('A*B','catch(A, B)')

               m =    3
               n =     3
               p =     2
               q =     3
               A =

1 2
6 7
0 1

              ans =

9 13 24
54 58 99
0 4 9

Вывод на экран ошибок и предупреждающих сообщений. Для вывода на экран терминала информации об ошибке предназначены функции error и fprintf. Функция вывода сообщения об ошибке имеет следующий синтаксис:

          error('<сообщение об ошибке>')

Если эта функция ошибки вызывается внутри М-файла, то ошибка отображается в текущей строке, а выполнение М-файла прекращается.

Пример
       Допустим, что в текст М-файла myfile.m включено условие
              if n < 1
                 error('n должно быть больше или равно 1.')
              end

Для n, равного 0, следующий текст появляется на экране, а выполнение M-файла прекратится:
           ??? Error using ==> myfile
            n должно быть больше или равно 1.

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

                warning('<строка_предупреждения>').

Пример

            n = 0;
            if n < 1
               warning('n должно быть больше или равно 1.')
           end

          Warning: n должно быть больше или равно 1.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика