В помощь математикам: обзор MATLAB
Те, кто имеет дело с высшей математикой, прекрасно знают, с какими математическими «чудовищами» иногда приходится сталкиваться. Например, на вычисление какого-нибудь гигантского тройного интеграла можно потратить настоящую уйму времени, душевных сил и не восстанавливающихся нервных клеток. Конечно, это очень интересно, бросить вызов интегралу, и взять его. Но, что делать, если вместо этого интеграл грозиться взять Вас? Или, что еще хуже, кубический трехчлен вышел из-под контроля и разбушевался? Такого и врагу не пожелаешь.

Раньше вариантов было всего два: плюнуть на все и пойти гулять или вступить в многочасовую схватку с интегралом. Ну, кому многочасовую, кому многоминутную – кто как учился. Но суть не в этом. Двадцатый век и неумолимо движущийся прогресс предлагают нам третий способ, а именно позволяют взять самый сложный интеграл «по-быстрому». То же самое касается решения всевозможных уравнений, построения графиков функций в виде кубических гиперболоидов и т.д.
Для таких неординарных, но периодически случающихся среди студентов ситуаций существует мощное математическое оружие. Встречайте, кто еще не знает – пакет программ MATLAB.
Матлаб и решит уравнение, и аппроксимирует, и построит график функции. Понимаете, что это значит, друзья?
Это значит, что MATLAB – один из мощнейших на сегодняшний день пакетов обработки данных. Название расшифровывается как Matrix Laboratory. Матричная Лаборатория, если по-русски. Возможности программы покрывают практически все области математики. Так, пользуясь матлабом, Вы сможете:
- Производить всевозможные операции над матрицами, решать линейные уравнения, работать с векторами;
- Вычислять корни многочленов любой степени, производить операции над многочленами, дифференцировать, экстраполировать и интерполировать кривые, строить графики любых функций;
- Проводить статистический анализ данных с использованием цифровой фильтрации, статистической регрессии;
- Решать дифференциальные уравнения. В частных производных, линейных, нелинейных, с граничными условиями – не важно, матлаб все решит;
- Выполнять операции целочисленной арифметики.

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

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

Основной рабочий файл программы – М-файл. Это бесконечный текстовый файл, и именно в нем происходит непосредственно программирование вычислений. Кстати, пусть Вас не пугает это слово – для того, чтобы работать в MATLAB, вовсе не нужно быть профессиональным программистом.
М-файлы делятся на
- М-сценарии. М-сценарий – самый простой тип M-файла, у которого отсутствуют входные и выходные аргументы. Данный файл используется для автоматизации многократно повторяемых вычислений.
- M-функции. М-функции – это М-файлы, допускающие наличие входных и выходных аргументов.
Для того чтобы наглядно показать, как происходит работа в MATLAB, приведем ниже пример создания функции в матлабе. Данная функция будет вычислять среднее значение вектора.
function y = average (x)
% AVERAGE Среднее значение элементов вектора.
% AVERAGE(X), где X — вектор. Вычисляет среднее значение элементов вектора.
% Если входной аргумент не является вектором, генерируется ошибка.
[m,n] = size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error(‘Входной массив должен быть вектором’)
end
y =sum(x)/length(x); % Собственно вычисление
Строка определения функции сообщает системе MATLAB, что файл является М-функцией, а также определяет список входных аргументов. Так, строка определения функции average имеет вид:
function y = average(x)
Где:
- function — ключевое слово, определяющее М-функцию;
- y — выходной аргумент;
- average — имя функции;
- x — входной аргумент.
Итак, чтобы написать функцию в матлабе, необходимо помнить, что каждая функция в системе MATLAB содержит строку определения функции, подобную приведенной.
Безусловно, такой мощный пакет нужен не только для того, чтобы облегчить жизнь студентам. В настоящее время MATLAB, с одной стороны, очень популярен среди специалистов многих научных и инженерных отраслей. С другой стороны, возможность работы с большими матрицами делает MATLAB незаменимым инструментом финансовых аналитиков, позволяющим решить намного больше задач, чем, к примеру, известный всем Excel. Подробнее о том, как сделать презентацию на компьютере вы можете прочитать в обзорной статье.
Недостатки работы с MATLAB

