1.8 Сообщения об ошибках и их исправление
При обнаружении ошибок в выражениях или командах 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 = .
Yandex.RTB R-A-252273-3- Основы работы и программирования, компьютерная математика Учебный курс
- Isbn ооо «Харвест», 2008
- Предисловие
- Введение
- Глава 1 знакомство с matlab и простейшие вычисления
- 1.1. Рабочая средаMatlab
- 1.2. Арифметические вычисления
- 1.3. Вещественные числа
- 1.4. Форматы вывода результата вычислений
- 1.5 Комплексные числа
- 1.6 Векторы и матрицы
- 1.7 Встроенные функции. Функции, задаваемые пользователем
- 1.8 Сообщения об ошибках и их исправление
- 1.9 Просмотр и сохранение переменных
- 1.10 Матричные и поэлементные операции над векторами и матрицами
- 1.11 Решение систем линейных уравнений
- Вопросы для самопроверки
- Глава 2 работа с массивами
- 2.1 Создание векторов и матриц
- 2.2 Применение команд обработки данных к векторам и матрицам
- 2.3 Создание специальных матриц
- 2.4 Создание новых массивов на основе существующих
- 2.5 Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры
- Вопросы для самопроверки
- Глава 3 м-файлы
- 3.1 Файл-программы
- 3.2 Файл-функции
- Вопросы для самопроверки
- Глава 4 программирование
- 4.1 Операторы отношения и логические операторы
- 4.2 Операторы цикла
- 4.3 Операторы ветвления
- 4.4 Оператор переключения switch
- 4.5 Оператор прерывания цикла break
- 4.6 Пример сравнения быстродействия матричных и скалярных операций
- Вопросы для самопроверки
- Глава 5 высокоуровневая графика
- 5.1 2D графика
- 5.1.1 Графики в линейном масштабе
- 5.2 Специальные виды 2d - графиков
- 5.2.1 Представление функции в виде дискретных отсчетов
- 5.2.2 Лестничные графики
- 5.2.3 Графики с указанием погрешности
- 5.2.4 Графики в логарифмическом и полулогарифмическом масштабах
- 5.2.5 Графики параметрических функций
- 5.3 3D графика
- 5.3.1 Линейчатые поверхности
- 5.3.2 Каркасные поверхности
- 5.3.3 Контурные графики
- 5.3.4 Сплошная освещенная поверхность
- 5.4 Оформление, экспорт и анимация
- 5.4.1 Оформление графиков
- 5.4.2 Сохранение и экспорт графиков
- 5.4.3 Анимация
- Вопросы для самопроверки
- Глава 6 прикладная численная математика
- 6.1 Операции с полиномами
- 6.2 Решение уравнений и их систем
- 6.3 Минимизация функции одной переменной
- 6.4 Минимизация функции нескольких переменных
- 6.5 Вычисление определенных интегралов
- 6.6 Решение дифференциальных уравнений
- 6.7 Аппроксимация и интерполяция данных
- 6.8 Интерполяция двумерных и многомерных данных
- Вопросы для самопроверки
- Глава 7 символьные вычисления
- 7.1 Символьные переменные, константы и выражения
- 7.2 Вычисления с использованием арифметики произвольной точности
- 7.3 Команды упрощения выражений – simplify, simple
- 7.4 Команда расширения выражений – expand
- 7.5 Разложение выражений на простые множители – команда factor
- 7.6 Приведение подобных членов – команда collect
- 7.7 Обеспечение подстановок – команда subs
- 7.8 Вычисление пределов – команда limit
- 7.9 Вычисление производных – команда diff
- 7.10 Вычисление интегралов – команда int
- 7.11 Разложение в ряд Тейлора – команда taylor
- 7.12 Вычисление суммы ряда – команда symsum
- 7.13 Решение уравнений и их систем – команда solve
- 7.14 Решение дифференциальных уравнений – команда dsolve
- 7.15 Прямое и обратное преобразования Лапласа – команды laplace,ilaplace
- 7.16 Графики символьных функций – команды ezplot, ezpolar
- 7.17 Прямой доступ к ядру системы Maple – командаmaple
- 7.18 Разложение рациональной дроби на сумму простейших дробей
- 7.19 Интерполяционный полином Лагранжа
- 7.20 Решение неравенств и систем неравенств
- 7.21 Разложение в ряд Тейлора функции нескольких переменных
- 7.22 Решение дифференциальных уравнений с помощью степенных рядов
- 7.23 Решение тригонометрических уравнений
- Вопросы для самопроверки
- Приложения Приложение 1. Справочная система matlab
- Приложение 2. Знакомство с пакетами расширения системыMatlab
- Приложение 3. Задания для самостоятельной работы
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Литература