Какие есть трудности в работе с MATLAB? Трудность, пожалуй, всего одна. Но фундаментальная. Чтобы полностью раскрыть возможности MATLAB и с легкостью решать встающие перед Вами задачи, придется попотеть и сначала разобраться с самим матлабом (как создать файл, как создать функцию и др.). А это не так просто, ибо мощность и широкие возможности требуют жертв.
При всем желании нельзя сказать, что MATLAB – простая программа. Тем не менее, надеемся, все вышеперечисленное будет достаточным аргументом для того, чтобы взяться за ее освоение.
И напоследок. Если Вы не знаете, почему все в Вашей жизни пошло так, а не иначе, спросите об этом у матлаба. Просто наберите в командной строке “why” (почему). Он ответит. Попробуйте!
Теперь вы знаете возможности Матлаб. В области образования MATLAB часто используется в преподавании численных методов и линейной алгебры. Многим студентам не обойтись без него при обработке результатов эксперимента, проведенного в ходе лабораторной работы. Для быстрого и качественного освоения основ работы с MATLAB Вы всегда можете обратиться к нашим специалистам, в любой момент готовым ответить на любой Ваш вопрос.
Как представляется информация в системе matlab
Справочная информация. Начальные сведения о системе MATLAB
MATLAB — это высокопроизводительный язык для технических расчетов. Он включает в себя вычисления, визуализацию и программирование в удобной среде, где задачи и решения выражаются в форме, близкой к математической. Типичное использование MATLAB это:
— анализ данных, исследования и визуализация
— научная и инженерная графика
— разработка приложений, включая создание графического интерфейса
MATLAB — это интерактивная система, в которой основным элементом данных является массив. Это позволяет решать различные задачи, связанные с техническими вычислениями, особенно в которых используются матрицы и вектора, в несколько раз быстрее, чем при написании программ с использованием «скалярных» языков программирования, таких как Си или Фортран.
Слово MATLAB означает матричная лаборатория (matrix laboratory).
MATLAB был специально написан для обеспечения легкого доступа к UNPACK и EISPACK, которые представляют собой современные программные средства для матричных вычислений.
MATLAB развивался в течении нескольких лет, ориентируясь на различных пользователей. В университетской среде, он представлял собой стандартный инструмент для работы в различных областях математики, машиностроении и науки. В промышленности, MATLAB это инструмент для высокопродуктивных исследований, разработок и анализа данных.
В MATLAB важная роль отводится специализированным группам программ, называемых toolboxes. Они очень важны для большинства пользователей MATLAB, так как позволяют изучать и применять специализированные методы. Toolboxes — это всесторонняя коллекция функций MATLAB (М-файлов), которые позволяют решать частные классы задач. Toolboxes применяются для обработки сигналов, систем контроля, нейронных сетей, нечеткой логики, вэйвлетов, моделирования и т.д.
Система MATLAB состоит из пяти основных частей.
Язык MATLAB. Это язык матриц и массивов высокого уровня с управлением потоками, функциями, структурами данных, вводом-выводом и особенностями объектно-ориентированного программирования. Это позволяет как программировать в «небольшом масштабе» для быстрого создания черновых программ, так и в «большом» для создания больших и сложных приложений.
Среда MATLAB. Это набор инструментов и приспособлений, с которыми работает пользователь или программист MATLAB. Она включает в себя средства для управления переменными в рабочем пространстве MATLAB, вводом и выводом данных, а также создания, контроля и отладки М-файлов и приложений MATLAB.
Управляемая графика. Это графическая система MATLAB, которая включает в себя команды высокого уровня для визуализации двух- и трехмерных данных, обработки изображений, анимации и иллюстрированной графики. Она также включает в себя команды низкого уровня, позволяющие полностью редактировать внешний вид графики, также как при создании Графического Пользовательского Интерфейса (GUI) для MATLAB приложений.
Библиотека математических функций. Это обширная коллекция вычислительных алгоритмов от элементарных функций, таких как сумма, синус, косинус, комплексная арифметика, до более сложных, таких как обращение матриц, нахождение собственных значений, функции Бесселя, быстрое преобразование Фурье.
Программный интерфейс. Это библиотека, которая позволяет писать программы на Си и Фортране, которые взаимодействуют с MATLAB. Она включает средства для вызова программ из MATLAB (динамическая связь), вызывая MATLAB как вычислительный инструмент и для чтения-записи МАТ-файлов.
Список вопросов по курсу Компьютерное моделирование и проектирование 1. Как представляется информация в системе MatLab? 2. Как можно создать векторы
1 Список вопросов по курсу Компьютерное моделирование и проектирование. Как представляется информация в системе MatLab?. Как можно создать векторы в системе MatLab? 3. Какой вектор генерирует функция logspace? 4. Как можно создать матрицы в системе MatLab? 5. Какие вы знаете специальные функции для создания матриц? 6. Каким образом производится индексация массивов в системе MatLab, удаление, обнуление строк, столбцов? 7. Чем отличается определение почленных и матричных операций в системе MatLab? 8. Как получить транспонированный массив? Какие особенности есть при транспонировании массива комплексных чисел? 9. Как можно объединить матрицы? 0. Как создаются строковые константы?. Какие системные переменные и константы есть в системе MatLab?. Как вводится комментарий? 3. Как можно определить размер массива? 4. Каким образом можно создать структуру? 5. Какой оператор производит ввод информации с клавиатуры? 6. Какой выполняется оператор цикла с фиксированным числом повторений? 7. Какая причина окончания оператора цикла с предусловием? 8. Какой выполняется оператор if, switch? 9. Перечислить логические операторы и привести примеры их использования. 0. Какие команды требуются, чтобы записать информацию в файл?. Для чего используются М файлы?. Какие бывают типы М файлов? Чем они отличаются друг от друга? 3. Какие функции построения мерных графиков выводят огибающую графика? 4. Какая функция построения мерных графиков выводит дискретные отсчеты? 5. Чем являются входные и выходные аргументы для команды meshgrid? 6. Какие функции используются для построения 3 мерных графиков? 7. Как можно изменить цвет (стиль) 3 мерных графиков? 8. Какие функции используются для оформления графиков? 9. Какие есть дополнительные возможности для изменения графиков? 30. Какие есть режимы вывода графиков? 3. В чем заключается эффект Гиббса? 3. Какие функции MatLab используются для генерации одиночных импульсов? 33. Какие есть способы задания импульсов для функции pulstran? 34. Какие функции вычисляют ДПФ в MatLab? 35. Какие дополнительные функции используются для того, чтобы получить график преобразования Фурье и спектральную плотность мощности? 36. Для чего променяют БПФ к зашумленному сигналу? 37. Какие существуют классы данных (форматы) представления пикселов изображения? 38. Какие типы растровых изображений используются в пакете IPT? 39. С помощью какой функции можно получить информацию о размере, типе изображения? 40. С какими форматами графических файлов можно работать в системе MatLab? 4. С помощью каких функций можно прочитать изображение из файла на диске и записать изображение на диск? 4. Какие аргументы функции imshow изменяют контраст полутонового изображения при его выводе на экран? 43. Какие вы знаете функции преобразования типов изображений? 44. Каким образом осуществляется дискретизация сигнала?
2 45. Как выбирается величина шага дискретизации? 46. Каким образом осуществляется квантование сигнала? 47. Для чего используется функция quantiz? 48. Для чего используется функция blkproc? 49. Какая система является линейной и стационарной? 50. Каким система является линейной и стационарной? 5. Что является импульсной характеристики линейной системы? 5. Как можно получить импульсную характеристику в системе MatLab? 53. Как вычисляется частотная функция? 54. Как получить графики АЧХ и ФЧХ линейной системы в MatLab (в разных масштабах: логарифмическом, линейном)? 55. Какие типы фильтров вы знаете? 56. Какие особенности АЧХ фильтров Баттерворта, Чебышева первого и второго рода, эллиптического? 57. По какому принципу формируются название функций преобразования способов описания линейных цепей? 58. Какие типы фильтров создаѐт функция по формированию масок фильтров fspecial? 59. В чем заключается алгоритм двумерной свертки? 60. В каких функциях присутствует алгоритм двумерной свертки? 6. В чем отличие алгоритма медианной фильтрации от алгоритма фильтрации с помощью операции усреднения с порогом? 6. Какие типы шумов формирует функция по зашумлению изображений imnoise? 63. Для каких целей можно использовать функцию freqz? 64. Каким образом можно сформировать маску линейного фильтра по желаемой АЧХ? 65. Какая функция позволяет сформировать двумерный фильтр из одномерного? 66. Что обуславливает искажения изображения при его формировании? 67. В чем заключается задача построения восстанавливающей системы? 68. Какие функции использовались для моделирования размытия изображения и его восстановления в задании лабораторной работы? 69. Какие принципы лежат в основе построения фильтров Винера, гомоморфного фильтра Список задания по курсу Компьютерное моделирование и проектирование Задания по способам организации информации, элементам программирования и визуализации -D и 3-D графиков. Задание. Создать вектор-строку, если начальный элемент равен 0, конечный 4, шаг равен. Транспонировать строку в столбец. n n n n 3 n 4. Создать три вектора-строки из 5-ти элементов многочлена f [ x, x, x, x, x ] для n=5 и х=; x=3; x=4. Объединить эти строки в матрицу A(3 5). 3. Создать три вектора-столбца из 5-ти элементов арифметической прогрессии an a d( n ) для a = d=; a =7 d=; a =0 d=-. Объединить эти столбцы в матрицу B(5 3). 4. Создать матрицы размерностью 3 3: C — единиц; D — нулей; E — равномерно распределенных случайных чисел; F — нормально- распределенных случайных чисел 5. Транспонировать матрицу В и объединить с матрицей А в матрицу M (6 5) 6. Из матрицы A убрать вторую строку. 7. У матрицы В обнулить третью строку и убрать две последние строки. 8. Создать с помощью функции repmat матрицу, состоящую из 3 матриц В.
3 9. Создать символьные константы: — миру мир; введите матрицу, Ввести комментарий: использование интерактивного ввода. 0. Определить максимальное и минимальное значения матрицы F из пункта 4 двумя способами: с помощью специальной функции reshape и через цикл While.. В структуру, содержащую матрицы размерностью 3 3, в цикле ввести с клавиатуры три матрицы 4 вывести введенное содержимое матриц на экран. найти сумму элементов матрицы, если сумма меньше нуля, присвоить ей значение ноль, результат вывести на экран.. Сгенерировать матрицу случайных чисел размерностью 5 5. Найти сумму всех ее элементов. В зависимости от значения найденной суммы вывести на экран сообщение: ‘Результат положителен ‘ или ‘Результат отрицателен’. 3. Организовать цикл для повторного выполнения следующих действий: ввести с клавиатуры целое число в диапазоне от единицы до трех, в зависимости от введенного числа генерировать матрицу размерностью 3 3: для единицы единичную матрицу, для двойки нулевую, для тройки случайных чисел, распределенных по нормальному закону. При вводе других чисел выдать сообщение об ошибке. Полученную матрицу записать на диск. Окончание цикла по введению числа с клавиатуры предусмотреть введением символьной константы ‘ no’, при входе в цикл символьную константу задать равной ‘yes’. Задание. Построить на отрезке [-, -0.3 ] с шагом графики функций. f sin, f sin x x Первый график вывеси красной сплошной линией, а второй зеленой штрих-пунктирной линией с маркерными точками х. В этом же окне построить эти графики с помощью функции вывода графика дискретных отсчетов без затирания предыдущего результата.. Построить графики суточных температур : значения времени time = значения температуры 0 мая: tem= значения температуры мая: tem= Оформить графики заголовком ‘All temperature’, по оси х подписать ‘Time (hour)’, по оси у ‘ Temperature (С)’, в легенде ‘0 may’, ‘ may’ и разместить ее в нижнем левом углу. 3. Построить 3-х мерные графики функции z( x, y) 4 sin x cos.5 y ( x ) y ( y) на прямоугольной области x [,], y [0,] с шагом 0.05 всеми способами, рассмотренными в лабораторной работе, размещая их в отдельных областях окна. Названия команд, применяемых для построения графиков, включить в заголовки подграфиков. Задания по моделированию сигналов в системе MatLab Сформировать и вывести на экран затухающий гармонический сигнал A sin( f t+ ) с частотой дискретизации 5 кгц, вектор времени задать от до с шагом, равным обратной величине частоты дискретизации, амплитуда равна 4 вольта, частота гармонического сигнала.5кгц, начальная фаза гармонического сигнала 30 градусов, скорость затухания 00. Сформировать последовательности из 4-ти импульсов, имеющих форму одного периода функции cos. Длительность импульсов равна 70мс, частота его дискретизации 50гц.
4 Расстояние между центрами импульсов будет равным 70мс, а частота дискретизации выходного сигнала кгц. вектор времени для последовательности задать от 0 до 0.5 с шагом, равным обратной величине частоты дискретизации. Импульсы будут затухать с ростом номера. Вывести на экран. 3 Сформировать меандр сложением отдельных 6 гармоник, процесс получения отобразить на экране. 4 Сформировать меандр соответствующей функцией и вывести его график. 5 Сформировать одиночный прямоугольный импульса и его Фурье-образ. Частота дискретизации равна е3, вектор времени задать от 0 до 40е-3 с шагом, равным обратной величине частоты дискретизации, амплитуда равна 5 вольта, длительность импульса равна 0е-3. Выдать график прямоугольного импульса, (отлимитировать значения по оси у от 6 до 6 командой ylim([-6 6]), задаваемой после команды plot). Вывести сетку. Значения частоты для вывода Фурье преобразования задать f=000*(:4)/5; Спектральный график вывести с нулевой частотой, находящейся в центре, для чего использовать соответствующую функцию. 6 Сформировать одиночный сигнал вида sin(x)/x и его СПМ. Вектор времени задать от 5 до 5 с шагом, равным 0.0. Значения частоты для вывода СПМ задать равными f=000 (:00)/5; Спектральный график вывести с нулевой частотой, находящейся в центре, для чего использовать соответствующую функцию. Полученный график отлимитировать: xlim([ ]); 7 Построить графики функции с разделяющимися переменными и их Фурье-преобразований: a) Z=rect(x) rect(y) b) Z=sinc(x) sinc(y) вектора x и y задать в диапазоне от до с шагом Задания по получению характеристик линейных систем Задание. Рассчитать выходной сигнал на выходе устройства с импульсной характеристикой, равной при входном сигнале Вывести его на экран. Очистить вектор с импульсной характеристикой и рассчитать ее, на основе заданного входного и вычисленного выходного сигналов, используя соответствующую функцию MatLab. Вывести дискретные отсчеты импульсной характеристики на экран.. Получить графики АЧХ и ФЧХ устройства со следующей функцией передачи: 0.S 0.3S H S 0.4S Построить линейную АЧХ и ФЧХ без лишних разрывов. 3. Рассчитать фильтры-прототипы Чебышева, эллиптический, задав следующие значения параметров: порядок фильтра n=5, величина пульсаций в полосе пропускания R p =0.5, величина пульсаций в полосе задерживания R s =0. Получить графики АЧХ и ФЧХ. 4. Рассчитать НЧ фильтр Чебышева ого рода 9 го порядка с частотой среза 300Гц, 50 максимальные пульсации в полосе пропускания 0.5дБ (частота дискретизации 000Гц) и построить его частотной характеристики. Вывести на один график групповую и фазовую задержку для этого фильтра. Пропустить через этот фильтр радиоимпульс с треугольной огибающей (использовать радиоимпульс из задания раздела ‘Групповая и фазовая задержка’), несущую частоту задать равной 0. Вывести на одном графике наложенные входной и выходной сигналы. Задания по фильтрации изображений Выполнить следующие действия:. Выполнить эквализацию палитрового изображения из файла Technlgy.bmp. Построить гистограммы исходного палитрового изображения и эквализированного изображения. Результат вывести в одно окно (в верхнем ряду изображения, под ними их гистограммы).
5 . Прочитать палитровое изображение из файла Earth.bmp, вывести на экран, преобразовать в полутоновое, добавить импульсный шум, отфильтровать зашумленное изображение медианной фильтрацией и обобщенным нелинейным фильтром. Зашумленное и отфильтрованные изображения вывести в одном окне для сравнения. Задание оформить в виде функции. В качестве входного аргумента передавать название файла с палитровым изображением. 3. Выполнить фильтрацию: а) Отфильтровать изображение с помощью масок кругового градиента. Ввод масок двумерных линейных фильтров, построение их АЧХ, фильтрацию изображения с их помощью и вывод результата выполнить в цикле. Маски двумерных линейных фильтров: север северо-восток восток юго- восток юг юго-запад запад северо- запад в) Отфильтровать изображение с помощью масок лапласиановских фильтров Прочитать палитровое изображение из файла Technlgy.bmp, вывести на экран, преобразовать в полутоновое. Получить маску оператора Превитт. Выполнить фильтрацию исходного полутонового фрагмента маской оператора Превитт отдельно по горизонтали и по вертикали и вместе на одном изображении; 5. Выполнить эквализацию полутонового изображения, полученного из палитрового изображения, хранящегося в файле earth.bmp. 6. Вывести АЧХ всех фильтров, создаваемых функцией по заданию масок предопределенного фильтра, в одном окне с заголовками для каждого фильтра. 7. Восстановить размытое изображения файла construc.bmp, обусловленное турбулентностью атмосферы, гомоморфным фильтром. 8. Создать М файл для демонстрации восстановления искажений изображения, обусловленных турбулентностью атмосферы и восстановление его фильтром Винера, инверсным или гомоморфным фильтром с возможностью задания файла изображения, коэффициента нерезкости и отношения сигнал/шум с клавиатуры.
МАТЕМАТИЧЕСКИЕ МЕТОДЫ И МОДЕЛИРОВАНИЕ В ОПТОТЕХНИКЕ
![]()
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «СИБИРСКАЯ ГОСУДАРСТВЕННАЯ ГЕОДЕЗИЧЕСКАЯ АКАДЕМИЯ»
Типы изображений и их представление в matlab
Изображения бывают векторными и растровыми. Векторным называется изображение, описанное в виде набора графических примитивов. Растровые же изображения представляют собой двумерный массив, элементы которого (пиксели) содержат информацию об их яркости и цвете. Обычно элементом изображения называется минимальная деталь изображения, внутри которой яркость и цвет считаются постоянными, т.е. внутри элемента неравномерность яркости и цвета уже не будут различаться глазом. В этом случае информация об изображении представляется в виде значений характеристик каждой точки изображения – пикселя (pixel – picture element) – наименьшей структурной единицы изображения. В качестве таких характеристик выступают яркость и цвет пикселя, а его порядковый номер в кадре дает информацию о его координате на экране.
Пиксель – наименьший логический элемент двумерного цифрового изображения в растровой графике. Пиксель представляет собой неделимый объект прямоугольной, обычно квадратной, или круглой формы, обладающий определённым цветом и яркостью. Растровое компьютерное изображение состоит из пикселей, расположенных по строкам и столбцам. В цифровой обработке используются обычно растровые изображения. Они в свою очередь делятся на типы: бинарные (черно-белые), полутоновые (в виде оттенков серого, grayscale), палитровые (индексированные), полноцветные.
Элементы бинарного изображения могут принимать только два значения – 0 или 1. Природа происхождения таких изображений может быть самой разнообразной. Но в большинстве случаев, они получаются в результате обработки полутоновых, палитровых или полноцветных изображений методами бинаризации с фиксированным или адаптивным порогом. Бинарные изображения имеют то преимущество, что они очень удобны при передаче данных.
Полутоновое изображение состоит из элементов, которые могут принимать одно из значений интенсивности какого-либо одного цвета. Обычно рассматривается смесь трех основных цветов и в этом случае изображение принимает вид оттенков серого (grayscale). Информация о яркости элементов изображения более приоритетна, поэтому такое представление изображения наиболее распространено, и оно чаще применяется в различных исследованиях. В большинстве случаев информация о яркости пикселя кодируется 8 битами, что определяет 256 уровней яркости.
В палитровых изображениях значение пикселей является ссылкой на ячейку карты цветов (палитры). Палитра представляет собой двумерный массив, в трех столбцах которого расположены интенсивности цветовых составляющих для определенного индекса.
Элементы полноцветных изображений непосредственно хранят информацию о яркостях цветовых составляющих (RGB). Для хранения полноцветных изображений требуется трехмерный массив, третий индекс которого определяет номер цвета для пикселя, определяемого первыми двумя индексами.
Выбор типа изображения зависит от решаемой задачи, от того, насколько полно и без потерь нужная информация может быть представлена данным типом изображения. Использование полноцветных изображений требует больших вычислительных затрат.
По умолчанию MATLAB работает с вещественными числами двойной точности (восемь байт для хранения числа типа double), а для работы с изображениями и сокращения требуемой памяти реализовано хранение данных также в виде однобайтных целых без знака (класс uint8). В зависимости от типа изображения они по-разному представляются в разных форматах. Информация об этом представлена в таблице.
Документация
Данные временного интервала состоят из одной или нескольких входных переменных u (t) и одна или несколько выходных переменных y (t) , произведенный в зависимости от времени. Если нет никакой входной переменной, смотрите Представление данных Timeseries.
Необходимо организовать данные о вводе/выводе временного интервала в iddata объект, который содержит данные в следующем формате:
Для single-input/single-output (SISO) данные значения выборочных данных должны удвоить вектор-столбцы с длинами, равными количеству выборок данных (измерения).
Для мультивхода/мультивыхода (MIMO) данные с входными параметрами Ню и Ny выходные параметры, и не уточнено количество выборок данных:
Входные данные должны быть матрицей нс ню
Выходные данные должны быть матрицей нс ny
Чтобы использовать данные временного интервала для идентификации, необходимо знать шаг расчета. Если вы работаете с однородно выборочными данными, используйте фактический шаг расчета из своего эксперимента. Каждое значение данных присвоено момент времени, который вычисляется со времени начала и шага расчета. Можно работать с неоднородно выборочными данными только в командной строке путем определения вектора моментов времени с помощью SamplingInstants свойство iddata , как описано в Построении Объекта iddata для Данных Временного интервала.
Для моделей непрерывного времени необходимо также знать, что входное междемонстрационное поведение, такое как нулевой порядок содержат и задержка первого порядка.
Для получения дополнительной информации об импортировании данных в MATLAB ® , см. Импорт и экспорт данных.
После того, как вы имеете переменные в рабочем пространстве MATLAB, импортируете их в приложение System Identification или создаете объект данных для работы в командной строке. Для получения дополнительной информации смотрите, Импортируют Данные Временного интервала во Временной и частотный диапазон Приложения и Представления Используя Объекты iddata.
Представление данных timeseries
Данные timeseries являются временным интервалом или данными частотной области, которые состоят из одних или нескольких выходных параметров y (t) без соответствующего входа. Для получения дополнительной информации о том, как получить идентификационные данные, смотрите Способы Получить Идентификационные данные.
Необходимо организовать данные timeseries в следующем формате:
Для single-input/single-output (SISO) данные значения выходных данных должны быть вектор-столбцом.
Для данных с Ny выходные параметры выход является матрицей нс ny , где не уточнено количество выборок выходных данных (измерения).
Чтобы использовать данные timeseries для идентификации, вам также нужен шаг расчета. Если вы работаете с однородно выборочными данными, используйте фактический шаг расчета из своего эксперимента. Каждое значение данных присвоено шаг расчета, который вычисляется со времени начала и шага расчета. Если вы работаете с неоднородно выборочными данными в командной строке, можно задать вектор моментов времени с помощью iddata SamplingInstants свойство, как описано в Построении Объекта iddata для Данных Временного интервала. Обратите внимание на то, что оценка модели не может быть выполнена с помощью неоднородно выборочных данных.
Для получения дополнительной информации об импортировании данных в рабочее пространство MATLAB, см. Импорт и экспорт данных.
После того, как вы имеете переменные в рабочем пространстве MATLAB, импортируете их в приложение System Identification или создаете объект данных для работы в командной строке. Для получения дополнительной информации смотрите, Импортируют Данные Временного интервала во Временной и частотный диапазон Приложения и Представления Используя Объекты iddata.
Для получения информации об оценке параметров модели timeseries смотрите Анализ Временных рядов.
Представление данных частотной области
Frequency-domain data состоит или из преобразованных сигналов временной области ввода и вывода или из системной частотной характеристики, произведенной в зависимости от частоты независимой переменной.
Представление Сигнала ввода/вывода частотного диапазона
Что ввод/вывод Частотного диапазона является Сигналом?. Данные частотной области являются преобразованием Фурье сигналов временной области ввода и вывода. Для сигналов непрерывного времени определяется следующим образом преобразование Фурье по целой оси времени:
Y ( i w ) = ∫ − ∞ ∞ y ( t ) e − i w t d t U ( i w ) = ∫ − ∞ ∞ u ( t ) e − i w t d t
В контексте численных расчетов непрерывные уравнения заменяются их дискретизированными эквивалентами, чтобы обработать значения дискретных данных. Для системы дискретного времени с шагом расчета T , частотный диапазон выход Y (e iw ) и вход U (e iw ) дискретное временем преобразование Фурье (TDFT):
Y ( e i w T ) = T ∑ k = 1 N y ( k T ) e − i w k T
В этом примере, k = 1,2. N , где N количество отсчетов в последовательности.
Примечание
Эта форма только дискретизирует время. Частота непрерывна.
На практике преобразование Фурье не может быть обработано для всех непрерывных частот, и необходимо задать конечное число частот. Дискретное преобразование Фурье (ДПФ) данных временного интервала для равномерно распределенных частот N между 0 и частота дискретизации 2π/N :
Y ( e i w n T ) = ∑ k = 1 N y ( k T ) e − i w n k T w n = 2 π n T n = 0 , 1 , 2 , … , N − 1
ДПФ полезен, потому что это может быть вычислено очень эффективно с помощью метода быстрого преобразования Фурье (FFT). Преобразования Фурье входных и выходных данных являются комплексными числами.
Для получения дополнительной информации о том, как получить идентификационные данные, смотрите Способы Получить Идентификационные данные.
Как Представлять Данные частотной области в MATLAB . Необходимо организовать данные частотной области в следующем формате:
Для single-input/single-output (SISO) данные:
Входные данные должны быть вектор-столбцом, содержащим значения u ( e i ω k T )
Выходные данные должны быть вектор-столбцом, содержащим значения y ( e i ω k T )
Для данных о мультивходе/мультивыходе с входными параметрами Ню , Ny выходные параметры и измерения частоты Nf :
Входные данные должны быть матрицей Nf ню
Выходные данные должны быть матрицей Nf ny
Должен быть вектор-столбец.
Для получения дополнительной информации об импортировании данных в рабочее пространство MATLAB, см. Импорт и экспорт данных.
После того, как вы имеете переменные в рабочем пространстве MATLAB, импортируете их в приложение System Identification или создаете объект данных для работы в командной строке. Для получения дополнительной информации смотрите Сигналы ввода/вывода Частотного диапазона Импорта в Приложение и Представление Временного и частотного диапазона Используя Объекты iddata.
Представление данных частотной характеристики
Что такое Данные Частотной характеристики?. Данные частотной характеристики , также названные функциональными частотой данными, состоят из комплексных значений частотной характеристики для линейной системы, охарактеризованной ее передаточной функцией G . Данные частотной характеристики говорят вам, как система обрабатывает синусоидальные входные параметры. Можно измерить значения данных частотной характеристики непосредственно с помощью спектра анализатор, например, который обеспечивает компактное представление отношения ввода — вывода (по сравнению с хранением ввода и вывода независимо).
Передаточная функция G является оператором, который берет вход u линейной системы к выходу y :
Для системы непрерывного времени передаточная функция связывает Преобразования Лапласа входа U (s) и выход Y (s) :
Y ( s ) = G ( s ) U ( s )
В этом случае функция частоты G (iw) является передаточной функцией, оцененной на мнимой оси s=iw .
Для системы дискретного времени, произведенной с временным интервалом T , передаточная функция связывает Z-преобразования входа U (z) и выход Y (z) :
Y ( z ) = G ( z ) U ( z )
В этом случае, частота функционируют G (e iwT ) передаточная функция G (z) оцененный на модульном круге. Аргумент частоты функционирует G (e iwT ) масштабируется шагом расчета T , чтобы сделать функцию частоты периодической с частотой дискретизации 2 π T .
Когда вход к системе является синусоидой определенной частоты, выход является также синусоидой с той же частотой. Амплитуда выхода | G | времена амплитуда входа. Фаза переключенного от входа φ = arg G . G оценен на частоте входной синусоиды.
Данные частотной характеристики представляют (непараметрическую) модель отношения между входом и выходными параметрами в зависимости от частоты. Вы можете использовать такую модель, которая состоит из таблицы или графика значений, чтобы изучить системную частотную характеристику. Однако эта модель не подходит для симуляции и предсказания. Необходимо создать параметрическую модель из данных частотной характеристики.
Для получения дополнительной информации о том, как получить идентификационные данные, смотрите Способы Получить Идентификационные данные.
Как Представлять Данные Частотной характеристики в MATLAB . Можно представлять данные частотной характеристики двумя способами:
Комплексные числа G (e iω ) , для данных частот ω
Амплитуда | G | и сдвиг фазы φ = arg G значения
Можно импортировать обоих форматы непосредственно в приложении System Identification. В командной строке необходимо представлять комплексные данные с помощью frd или idfrd объект. Если данные находятся в амплитуде и формате фазы, преобразуйте его, чтобы объединить вектор частотной характеристики, использующий h (ω) = (ω) e jϕ(ω) .
Необходимо организовать данные частотной характеристики в следующем формате:
Функция частоты должна быть вектор-столбцом.
Значения частоты должны быть вектор-столбцом.
Функцией частоты должен быть Ny ню Nf массивом, где Ню является количеством входных параметров, Ny является количеством выходных параметров, и Nf является количеством измерений частоты.
Значения частоты должны быть вектор-столбцом.
Амплитуда и фаза должны каждый быть вектор-столбцом.
Значения частоты должны быть вектор-столбцом.
Амплитудой и фазой должен каждый быть Ny ню Nf массивом, где Ню является количеством входных параметров, Ny является количеством выходных параметров, и Nf является количеством измерений частоты.
Значения частоты должны быть вектор-столбцом.
Для получения дополнительной информации об импортировании данных в рабочее пространство MATLAB, см. Импорт и экспорт данных.
После того, как вы имеете переменные в рабочем пространстве MATLAB, импортируете их в приложение System Identification или создаете объект данных для работы в командной строке. Для получения дополнительной информации об импортировании данных в приложение, смотрите Импортирующие Данные Частотной характеристики в Приложение. Чтобы узнать больше о создании объекта данных, смотрите, что Данные Частотной характеристики Представления Используют Объекты idfrd.
Похожие публикации:
- Как открыть telegram
- Как очистить документы и данные на iphone telegram
- Как перенести wechat на другой телефон
- Как поделиться группой в telegram
Справочник по MATLAB — Анализ и обработка данных (В.Г.Потемкин)
Информация в данной статье относится к релизам программы MATLAB ранее 2016 года, и поэтому может содержать устаревшую информацию в связи с изменением функционала инструментов. С более актуальной информацией вы можете ознакомиться в разделе документация MATLAB на русском языке.
В этой главе описаны функции системы MATLAB, которые предназначены для анализа и обработки данных, заданных в виде числовых массивов. Наряду с простейшими функциями вычисления среднего, медианы, коэффициентов корреляции элементов массива рассмотрены функции вычисления конечных разностей, градиента и аппроксимации Лапласиана. В отдельный раздел выделены функции аппроксимации и интерполяции. Представлены функции численного интегрирования, решения задачи Коши для систем ОДУ, а также минимизации функций одной и нескольких переменных. В состав функций обработки сигналов включены дискретное преобразование Фурье, функции свертки и фильтрации. В полном объеме функции обработки сигналов оформлены в виде специализированного пакета программ Signal Processing Toolbox.
Основные операции
- SUM, CUMSUM — суммирование элементов массива
- PROD, CUMPROD — произведение элементов массива
- SORT — сортировка элементов массива по возрастанию
- MAX — определение максимальных элементов массива
- MIN — определение минимальных элементов массива
- MEDIAN — определение срединных значений (медиан) элементов массива
- MEAN — определение средних значений элементов массива
- STD — определение стандартных отклонений элементов массива
- COV — определение ковариационной матрицы элементов массива
- CORRCOEF — определение коэффициентов корреляции элементов массива
- DIFF — вычисление конечных разностей и приближенное дифференцирование
- GRADIENT — конечные разности и приближенное вычислениеградиента функции от двух переменных
- DEL2 — пятиточечная аппроксимация Лапласиана
Аппроксимация и интерполяция данных
- POLYFIT — аппроксимация данных полиномом
- INTERPFT — аппроксимация периодической функции на основе быстрого преобразования Фурье
- ICUBIC — кубическая интерполяция функции одной переменной
- SPLINE, PPVAL, MKPP, UNMKPP — интерполяция функции одной переменной кубическим сплайном
- INTERP1 — одномерная табличная интерполяция
- INTERP2 — двумерная табличная интерполяция
- GRIDDATA — двумерная табличная интерполяция на неравномерной сетке
Численное интегрирование
- TRAPZ — интегрирование методом трапеций
- QUAD, QUAD8 — вычисление интегралов методом квадратур
Интегрирование обыкновенных дифференциальных уравнений (ОДУ)
Вычисление минимумов и нулей функции
- FMIN, FORTIONS — минимизация функции одной переменной
- FMINS — минимизация функции нескольких переменных
- FZERO — нахождение нулей функции одной переменной
- FPLOT — построение графиков функции одной переменной
Преобразование Фурье
- FFT, IFFT — одномерное дискретное прямое и обратное преобразования Фурье
- FFT2, IFFT2 — двумерное дискретное прямое и обратное преобразования Фурье
- FFTSHIFT — перегруппировка выходных массивов преобразований Фурье
Свертка и фильтрация
- CONV, DECONV — свертка одномерных массивов
- CONV2 — свертка двумерных массивов
- FILTER — дискретная одномерная фильтрация
- FILTER2 — дискретная двумерная фильтрация
- UNWRAP — корректировка фазовых углов
Основные операции
SUM, CUMSUM — суммирование элементов массива
sx = sum(X)
csx = cumsum(X)
Функция sx = sum(X) в случае одномерного массива возвращает сумму элементов массива; в случае двумерного массива — это вектор-строка, содержащая суммы элементов каждого столбца.
Функция csx = cumsum(X), кроме того, возвращает все промежуточные результаты суммирования.
Пример:
Рассмотрим массив M = magic(3): M = magic(3)
| M = | 8 | 1 | 6 |
| 3 | 5 | 7 | |
| 4 | 9 | 2 |
PROD, CUMPROD — произведение элементов массива
px = prod(X)
cpx = cumprod(X)
Функция px = prod(X) в случае одномерного массива возвращает произведение элементов массива; в случае двумерного массива — это вектор-строка, содержащая произведения элементов каждого столбца.
Функция cpx = cumprod(X), кроме того, возвращает все промежуточные результаты.
Пример:
Рассмотрим массив M = magic(3).
| M = | 8 | 1 | 6 |
| 3 | 5 | 7 | |
| 4 | 9 | 2 |
SORT — сортировка элементов массива по возрастанию
Y = sort(X)
[Y, I] = sort(X)
Функция Y = sort(X) в случае одномерного массива упорядочивает элементы массива по возрастанию; в случае двумерного массива происходит упорядочение элементов каждого столбца.
Функция [Y, I] = sort(X) кроме массива упорядоченных элементов по столбцам возвращает массив индексов, позволяющих восстановить структуру исходного массива. Такое восстановление можно реализовать с помощью следующего цикла:
Если анализируемый массив содержит комплексные элементы, то сортировка выполняется для массива abs(X).
Пример:
Рассмотрим массив M = magic(3).
| M = | 8 | 1 | 6 |
| 3 | 5 | 7 | |
| 4 | 9 | 2 |
| Y = | 3 | 1 | 2 | I = | 2 | 1 | 3 |
| 4 | 5 | 6 | 3 | 2 | 1 | ||
| 8 | 9 | 7 | 1 | 3 | 2 |
MAX — определение максимальных элементов массива
Y = max(X)
[Y, I] = max(X)
C = max(A, B)
Функция Y= max(X) в случае одномерного массива возвращает наибольший элемент; в случае двумерного массива — это вектор-строка, содержащая максимальные элементы каждого столбца. Таким образом, max(max(X)) — это наибольший элемент массива.
Функция [Y, I] = max(X) кроме самих максимальных элементов возвращает вектор-строку индексов этих элементов в данном столбце.
Функция C = max(A, B) возвращает массив C тех же размеров, какие имеют массивы A и B, каждый элемент которого есть максимальный из соответствующих элементов этих массивов.
Если анализируемый массив содержит комплексные элементы, то максимальные элементы определяются из условия max(abs(X)). Если массив содержит один или несколько элементов типа NaN, то результатом операции будет NaN.
Пример:
Рассмотрим массив M = magic(3).
| M = | 8 | 1 | 6 |
| 3 | 5 | 7 | |
| 4 | 9 | 2 |
| y = max(M) | [y, I] = max(M) | max(max(M)) |
| y = 8 9 7 | y = 8 9 7 I = 1 3 2 |
9 |
MIN — определение минимальных элементов массива
Y = min(X)
[Y, I] = min(X)
C = min(A, B)
Функция Y = min(X) в случае одномерного массива возвращает наименьший элемент; в случае двумерного массива — это вектор-строка, содержащая минимальные элементы каждого столбца. Таким образом, min(min(X)) — это наименьший элемент массива.
Функция [Y, I] = min(X) кроме самих минимальных элементов возвращает вектор-строку индексов этих элементов в данном столбце.
Функция C = min(A, B) возвращает массив C тех же размеров, какие имеют массивы A и B, каждый элемент которого есть минимальный из соответствующих элементов этих массивов.
Если анализируемый массив содержит комплексные элементы, то минимальные элементы определяются из условия min(abs(X)). Если массив содержит один или несколько элементов типа NaN, то результатом операции min будет NaN.
Пример:
Рассмотрим массив M = magic(3).
| M = | 8 | 1 | 6 |
| 3 | 5 | 7 | |
| 4 | 9 | 2 |
| y = min(M) | [y, I] = min(M) | min(min(M)) |
| y = 3 1 2 | y = 3 1 2 I = 2 1 3 |
1 |
MEDIAN — определение срединных значений (медиан) элементов массива
Функция mdx = median(X) в случае одномерного массива возвращает значение срединного элемента; в случае двумерного массива — это вектор-строка, содержащая значение срединных элементов каждого столбца. Таким образом, median(median(X)) — это срединный элемент (медиана) массива, что совпадает со значением median(X(:)).
Пример:
Рассмотрим массив M = magic(4).
| M = | 16 | 2 | 3 | 13 |
| 5 | 11 | 10 | 8 | |
| 9 | 7 | 6 | 12 | |
| 4 | 14 | 15 | 1 |
| mdx = median(M) | median(median(M)) |
| mdx = 7 9 8 10 | ans = 8.5000 |
MEAN — определение средних значений элементов массива
Функция mx = mean(X) в случае одномерного массива возвращает арифметическое среднее элементов массива; в случае двумерного массива — это вектор-строка, содержащая арифметическое среднее элементов каждого столбца. Таким образом, mean(mean(X)) — это арифметическое среднее (математическое ожидание) элементов массива, что совпадает со значением mean(X(:)).
Пример:
Рассмотрим массив M = magic(4).
| M = | 16 | 2 | 3 | 13 |
| 5 | 11 | 10 | 8 | |
| 9 | 7 | 6 | 12 | |
| 4 | 14 | 15 | 1 |
| mx = mean(M) | mean(mean(M)) |
| mx = 8.5000 8.5000 8.5000 8.5000 | ans = 8.5000 |
STD — определение стандартных отклонений элементов массива
Функция sx = std(X) в случае одномерного массива возвращает стандартное отклонение элементов массива; в случае двумерного массива — это вектор-строка, содержащая стандартное отклонение элементов каждого столбца.
Пример:
Рассмотрим массив M = magic(4).
| M = | 16 | 2 | 3 | 13 |
| 5 | 11 | 10 | 8 | |
| 9 | 7 | 6 | 12 | |
| 4 | 14 | 15 | 1 |
sx = std(M)
sx = 5.4467 5.1962 5.1962 5.4467
COV — определение ковариационной матрицы элементов массива
C = cov(X)
C = cov(X, y)
Функция C = cov(X) в случае одномерного массива возвращает дисперсию элементов массива; в случае двумерного массива, когда каждый столбец рассматривается как переменная, а каждая строка — как наблюдение, cov(X) — это матрица ковариаций, diag(cov(X)) — вектор дисперсий, sqrt(diag(cov(X))) — вектор стандартных отклонений для каждого столбца.
Функция C = cov(X, y), где массивы X и Y имеют одинаковое количество строк, равносильна функции cov([X Y]).
Пример: Рассмотрим массив M = magic(4)/norm(magic(4)).
| M = | 0.4706 | 0.0588 | 0.0882 | 0.3824 |
| 0.1471 | 0.3235 | 0.2941 | 0.2353 | |
| 0.2647 | 0.2059 | 0.1765 | 0.3529 | |
| 0.1176 | 0.4118 | 0.4412 | 0.0294 |
Алгоритм: Вычисление матрицы ковариаций реализуется следующим алгоритмом:
[n, p] = size(X);
X = X — ones(n, 1) * mean(X);
C = X’ * X/(n — 1);
CORRCOEF — определение коэффициентов корреляции элементов массива
S = corrcoef(X)
S = corrcoef(X, Y)
Функция S = corrcoef(X) возвращает матрицу коэффициентов корреляции для двумерного массива, когда каждый столбец рассматривается как переменная, а каждая строка — как наблюдение.
Элементы матрицы S = corrcoef(X) связаны с элементами матрицы ковариаций C = cov(X) следующим соотношением:
Функция S = corrcoef(X, Y), где массивы X и Y имеют одинаковое количество строк, равносильна функции corrcoef([X Y]).
Пример:
Рассмотрим массив M = magic(4)/norm(magic(4)).
| M = | 0.4706 | 0.0588 | 0.0882 | 0.3824 |
| 0.1471 | 0.3235 | 0.2941 | 0.2353 | |
| 0.2647 | 0.2059 | 0.1765 | 0.3529 | |
| 0.1176 | 0.4118 | 0.4412 | 0.0294 |
DIFF — вычисление конечных разностей и приближенное дифференцирование
y = diff(x)
y = diff(x, n)
Функция y = diff(x) вычисляет конечные разности. Если x — одномерный массив вида x = [x(1) x(2) . x(n)], то diff(x) — это вектор разностей соседних элементов diff(x) = [x(2) — x(1) x(3) — x(2) . x(n) — x(n-1)]. Количество элементов вектора x на единицу меньше количества элементов вектора diff(x). Если X — двумерный массив, то берутся разности столбцов diff(X) = X(2:m, 🙂 — X(1:m-1, :).
Функция y = diff(x, n) вычисляет конечные разности порядка n, удовлетворяющие рекуррентному соотношению diff(x, n) = diff(x, n-1).
Аппроксимацией производной n порядка является отношение diff(y, n)./diff(x, n).
При наличии специализированного пакета Symbolic Math Toolbox [1] возможно реализовать точное дифференцирование в символьном виде, используя следующие функции пакета:
- diff(S) дифференцирует символьное выражение S по свободной переменной;
- diff(S, ‘v’) дифференцирует символьное выражение S по v;
- diff(S, n) и diff(S, ‘v’, n) дифференцирует n раз символьное выражение S;
- diff без аргументов дифференцирует предшествующее выражение.
1. Symbolic Mathematics Toolbox. User’s Guide. Natick: The MathWorks, Inc., 1994.
GRADIENT — конечные разности и приближенное вычислениеградиента функции от двух переменных
[px, py] = gradient(F)
[px, py] = gradient(F, dx, dy)
Функция [px, py] = gradient(F) вычисляет конечные разности функции F(x, y), заданной на двумерной сетке и представляющей собой массив чисел.
Функция [px, py] = gradient(F, dx, dy) возвращает численные значения производных функции F в виде массивов px = dF/dx и py = dF/dy, где dx и dy могут быть скалярами, равными шагам разбиения сетки по осям x и y, либо векторами координат узлов сетки при разбиении с переменным шагом.
Пример:
Рассмотрим расчет и построение поля направлений для функции
с использованием функции gradient.
[x, y] = meshgrid(-2:.2:2, -2:.2:2);
z = x .* exp(-x.^2 — y.^2);
[px, py] = gradient(z, .2, .2);
contour(z), hold on, quiver(px, py), hold off
DEL2 — пятиточечная аппроксимация Лапласиана
Функция V = del2(U) возвращает массив того же размера, каждый элемент которого равен разности среднего значения соседних элементов и элемента рассматриваемого узла. Узлы сетки во внутренней области имеют четырех соседей, а на границе и в углах — только трех или двух соседей.
Если массив U рассматривать как функцию U(x, y), вычисленную в точках квадратной сетки, то 4del2(U) является конечно-разностной аппроксимацией дифферренциального оператора Лапласа, примененного к функции U.
Пример:
Функция u(x, y) = x 2 + y 2 имеет лапласиан, равный D 2 u = 4, в чем можно убедиться, взглянув на графики этих функций.
[x, y] = meshgrid(-4:4, -3:3);
U = x.* x + y.* y,
U =
| 25 | 18 | 13 | 10 | 9 | 10 | 13 | 18 | 25 |
| 20 | 13 | 8 | 5 | 4 | 5 | 8 | 13 | 20 |
| 17 | 10 | 5 | 2 | 1 | 2 | 5 | 10 | 17 |
| 16 | 9 | 4 | 1 | 0 | 1 | 4 | 9 | 16 |
| 17 | 10 | 5 | 2 | 1 | 2 | 5 | 10 | 17 |
| 20 | 13 | 8 | 5 | 4 | 5 | 8 | 13 | 20 |
| 25 | `8 | 13 | 10 | 9 | 10 | 13 | 18 | 25 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
Аппроксимация и интерполяция данных
POLYFIT — аппроксимация данных полиномом
p = polyfit(x, y, n)
Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n +1, содержащая коэффициенты аппроксимирующего полинома.
Пример:
Рассмотрим аппроксимацию функции ошибки erf(x), которая является ограниченной сверху функцией, в то время как аппроксимирующие полиномы неограниченны, что приводит к ошибкам аппроксимации.
вычислим коэффициенты аппроксимирующего полинома степени 6:
p = polyfit(x, y, 6)
p = 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
вычислим значения полинома в точках сетки:
сформируем следующую таблицу данных:
table = [x y f y-f]
table =
Из таблицы видно, что на отрезке [0 2.5] точность аппроксимации находится в пределах 3-4 знаков; построим графики функции и аппроксимирующего полинома на отрезке [0 5].
x = (0:0.1:5)’;
y = erf(x);
f = polyval(p, x);
plot(x, y, ‘ob’, x, f, ‘-g’), » axis([0 5 0 2])
Как следует из анализа графика, аппроксимация вне отрезка [0 2.5] расходится.
Аппроксимация полиномом связана с вычислением матрицы Вандермонда V, элементами которой являются базисные функции
и последующим решением переопределенной системы линейных уравнений
Пользователь может самостоятельно внести изменения в М-файл polyfit, чтобы применить другие базисные функции.
INTERPFT — аппроксимация периодической функции на основе быстрого преобразования Фурье
yp = interpft(y, n)
Функция yp = interpft(y, n) возвращает одномерный массив чисел, который является периодической функцией, определенной в n точках и аппроксимирующей одномерный массив y. Если length(x) = m, а интервал дискретности dx, то интервал дискретности для y определяется по формуле dy = dx * m/n, причем n всегда превышает m.
Пример:
Рассмотрим аппроксимацию функции y = sin(x), которая задана 11 точками на интервале [0 10].
x = 0:10; y = sin(x);
xp = 0:0.25:10;
yp = interpft(y, 41);
xt = 0:0.01:10; yt = sin(xt);
plot(xt, yt, ‘r’), hold on, plot(x, y, ‘ob’, xp, yp)
На графике построена точная функция y = sin(x) с указанием точек съема данных и ее аппроксимация в 41 точке. Как видно из графика, аппроксимация вне интервала [0 1.5] имеет нарастающую погрешность.
ICUBIC — кубическая интерполяция функции одной переменной
yi = icubic(y, xi)
yi = icubic(x, y, xi)
Функция yi = icubic(y, xi) интерполирует значения функции y в точках xi внутри области определения функции, используя кубические полиномы. Если Y — двумерный массив, то интерполирующая кривая строится для каждого столбца. Если указано значение xi вне области определения функции, то результатом будет NaN.
Функция yi = icubic(x, y, xi) позволяет использовать более мелкую сетку xi при условии, что аргумент x изменяется монотонно и сетка равномерна.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию, используя мелкую сетку.
x = 0:10; y = sin(x);
xi = 0:.25:10;
yi = icubic(x, y, xi);
plot(x, y, ‘o’, xi, yi, ‘g’), grid.
SPLINE, PPVAL, MKPP, UNMKPP — интерполяция функции одной переменной кубическим сплайном
| yi = spline(x, y, xi) | v = ppval(pp, xx) |
| pp = spline(x, y) | [breaks, coefs, l, k] = unmkpp(pp) |
| pp = mkpp(breaks, coefs) |
Функция yi = spline(x, y, xi) интерполирует значения функции y в точках xi внутри области определения функции, используя кубические сплайны [1].
Функция pp = spline(x, y) возвращает pp-форму сплайна, используемую в М-файлах ppval, mkpp, unmkpp.
Функция v = ppval(pp, xx) вычисляет значение кусочно-гладкого полинома pp для значений аргумента xx.
Функция [breaks, coefs, l, k] = unmkpp(pp) возвращает характеристики кусочно гладкого полинома pp:
breaks — вектор разбиения аргумента;
coefs — коэффициенты кубических сплайнов;
l = length(breaks) — 1;
k = length(coefs)/l.
Функция pp = mkpp(breaks, coefs) формирует кусочно-гладкий полином pp по его характеристикам.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию кубическими сплайнами, используя мелкую сетку.
x = 0:10; y = sin(x);
xi = 0:.25:10;
yi = spline(x, y, xi);
plot(x, y, ‘o’, xi, yi, ‘g’), grid
Определим pp-форму сплайна.
pp = spline(x, y);
[breaks, coeffs, l, k] = unmkpp(pp)
breaks = 0 1 2 3 4 5 6 7 8 9 10
coeffs =
| -0.0419 | -0.2612 | 1.1446 | 0 |
| -0.0419 | -0.3868 | 0.4965 | 0.8415 |
| 0.1469 | -0.5124 | -0.4027 | 0.9093 |
| 0.1603 | -0.0716 | -0.9867 | 0.1411 |
| 0.0372 | 0.4095 | -0.6488 | -0.7568 |
| -0.1234 | 0.5211 | 0.2818 | -0.9589 |
| -0.1684 | 0.1509 | 0.9538 | -0.2794 |
| -0.0640 | -0.3542 | 0.7506 | 0.6570 |
| 0.1190 | -0.5463 | -0.1499 | 0.9894 |
| 0.1190 | -0.1894 | -0.8856 | 0.4121 |
l = 10
k = 4
Вычислим pp-форму в узловых точках сетки.
| 0 | 0.8415 | 0.9093 | 0.1411 | -0.7568 | -0.9589 | -0.2794 | 0.6570 | 0.9894 | 0.4121 | -0.5440 |
Интерполяция сплайнами использует вспомогательные функции ppval, mkpp, unmkpp, которые образуют небольшой пакет для работы с кусочно-гладкими полиномами.
Существенно большие возможности для работы со сплайнами предо-ставляет пользователю специализированный пакет Spline Toolbox [2].
Сопутствующие функции: ICUBIC, INTERP1, POLYFIT, Spline Toolbox.
- Carl de Boor. A Practical Guide to Splines. Berlin, 1978.
- Spline Toolbox. User’s Guide. Natick: The MathWorks, Inc., 1992.
INTERP1 — одномерная табличная интерполяция
yi = interp1(x, y, xi)
yi = interp1(x, y, xi, ‘‘)
Функция yi = interp1(x, y, xi) строит интерполирующую кривую для одномерного массива y, заданного на сетке x; выходной массив yi может быть определен на более мелкой сетке xi. Если Y — двумерный массив, то интерполирующая кривая строится для каждого столбца. По умолчанию реализована линейная интерполяция.
Функция yi = interp1(x, y, xi, ‘‘) позволяет задать метод интерполяции:
| ‘linear’ | линейная |
| ‘cubic’ | кубическая |
| ‘spline’ | кубические сплайны |
Принято, что аргумент x изменяется монотонно; кроме того, для кубической интерполяции предполагается, что сетка по x равномерна.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию, используя мелкую сетку.
x = 0:10; y = sin(x);
xi = 0:.25:10;
yi = interp1(x, y, xi);
plot(x, y, ‘o’, xi, yi, ‘g’), hold on
yi = interp1(x, y, xi, ‘spline’ );
plot(x, y, ‘ob’, xi, yi, ‘m’), grid, hold off
Методы линейной и кубической интерполяции реализуются довольно просто; что же касается интерполяции сплайнами, то в этом случае используются вспомогательные функции ppval, mkpp, unmkpp, которые образуют небольшой пакет для работы с кусочно-гладкими полиномами.
Существенно большие возможности пользователям для решения проблем интерполяции и аппроксимации предоставляет специализированный пакет Spline Toolbox [1].
1. Spline Toolbox. User’s Guide. Natick: The MathWorks, Inc., 1992.
INTERP2 — двумерная табличная интерполяция
ZI = interp2(X, Y, XI, YI)
ZI = interp2(X, Y, XI, YI, ‘‘)
Функция ZI = interp2(X, Y, XI, YI) интерполирует данные, определяющие некоторую поверхность на двумерной сетке ; выходной массив ZI может быть определен на более мелкой сетке . По умолчанию реализована линейная интерполяция.
Функция ZI = interp2(X, Y, XI, YI, ‘‘) позволяет задать метод интерполяции:
| ‘linear’ | линейная |
| ‘cubic’ | кубическая |
Принято, что аргументы X и Y изменяются монотонно; кроме того, для кубической интерполяции предполагается, что сетка равномерна.
Пример:
Проведем интерполяцию функции peaks, используя мелкую сетку.
[X, Y] = meshgrid(-3:0.25:3);
Z = peaks(X, Y);
[XI, YI] = meshgrid(-3:0.125:3);
ZI = interp2(X, Y, Z, XI, YI);
mesh(X, Y, Z), hold on, mesh(XI, YI, ZI+15), hold off
GRIDDATA — двумерная табличная интерполяция на неравномерной сетке
ZI = griddata(x, y, z, XI, YI)
[XI, YI, ZI] = griddata(x, y, z, XI, YI)
Функция ZI = griddata(x, y, z, XI, YI) возвращает массив ZI, который определен на новой сетке в результате интерполяции исходной функции z, заданной на неравномерной сетке .
Функция [XI, YI, ZI] = griddata(x, y, z, XI, YI) кроме массива ZI возвращает массивы XI, YI, упорядоченные по аналогии с функцией meshgrid.
Пример:
Определим функцию на сетке, заданной 100 точками, выбранными случайно на отрезке [-2 2].
x = rand(100, 1) * 4 — 2;
y = rand(100, 1) * 4 — 2;
z = x.*exp(-x.^2 — y.^2);
Векторы x, y, z определяют 100 случайных точек на поверхности функции ZI, которую зададим на следующей равномерной сетке:
ti = -2:0.25:2;
[XI, YI] = meshgrid(ti, ti);
ZI = griddata(x, y, z, XI, YI);
Построим поверхность функции, полученной в результате интерполяции на неравномерной случайной сетке.
mesh(XI, YI, ZI), hold on, plot3(x, y, z, ‘or’)
Численное интегрирование
TRAPZ — интегрирование методом трапеций
I = trapz(x, y)
I = trapz(y)
Функция I = trapz(x, y) вычисляет интеграл от функции y по переменной x, используя метод трапеций. Аргументы x и y могут быть одномерными массивами одинакового размера, либо массив Y может быть двумерным, но тогда должно выполняться условие size(Y, 1) = length(x). В последнем случае вычисляется интеграл для каждого столбца.
Функция I = trapz(y) вычисляет интеграл, предполагая, что шаг интегрирования постоянен и равен единице; в случае, когда шаг h отличен от единице, но постоянен, достаточно вычисленный интеграл умножить на h.
Примеры:
Его точное значение равно двум.
Выберем равномерную сетку
x = 0:pi/100:pi; y = sin(x);
тогда оба интеграла
I = trapz(x, y) и I = pi/100*trapz(y)
дают одинаковый результат:
Образуем неравномерную сетку, используя генератор случайных чисел.
x = sort(rand(1,101)*pi); y = sin(x);
I = trapz(x, y)
I = 1.9987.
Результат еще менее точен, поскольку максимальный из шагов max(diff(x)) равен 0.1810
QUAD, QUAD8 — вычисление интегралов методом квадратур
Квадратура — это численный метод вычисления площади под графиком функции, то есть вычисление определенного интеграла вида
Функции quad и quad8 используют разные квадратурные формулы.
Функции [I, cnt] = quad(‘‘, a, b) и [I, cnt] = quad8(‘‘, a, b) вычисляют интеграл от заданной функции; последняя может быть как встроенной функцией, так и М-файлом. Переменная cnt содержит информацию о том, сколько раз в процессе интегрирования вычислялась подынтегральная функция.
Функции [I, cnt] = quad(‘‘, a, b, tol) и [I, cnt] = quad8(‘‘, a, b, tol) вычисляют интеграл с заданной относительной погрешностью tol. По умолчанию tol = 1e-3.
Функции [I, cnt] = quad(‘‘, a, b, tol, trace) и [I, cnt] = quad8(‘‘, a, b, tol, trace), когда аргумент trace не равен нулю, строят график, показывающий ход вычисления интеграла.
Примеры:
Его точное значение равно двум.
| [I, cnt] = quad(‘sin’, 0, pi) | [I, cnt] = quad(‘sin’, 0, pi, 1e-4, 1) |
| I = 2.0000 | I = 2.0000 |
| cnt = 17 | cnt = 33 |
Как следует из анализа полученных данных, при увеличении точности вычисления на порядок почти вдвое увеличивается трудоемкость расчетов. График с результатами промежуточных расчетов показан на рисунке.
Функция quad использует квадратурные формулы Ньютона — Котеса 2-го порядка (правило Симпсона), а функция quad8 — формулы 8-го порядка [1-2]. При наличии в подынтегральной функции особенностей типа
предпочтительнее использовать процедуру quad8.
Диагностические сообщения:
Функции quad и quad8 используют рекурсивный вызов. Для того чтобы предотвратить бесконечную рекурсию при вычислении сингулярных интегралов, глубина рекурсии ограничена уровнем 10. При достижении этого ограничения выдается сообщение
Recursion level limit reached in quad. Singularity likely.
В процедуре quad достигнута предельная глубина рекурсии. Функция, возможно, сингулярна.
Ограничения:
Функции quad и quad8 не позволяют интегрировать функции с особенностями типа
В этом случае рекомендуется выделить такие члены и проинтегрировать их аналитически, а к остатку применить процедуры quad и quad8.
- Forsythe G. E., Malcolm M. A., Moler C. B. Computer Methods for Mathematical Computations. Prentice-Hall, 1977.
- Справочник по специальным функциям: Пер. с англ./Под ред. М. Абрамовица и И. Стиган. М.: Наука, 1979.
Интегрирование обыкновенных дифференциальных уравнений (ОДУ)
ODE23, ODE45 — решение задачи Коши для систем ОДУ
[t, X] = ode23(‘‘, t0, tf, x0)
[t, X] = ode23(‘‘, t0, tf, x0, tol, trace)
[t, X] = ode45(‘‘, t0, tf, x0)
[t, X] = ode45(‘‘, t0, tf, x0, tol, trace)
Функции ode23 и ode45 предназначены для численного интегрирования систем ОДУ. Они применимы как для решения простых дифференциальных уравнений, так и для моделирования сложных динамических систем.
Любая система нелинейных ОДУ может быть представлена как система дифференциальных уравнений 1-го порядка в явной форме Коши:
где x — вектор состояния;
t — время;
f — нелинейная вектор-функция от переменных x, t.
Функции [t, X] = ode23(‘‘, t0, tf, x0, tol, trace) и [t, X] = = ode45(‘‘, t0, tf, x0, tol, trace) интегрируют системы ОДУ, используя формулы Рунге — Кутты соответственно 2-го и 3-го или 4-го и 5-го порядка.
Эти функции имеют следующие параметры:
Входные параметры:
‘‘ — строковая переменная, являющаяся именем М-файла, в котором вычисляются правые части системы ОДУ;
t0 — начальное значение времени; tfinal — конечное значение времени;
x0 — вектор начальных условий;
tol — задаваемая точность; по умолчанию для ode23 tol = 1.e-3, для ode45 tol = 1.e-6);
trace — флаг, регулирующий вывод промежуточных результатов; по умолчанию равен нулю, что подавляет вывод промежуточных результатов;
Выходные параметры:
t — текущее время;
X — двумерный массив, где каждый столбец соответствует одной переменной.
Примеры:
Рассмотрим дифференциальное уравнение 2-го порядка, известное как уравнение Ван дер Поля,
Это уравнение может быть представлено в виде системы ОДУ в явной форме Коши:
Первый шаг процедуры интегрирования — это создание М-файла для вычисления правых частей ОДУ; присвоим этому файлу имя vdpol.
function xdot = vdpol(t, x)
xdot = [x(2); x(2) .* (1 — x(1).^2) — x(1)];
Чтобы проинтегрировать систему ОДУ, определяемых функцией vdpol в интервале времени 0
t0 = 0; tf = 20;
x0 = [0 0.25]’; %Начальные условия
[t, X] = ode23(‘vdpol’, t0, tf, x0);
plot(t, X), grid, hold on
gtext(‘x1’), gtext(‘x2’)
Рассмотрим простейший из известных примеров странного аттрактора — аттрактор Ресслера [1]:
где параметры имеют значения , а начальное условие задается следующим образом: x0 = [-0.7 -0.7 1].
Для того чтобы проинтегрировать эту систему в интервале времени 0
t0 = 0; tf = 20;
x0 = [-0.7 -0.7 1]’.%Начальные условия
[t, X] = ode45(‘ressler’, t0, tf, x0);
comet3(X(:, 1), X(:, 2), X(:, 3)).
Функции ode23 и ode45 реализуют методы Рунге — Кутты с автоматическим выбором шага, описанные в работе [2]. Такие алгоритмы используют тем большее количество шагов, чем медленнее изменяется функция. Поскольку функция ode45 использует формулы более высокого порядка, обычно требуется меньше шагов интегрирования и результат достигается быстрее. Для сглаживания полученных процессов можно использовать функцию interp1.
Диагностические сообщения:
Если функции ode23 и ode45 не могут выполнить интегрирование во всем заданном диапазоне времени выдается сообщение
Singularity likely.
Система сингулярна.
В состав версии 4.0 помимо функций ode23 и ode45 включена также функция ode23p, которая позволяет в процессе интегрирования строить в трехмерном пространстве орбиты движения для трех первых переменных состояния. Перед обращением к этой функции пользователь должен задать диапазоны изменения этих переменных, чтобы определить размер графика, используя следующие операторы:
axis([x1min x1max x2min x2max x3min x3max]);
hold .
Для получения тех же результатов вместо этой не столь очевидной процедуры целесообразно использовать такую последовательность:
[t, X] = ode23(‘‘, t0, tf, x0, tol, trace);
comet3(X(:, 1), X(:, 2), X(:, 3));.
В этом случае построение орбиты реализуется автоматически, но после выполнения процедуры интегрирования. Кроме того, в данном случае пользователь может выбирать любые переменные состояния.
Для эффективного моделирования сложных динамических систем с непрерывным и дискретным временем рекомендуется использовать специализированную систему SIMULINK [3], входящую в состав программных продуктов, выпускаемых фирмой The MathWorks, Inc.
- Хакен Г. Синергетика: иерархии неустойчивостей в самоорганизующихся системах и устройствах. М.: Мир, 1985. 423 с.
- Forsythe G. E., Malcolm M. A., Moler C. B. Computer Methods for Mathematical Computations. Prentice-Hall, 1977.
- SIMULINK. User’s Guide. Natick: The MathWorks, Inc., 1990.
Вычисление минимумов и нулей функции
FMIN, FORTIONS — минимизация функции одной переменной
xmin = fmin(‘‘, x1, x2)
xmin = fmin(‘‘, x1, x2, options)
[xmin, options] = fmin(‘‘, x1, x2, options, p1. p10)
options = foptions
Функция xmin = fmin(‘‘, x1, x2) возвращает значение локального минимума функции в интервале x1
Функция xmin = fmin(‘‘, x1, x2, options) использует вектор управляющих параметров options, который включает 18 компонентов, описанных ниже. Он предназначен для настройки алгоритмов оптимизации, применяемых как в системе MATLAB, так и в пакете программ Optimization Toolbox [1]. Функция fmin использует только 3 из этих параметров: options(1), options(2), options(14).
Функция [xmin, options] = fmin(‘‘, x1, x2, options, p1. p10) позволяет передать до 10 параметров, а кроме того, возвращает вектор управляющих параметров options, которые использовались алгоритмом, и в частности, параметр options(10), фиксирующий количество выполненных итераций, и параметр options(8), содержащий минимальное значение функции.
Функция options = foptions возвращает вектор-строку исходных значений параметров, используемых функциями fmin и fmins системы MATLAB и функциями fminu, constr, attgoal, minimax, leastsq, fsolve пакета Optimization Toolbox. Значения по умолчанию присваиваются внутри функций оптимизации и могут отличаться от исходных значений.
| Опция | Назначение опции | Исходное значение | Значение по умолчанию |
| options(1) | Вывод промежуточных результатов: 0 — не выводятся; 1 — выводятся | 0 | 0 |
| options(2) | Итерационная погрешность для аргумента | 1e-4 | 1e-4 |
| options(3) | Итерационная погрешность для функции | 1e-4 | 1e-4 |
| options(4) | Терминальный критерий соблюдения ограничений | 1e-6 | 1e-6 |
| options(5) | Стратегия | 0 | 0 |
| options(6) | Оптимизация | 0 | 0 |
| options(7) | Алгоритм линейного поиска | 0 | 0 |
| options(8) | Значение целевой функции | 0 | 0 |
| options(9) | Для контроля градиента установить в 1 | 0 | 0 |
| options(10) | Количество выполненых итераций | 0 | 0 |
| options(11) | Количество вычисленных градиентов | 0 | 0 |
| options(12) | Количество вычисленных ограничений | 0 | 0 |
| options(13) | Количество ограничений в виде равенств | 0 | 0 |
| options(14) | Максимальное количество итераций, n — количество переменных | 0 | fmin: 500 fmins: 200хn |
| options(15) | Параметр, используемый прри наличии целевой функции | 0 | 0 |
| options(16) | Минимальное прриращение переменных при вычислении градиента | 1e-8 | 1e-8 |
| options(17) | Максимальное прриращение переменных при вычислении градиента | 0.1 | 0.1 |
| options(18) | Размер шага минимизации h | 0 | h |
Пример:
Вычислим приближенное значение p путем минимизации функции y = cos(x) на отрезке [3 4] с итерационной погрешностью по x — 1e-12.
[xmin, opt] = fmin(‘cos’, 3, 4, [0, 1e-12]);
xmin = 3.141592654027715e+000
pi = 3.141592653589793e+000
norm(y-pi) = 4.3792e-010
Функция у = cos(x)
Обратите внимание, что итерационная погрешность (разница между двумя соседними итерациями) отличается от погрешности вычисления (разница между вычисленным и машинным значением p .
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 0 |
| 1.0000e-004 |
| 1.0000e-004 |
| 1.0000e-006 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1.0000e-008 |
| 1.0000e-001 |
| 0 |
| 0 |
| 1.0000e-012 |
| 1.0000e-004 |
| 1.0000e-006 |
| 0 |
| 0 |
| 0 |
| -1.0000e+000 |
| 0 |
| 9.0000e+000 |
| 0 |
| 0 |
| 0 |
| 5.0000e+002 |
| 0 |
| 1.0000e-008 |
| 1.0000e-001 |
| 0 |
Анализ таблицы подтверждает, что заданная итерационная погрешность opt(2) равна 1.0000e-012; минимальное значение функции opt(8) равно -1.0000e+000; число выполненных итераций opt(10) равно 9.0000e+000 при максимально допустимом числе итераций opt(14) = 5.0000e+002.
Функция fmin реализует методы “золотого сечения” и параболической интерполяции [2].
Сопутствующие функции: FMINS, FZERO, Optimization Toolbox.
- Optimization Toolbox. User’s Guide. Natick: The MathWorks, Inc., 1991.
- Forsythe G. E., Malcolm M. A., Moler C. B. Computer Methods for Mathematical Computations. Prentice-Hall, 1976.
FMINS — минимизация функции нескольких переменных
xmin = fmins(‘‘, x0)
xmin = fmins(‘‘, x0, options)
[xmin, options] = fmins(‘‘, x0, options, [ ], arg1. arg10)
Функция xmin = fmins(‘‘, x0) возвращает вектор xmin, соответствующий значению локального минимума функции в окрестности точки x0.
Функция xmin = fmins(‘‘, x0, options) использует вектор управляющих параметров options, который включает 18 компонентов, соответствующих функции foptions. Функция fmins использует только 4 из этих параметров: options(1), options(2), options(3), options(14).
Функция [xmin, options] = fmins(‘‘, x0, options, [ ], arg1. arg10) позволяет передать до 10 параметров; четвертый входной аргумент необходим, чтобы обеспечить совместимость с функцией fminu из пакета Optimization Toolbox [1]. Кроме того, возвращается вектор управляющих параметров options, которые использовались алгоритмом, и в частности, параметр options(10), фиксирующий количество выполненных итераций, и параметр options(8), содержащий минимальное значение функции.
Пример:
Рассмотрим классический пример минимизации функции Розенброка от двух переменных.
Минимум этой функции достигается в точке (a, a 2 ) и равен нулю. В качестве начальной точки обычно выбирается точка (-1.2 1).
Определим М-файл rosenbr(x, a), обеспечивающий вычисление этой функции для заданного параметра a.
function y = rosenbr(x, a)
if nargin < 2, a = 1; end
y = 100 * (x(2) — x(1)^2)^2 + (a — x(1))^2;
Рассмотрим случай a = 1.
[xmin, opt] = fmins(‘rosenbr’, [-1.2 1], [0, 1e-6]);
xmin = 9.999997969915502e-001 9.999995750683192e-001
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 0 |
| 1.0000e-004 |
| 1.0000e-004 |
| 1.0000e-006 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1.0000e-008 |
| 1.0000e-001 |
| 0 |
| 0 |
| 1.0000e-012 |
| 1.0000e-004 |
| 1.0000e-006 |
| 0 |
| 0 |
| 0 |
| -1.0000e+000 |
| 0 |
| 9.0000e+000 |
| 0 |
| 0 |
| 0 |
| 5.0000e+002 |
| 0 |
| 1.0000e-008 |
| 1.0000e-001 |
| 0 |
Анализ таблицы подтверждает, что заданная итерационная погрешность opt(2) равна 1.0000e-06; минимальное значение функции opt(8) равно 7.6989e-014; число выполненных итераций opt(10) равно 1.9900e+002 при максимально допустимом числе итераций opt(14) = 4.0000e+002.
Рассмотрим случай, когда минимум сдвинут в точку (sqrt(2), 2).
[xmin, opt] = fmins(‘rosenbr’, [-1.2 1], [0, 1e-6], [ ], sqrt(2));
xmin, opt(8), opt(10)
xmin = 1.414213634743838e+0002.000000234240279e+000
opt(8) = 9.2528e-014
opt(10) = 206
Функция fmins реализует метод Нелдера — Мида [2, 3], который является прямым методом, не требующим вычисления градиента или иной информации о производной, и связан с построением симплекса в n-мерном пространстве, который задается n+1-й вершиной. В двумерном пространстве симплекс — это треугольник, а в трехмерном — пирамида.
На каждом шагу алгоритма новая точка выбирается внутри или вблизи симплекса. Значение функции в этой точке сравнивается со значениями в вершинах симплекса, и, как правило, одна из вершин заменяется этой точкой, задавая тем самым новый симплекс. Эти итерации повторяются до тех пор, пока диаметр симплекса не станет меньше заданной величины итерационной погрешности по переменным x.
Сопутствующие функции: FMIN, FZERO, Optimization Toolbox.
- Optimization Toolbox. User’s Guide. Natick: The MathWorks, Inc., 1991.
- Nelder J. A., Mead R. A Simplex Method for Function Minimization//Computer Journal. Vol. 7, P. 308-313.
- Dennis J. E., Woods D. J. New Computing Environments: Microcomputers in Large-Scale Computing, Ed. by A. Wouk. SIAM, 1987. P. 116-122.
FZERO — нахождение нулей функции одной переменной
Функция z = fzero(‘‘, x0) находит нуль функции в окрестности точки x0.
Функция z = fzero(‘‘, x0, tol) возвращает результат с относительной погрешностью tol, задаваемой пользователем. По умолчанию tol = eps.
Функция z = fzero(‘‘, x0, tol, trace) позволяет выдавать на экран терминала промежуточные результаты поиска нуля функции.
Пример:
Вычислим действительные нули полинома f(x) = x 4 — 4 * x 3 + 12.
Сначала сформируем М-файл polynom4 для вычисления этой функции:
function y = polynom4(x)
y = x.^4 — 4*x.^3 + 12;
затем найдем корень полинома, стартуя из точки x0 = -0.5:
z = fzero(‘ polynom4’, -0.5, eps, 1)
z = 1.746170944975038e+000;
теперь найдем корень полинома, стартуя из точки x0 = 3.0:
z = fzero(‘ polynom4’, 3, eps, 1)
z = 3.777351952771215e+000;
точные значения корней полинома могут быть вычислены с помощью функции
roots([1 -4 0 0 12])
ans =
| 3.777351952771212e+000 |
| 1.746170944975038e+000 |
| -7.617614488731261e-001 +1.113117638472703e+000i |
| -7.617614488731261e-001 -1.113117638472703e+000i |
Нетрудно видеть, что оба подхода обеспечивают согласованные результаты.
На рис. а показана траектория движения из точки x0 = -0.5, а на рис. б — из точки x0 = 3.0.
Функция fzero использует методы деления отрезка пополам, секущей и обратной квадратической интерполяции [1, 2].
- Brent R. Algorithms for Minimization Without Derivatives. Prentice-Hall, 1973.
- Forsythe G. E., Malcolm M. A., Moler C. B. Computer Methods for Mathematical Computations. Prentice-Hall, 1976.
FPLOT — построение графиков функции одной переменной
Функция fplot(‘‘, []) строит график функции в заданном интервале [xmin xmax].
Функция fplot(‘‘, [], n) строит график функции, разбивая интервал минимум на n частей. По умолчанию n = 25.
Функция fplot(‘‘, [], n, ) строит график так, чтобы изменение угла наклона на соседнем участке отличалось не более чем на величину . По умолчанию приращение угла = 10 ° .
Функция fplot(‘‘, [], n, , ) выполняет построение графика так, чтобы изменение угла наклона на соседнем участке отличалось не более чем на величину , но требовало при этом не более чем k дроблений шага. По умолчанию = 20.
Функция [x, Y] = fplot(‘‘, [], n, , ) возвращает абсциссы и ординаты функции в виде одномерного массива x и, возможно, двумерного массива Y. График при этом не строится. Построение графика можно выполнить в дальнейшем с помощью функции plot(x, y).
Пример:
Построим график функции, используя функцию fplot.
Сначала сформируем М-файл myfun 4 для вычисления двух функций:
function y = myfun(x)
y(:, 1) = 200 * sin(x) ./ x;
y(:, 2) = x .^ 2;
теперь построим график в интервале [-20 20] с разбиением интервала минимум на 50 частей и так, чтобы не превышало 2 ° .
Преобразование Фурье
FFT, IFFT — одномерное дискретное прямое и обратное преобразования Фурье
| Y = fft(X) | X = ifft(Y) |
| Y = fft(X, n) | X = ifft(Y, n) |
Дискретные прямое и обратное преобразования Фурье для одномерного массива x длины N определяются следующим образом:
Функция Y = fft(X) вычисляет для массива данных X дискретное преобразование Фурье, используя FFT-алгоритм быстрого Фурье-преобразования. Если массив X двумерный, вычисляется дискретное преобразование каждого столбца.
Функция Y = fft(X, n) вычисляет n-точечное дискретное преобразование Фурье. Если length(X) < n, то недостающие строки массива X заполняются нулями; если length(X) >n, то лишние строки удаляются.
Функция X = ifft(Y) вычисляет обратное преобразование Фурье для массива Y.
Функция X = ifft(Y, n) вычисляет n-точечное обратное преобразование Фурье для массива Y.
Примеры:
Основное назначение преобразования Фурье — выделить частоты регулярных составляющих сигнала, зашумленного помехами. Рассмотрим данные, поступающие с частотой 1000 Гц. Сформируем сигнал, содержащий регулярные составляющие с частотами 50 Гц и 120 Гц и случайную аддитивную компоненту с нулевым средним.
t = 0:0.001:0.6;
x = sin(2 * pi * 50 * t) + sin(2 * pi * 120 * t);
y = x + 2 * randn(size(t));
plot(y(1:50)), grid
На рис. а показан этот сигнал. Глядя на него, трудно сказать, каковы частоты его регулярных составляющих. Реализуя одномерное преобразование Фурье этого сигнала на основе 512 точек и построив график спектральной плотности (рис. б), можно выделить две частоты, на которых амплитуда спектра максимальна. Это частоты 120 и 50 Гц.
Y = fft(y, 512);
Pyy = Y.*conj(Y)/512;
f = 1000 * (0:255)/512;
figure(2), plot(f, Pyy(1:256)), grid
Если длина последовательности входных данных является степенью числа 2, то применяется алгоритм быстрого преобразования Фурье с основанием 2, имеющий максимальную производительность. Этот алгоритм оптимизирован для работы с действительными данными; если данные комплексные, то реализуется комплексное преобразование Фурье. Эффективность первого на 40 % выше второго.
Если длина входной последовательности не является степенью числа 2, то применяется преобразование со смешанными основаниями, которые определяются как простые множители длины входной последовательности, которая при необходимости подвергается усечению.
Время расчета существенно зависит от значения длины последовательности. Если значение длины точно разлагается на простые множители, то вычисления для такой последовательности выполняются достаточно быстро; если же не все множители оказываются простыми, и даже их будет меньше, то время вычисления существенно возрастает.
Если сравнивать эффективность вычислений, то преобразование Фурье с основанием 2 действительной последовательности из 4096 точек занимает 2.1 с, а комплексной — 3.7 с. Обычное преобразование Фурье для последовательности из 4096 точек занимает 7 с, а для последовательности из 4098 точек — 58 с.
Сопутствующие функции: FFT2, IFFT2, FFTSHIFT, Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
FFT2, IFFT2 — двумерное дискретное прямое и обратное преобразования Фурье
| Y = fft2(X) | X = ifft2(Y) |
| Y = fft2(X, m, n) | X = ifft2(Y, m, n) |
Функция Y = fft2(X) вычисляет для массива данных X двумерное дискретное преобразование Фурье. Если массив X двумерный, вычисляется дискретное преобразование для каждого столбца.
Функция Y = fft(X, n) вычисляет n-точечное дискретное преобразование Фурье. Если length(X) < n, то недостающие строки массива X заполняются нулями; если length(X) >n, то лишние строки удаляются.
Функция X = ifft(Y) вычисляет обратное преобразование Фурье для массива Y.
Функция X = ifft(Y, n) вычисляет n-точечное обратное преобразование Фурье для массива Y.
Примеры:
Рассмотрим тот же пример, что и для функции fft, но сформируем 2 входных последовательности (рис. а):
t = 0:0.001:0.6;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
y1 = x + 2*randn(size(t));
y2 = x + 2*randn(size(t));
y = [y1; y2];
plot(y(1, 1:50)), hold on, plot(y(2, 1:50)), grid, hold off
Применим двумерное преобразование Фурье для сигнала y на основе 512 точек и построим график спектральной плотности. Теперь можно выделить 2 частоты, на которых амплитуда спектра максимальна. Это частоты — 100/2Гц и 240/2Гц.
Y = fft2(y, 2, 512);
Pyy = Y.*conj(Y)/512;
f = 1000*(0:255)/512;
figure(2), plot(f, Pyy(1:256)), grid
Двумерное дискретное преобразование связано с одномерным дискретным преобразованием Фурье следующим образом:
Сопутствующие функции: FFT, IFFT, FFTSHIFT, Signal Processing Toolbox.
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
FFTSHIFT — перегруппировка выходных массивов преобразований Фурье
Функция Y = fftshift(X) перегруппировывает выходные массивы функций fft и fft2, размещая нулевую частоту в центре спектра.
Если v — одномерный массив, то выполняется циклическая перестановка правой и левой его половины:
| v | fftshift(v) |
| 1 2 3 4 5 | 4 5 1 2 3 |
Если X — двумерный массив, то меняются местами квадранты: I « IV и II « III:
X = [‘ I ‘ ‘ II ‘;.
‘ III ‘ ‘ IV ‘;]
fftshift(X)
| I | II |
| III | IV |
| IV | III |
| II | I |
Пример:
Рассмотрим тот же пример, который рассматривался и для функции fft, но введем постоянную составляющую с уровнем 0.3:
t = 0:0.001:0.6;
x = sin(2 * pi * 50 * t) + sin(2 * pi * 120 * t);
y = x + 2 * randn(size(t)) + 0.3;
plot(y(1:50)), grid
Применим одномерное преобразование Фурье для сигнала y и построим график спектральной плотности. Здесь можно выделить 3 частоты, на которых амплитуда спектра максимальна. Это частоты 0, 58.4 и 140.1 Гц (рис. а).
Y = fft(y);
Pyy = Y.*conj(Y)/512;
f = 1000 * (0:255)/512;
figure(1), plot(f, Pyy(1:256)), grid
ginput
| 58.4112 | 136.6337 | 140.1869 | 62.3762 |
| 58.4112 | 68.9109 | 140.1869 | 96.8317 |
Y = fftshift(Y);
Pyy = Y.*conj(Y)/512;
figure(2), plot(Pyy), grid
Из анализа рис. б) следует, что нулевая частота сместилась в середину спектра.
Сопутствующие функции: FFT, FFT2, Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
Свертка и фильтрация
CONV, DECONV — свертка одномерных массивов
z = conv(x, y)
[q, r] = deconv(z, x)
Если заданы одномерные массивы x и y длины соответственно m = length(x) и n = length(y), , то свертка z — это одномерный массив длины m + n -1, k-й элемент которого определяется по формуле
Функция z = conv(x, y) вычисляет свертку z двух одномерных массивов x и y.
Рассматривая эти массивы как выборки из двух сигналов, можно сформулировать теорему свертки в следующей форме:
Если X = fft([x zeros(1, length(y)-1]) и Y = fft([y zeros(1, length(x) — 1]) — согласованные по размерам преобразования Фурье сигналов x и y, то справедливо соотношение conv(x, y) = ifft(X.*Y).
Иначе говоря, свертка двух сигналов эквивалентна умножению преобразований Фурье этих сигналов.
Функция [q, r] = deconv(z, x) выполняет операцию, обратную операции свертки. Эта операция равносильна определению импульсной характеристики фильтра. Если справедливо соотношение z = conv(x, y), то q = y, r = 0.
Сопутствующие функции: Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
CONV2 — свертка двумерных массивов
Функция Z = conv2(X, Y) вычисляет свертку Z двумерных массивов X и Y. Если массивы имеют размеры соответственно mx х nx и my х ny, то размер массива Z равен (mx + my — 1) х (nx + ny — 1).
Функция Z = conv2(X, Y, ‘‘) имеет опцию для управления размером массива Z, которая может принимать следующие значения:
‘full’ — полноразмерная свертка (по умолчанию);
‘same’ — центральная часть размера mx х nx;
‘valid’ — центральная часть размера (mx-my+1) х (nx-ny+1) при условии, что (mx х nx) > (my х ny).
Процедура conv2 выполняется наиболее эффективно, если выполнено условие (mx х nx) > (my х ny), то есть количество элементов массива X превосходит количество элементов массива Y.
Пример:
Рассмотрим два массива X и Y.
| X | Y | |||
| 8 | 1 | 6 | 1 | 1 |
| 3 | 5 | 7 | 1 | 1 |
| 4 | 9 | 2 |
И вычислим их свертку для различных значений опции.
| 8 | 9 | 7 | 6 |
| 11 | 17 | 19 | 13 |
| 7 | 21 | 23 | 9 |
| 4 | 13 | 11 | 2 |
| 17 | 19 | 13 |
| 21 | 23 | 9 |
| 13 | 11 | 2 |
| 17 | 19 |
| 21 | 23 |
Сравнивая столбцы последней таблицы, можно понять назначение опций ‘full’, ‘same’, ‘valid’.
Сопутствующие функции: CONV, DECONV, FILTER2, Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
FILTER — дискретная одномерная фильтрация
y = filter(b, a, x)
[y, Zf] = filter(b, a, x, Zi)
Функция y = filter(b, a, x) фильтрует сигнал, заданный в виде одномерного массива x, используя дискретный фильтр, описываемый конечно-разностными уравнениями вида
y(n) = b(1) * x(n) + b(2) * x(n — 1) + . + b(nb + 1) * x(n — nb)
— a(2) * y(n — 1) — . — a(na + 1) * y(n — na),
при этом входной параметр b = [b(1) b(2) . b(nb + 1)], а параметр a = [a(2) . . a(na+1)].
Функция [y, Zf] = filter(b, a, x, Zi) позволяет учесть запаздывания входного Zi и выходного Zf сигналов.
Сопутствующие функции: FILTER2, Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
FILTER2 — дискретная двумерная фильтрация
Y = filter2(B, X)
Y = filter2(B, X, ‘‘)
Функция Y = filter2(B, X) фильтрует сигнал, заданный в виде двумерного массива X, используя дискретный фильтр, описываемый матрицей B. Результат имеет те же размеры, которые имеет и массив X, и вычисляется с использованием двумерной свертки.
Функция Y = filter2(B, X, ‘‘) имеет опцию для управления размером массива Y, которая может принимать следующие значения:
| ‘same’ | size(Y) = size(X) (по умолчанию) |
| ‘valid’ | size(Y) < size(X) |
| ‘full’ | size(Y) > size(X) |
Пример:
Рассмотрим фильтр B и массив X.
| X | B | |||
| 8 | 1 | 6 | 1 | 1 |
| 3 | 5 | 7 | 1 | 1 |
| 4 | 9 | 2 |
И вычислим их свертку для различных значений опции.
| 17 | 19 | 13 |
| 21 | 23 | 9 |
| 13 | 11 | 2 |
| 17 | 19 |
| 21 | 23 |
| 8 | 9 | 7 | 6 |
| 11 | 17 | 19 | 13 |
| 7 | 21 | 23 | 9 |
| 4 | 13 | 11 | 2 |
Сопутствующие функции: CONV2, FILTER, Signal Processing Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1993.
UNWRAP — корректировка фазовых углов
Q = unwrap(P)
Q = unwrap(P, cutoff)
Функция Q = unwrap(P) корректирует фазовые углы элементов одномерного массива P при переходе через значение p , дополняя их значениями ±2 p для того, чтобы убрать разрывы функции; если P — двумерный массив, то соответствующая функция применяется к столбцам.
Функция Q = unwrap(P, cutoff) позволяет пользователю изменить значение cutoff критического угла; по умолчанию cutoff = p .
Пример:
Рассмотрим непрерывный неминимально-фазовый фильтр, описываемый передаточной функцией
Вычислим частотную характеристику этого фильтра в диапазоне w = 0.1:0.01:10, используя функцию freqresp пакета Control System Toolbox [1].
w = 0.1:0.01:10;
g = freqresp(num, den, sqrt(-1) * w);
Вычислим фазовый угол частотной характеристики без использования и с использованием функции unwrap.
ph1 = (180./pi) * (atan2(imag(g), real(g)));
ph2 = (180./pi) * unwrap(atan2(imag(g), real(g)));
| w | ph1 | ph2 |
| 0.6000 | 126.7350 | 126.7350 |
| 0.7000 | 141.9270 | 141.9270 |
| 0.8000 | -158.7123 | 201.2877 |
| 0.9000 | -135.6888 | 224.3112 |
| 1.0000 | 135.0000 | -225.0000 |
| 1.1000 | -139.3435 | 220.6565 |
| 1.2000 | -145.0993 | 214.9007 |
| 1.3000 | -151.1794 | 208.8206 |
| 1.4000 | -157.1667 | 202.8333 |
| 1.5000 | -162.8839 | 197.1161 |
| 1.6000 | -168.2575 | 191.7425 |
| 1.7000 | -173.2642 | 186.7358 |
| 1.8000 | -177.9068 | 182.0932 |
| 1.9000 | 177.7986 | 177.7986 |
| 2.0000 | 173.8298 | 173.8298 |
Из таблицы следует, что при входе и выходе из диапазона частот 0.8-2.0 Гц фазовые углы ph1 при достижении критического угла p терпят разрывы, которые устраняются функцией unwrap.
Построим фазовые частотные характеристики ph1(w) и ph2(w)-360, которые подтверждают сделанные выводы.
semilogx(w, ph1), hold on, grid
semilogx(w, ph2-360, ‘b’)
Сопутствующие функции: ANGLE, ABS, Control System Toolbox [1].
1. Signal Processing Toolbox User’s Guide. Natick: The MathWorks, Inc., 1990
гена / Лабораторная 1
Только сегодня: скидка до 20% в подарок на первый заказ.
Какую работу нужно написать?
Другую работу
Помощник Анна
- helpwin– справка о разделах и функциях системыMatLab;
- helpdesk– общая справка о системеMatLab;
- doc – вывод описания функции в окнеHelp∗;
- help – краткая информация о функции;
- type – вывод текстаm – файла функции;
- demo– команда вызова тестовых примеров.
- Как представляется информация в системе MatLab?
- Как можно создать векторы в системеMatLab?
- Какой вектор генерирует функция logspace?
- logspace(a.b) – возвращает вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10^0 и 10^b;
- logspace(a.b.n) – возвращает n точек между декадами 10^a и 10^b;
- logspace(a.pi) – возвращает точки в интервале между 10^a и n. Эта функция очень полезна в цифровой обработке сигналов.
- Как можно создать матрицы в системе MatLab?
- Какие вы знаете специальные функции для создания матриц?
- Каким образом производится индексация массивов в системе MatLab, удаление, обнуление строк, столбцов?
- Чем отличается определение почленных и матричных операций в системе MatLab?
- Как получить транспонированный массив?
- Как можно объединить матрицы?
- Как создаются строковые константы?
- Какие системные переменные и константы есть в системе MatLab?
- i или j — мнимая единица (корень квадратный из -1);
- pi – число п — 3.1415926. ;
- eps — погрешность операций над числами с плавающей точкой (2- 52 );
- realmin — наименьшее число с плавающей точкой (2- 1022 );
- realmax — наибольшее число с плавающей точкой (2 1023 );
- inf — значение машинной бесконечности;
- ans — переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея;
- NaN — указание на нечисловой характер данных (Not-a-Number).
- Как вводится комментарий?
- Как можно определить размер массива?
