Обработка данных в графическом окне
Средства обработки данных в графическом окне
Решение большинства задач интерполяции и аппроксимации функций и табличных данных обычно сопровождается их визуализацией. Она, как правило, заключается в построении узловых точек функции (или табличных данных) и в построении функции аппроксимации или интерполяции. Для простых видов аппроксимации, например полиномиальной, желательно нанесение на график формулы, полученной для аппроксимации.
В MATLAB 6,0 совмещение функций аппроксимации с графической визуализацией доведено до логического конца — предусмотрена аппроксимация рядом методов точек функции, график которой построен. И все это выполняется прямо в окне редактора графики Property Editor. Для этого в позиции Tools графического окна имеются две новые команды:
· Basic Fitting - основные виды аппроксимации (регрессии);
· Data Statistics - статистические параметры данных.
Команда Basic Fitting открывает окно, дающее доступ к ряду видов аппроксимации и регрессии: сплайновой, эрмитовой и полиномиальной со степенями от 1 (линейная аппроксимация) до 10. В том числе со степенью 2 (квадратичная аппроксимация) и 3 (кубическая аппроксимация). Команда Data Statistics открывает окно с результатами простейшей статистической обработки данных.
Полиномиальная регрессия для табличных данных
Рассмотрим самый характерный пример обработки данных, примерно представляющих некоторую (например, экспериментальную) зависимость вида у(х). Пусть она задана в табличной форме, причем колонки таблицы соответствуют элементам векторов X и Y одинакового размера в следующем примере:
» Х=[2,4,6,8,10,12,14];
» Y=[3,76,4,4,5,1,5,56,6,6,3,6,7];
» plot(X,Y,'o');
Напомним, что последняя команда строит график узловых точек кружками (без соединения их отрезками прямых).
Примечание
При проведении полиномиальной аппроксимации надо помнить, что максимальная степень полинома на 1 меньше числа точек, т. е. числа элементов в векторах X и Y.
Исполнив команду Tools > Basic Fitting, можно получить окно регрессии. В этом окне птичкой отмечены три вида полиномиальной регрессии — порядка 1 (linear — линейная), 2 (quadratic — квадратичная) и 3 (cubic — кубическая). Стоит отметить какой-либо вид регрессии, как соответствующая кривая функции регрессии (аппроксимации) появится в графическом окне.
Установив птичку у параметра Show equations (Показать уравнения), можно получить в графическом окне запись уравнений регрессии (аппроксимации). Наконец, можно сместить выводимую по умолчанию легенду в место, где она не закрывала бы другие детали графика.
Наконец, исполнив команду Tools > Data Statistics, можно получить окно с рядом статистических параметров данных, представленных векторами X и Y. Отметив птичкой тот или иной параметр в этом окне, можно наблюдать соответствующие построения на графике, например вертикалей с минимальным, средним и максимальных значением у и горизонталей с минимальным, средним и максимальным значением х.
Примечание
Безусловно, эта новинка понравится большинству пользователей системы MATLAB 6.0. Однако нельзя не отметить, что статистические данные более чем скупы.
Оценка погрешности аппроксимации
Средства обработки данных из графического окна позволяют строить столбцовый или линейчатый график погрешностей в узловых точках и наносить на эти графики норму погрешности. Норма дает статистическую оценку среднеквадратической погрешности. Чем она меньше, тем точнее аппроксимация. Для вывода графика погрешности надо установить птичку у параметра Plot residuals (График погрешностей) и в меню ниже этого параметра выбрать тип графика.
Таким образом, интерфейс графического окна позволяет выполнять эффективную обработку данных наиболее распространенными способами.
- Урок 18. Работа с символьными данными
- Основные функции символьных данных
- Операции над строками
- Преобразование символов и строк
- Функции преобразования систем счисления
- Вычисление строковых выражений
- Что нового мы узнали?
Основные функции символьных данных
В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 0 до 255.
Вектор, содержащий строку символов, в системе MATLAB задается следующим образом:
· S= 'Any Characters' — вектор, компонентами которого являются числовые коды, соответствующие символам [ Символ внутри такой строки дублируется (заменяется на ''). — Примеч. ред. ].
Первые 127 чисел — это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки. Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является дополнительной и может использоваться для представления символов других языков, например русского. Длина вектора S соответствует числу символов в строке, включая пробелы. Апостроф внутри строки символов должен вводиться как два апострофа ' '.
К основным строковым функциям относятся следующие:
· char (X) — преобразует массив X положительных целых чисел (числовых кодов от 0 до 65 535) в массив символов системы MATLAB (причем только первые 127 кодов — английский набор ASCII, со 128 до 255 — расширенный набор ASCII) и возвращает его, на платформе Windows при значении выше 65 535 выдает предупреждение об ошибке, но возвращает русскую букву я (я повторяется так же, как char(255+256rt), где п — целые неотрицательные числа) [ Результат char(x) при х>65535 зависит от платформы, русификации и т. д. — Примеч. ред. ];
Пример:
» X=reshape(32:127,32,3);
» S= char(X')
S=
!"#$*&'()*+.-./0123456789::<=>?
(aABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
"abcdefghijklmnopqrstuvwxyz{|}-[]
» t1= ' computer'
» t2='for';
» t3='home':
» t4='users':
» S = Char(tl.t2.t3.t4)
S =
computer
for
home
users
· char (С) — преобразует каждый элемент строкового массива ячеек в ряды массива символов, если строки массива ячеек разного размера, к ним в конце добавляются пробелы (осуществляется набивка (padding) в терминах MATLAB) так чтобы в каждом ряде массива символов было одинаковое число символов;
· char (Tl, T2, ТЗ), где Т — строки, возвращает массив символов, при этом копии строк T1, T2, Т3 преобразуются в ряды массива символов добавлением при необходимости пробелов в конце рядов массивов символов, как описано ранее;char (java.Tang.string) — преобразует объект класса java.lang. string вмассив символов MATLAB;
· char (javaarray of java.lang.string) — единственный случай, когда выходным аргументом функции является не массив символов, а строковый массив ячеек, в который преобразуется массив строк Java;
· double(S) — преобразует символы строки S в числовые коды 0—65535 и возвращает вектор с этими числовыми кодами;
· ischar'(S) — возвращает логическую единицу, если S является символьной переменной, и логический ноль в противном случае;
· deblank(str) — возвращает строку, полученную из аргумента — строки str с удаленными из ее конца пробелами;
· deblank(c) — применяет функцию deblank к каждому элементу строкового массива ячеек с.
Примеры:
» S = 'computer'
S =
computer
» X = double(S)
X =
99 111 109 112 117 116 101 114
» ischar(S)
ans =
»c{l,l}='My ';
» c{l,2}='home ';
» c{1.3}='computer ';
» с
с=
'My ' 'home ' 'computer
» с = deblank(c)
с =
'My' 'home' 'computer'
Примечание
Правильная работа строковых функций с дополнительной кодовой таблицей ASCII возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы «с» в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы.
Операции над строками
К операциям над строками обычно относят поиск вхождений одних строк в другие, замену регистров символов, объединение строк и т. д. Следующие функции осуществляют операции над строками:
· findstr(str1,str2) — обеспечивает поиск начальных индексов более короткой строки внутри более длинной и возвращает вектор этих индексов. Индексы указывают положение первого символа более короткой строки в более длинной строке.
Пример:
» strb'Example of the function Is the findstr function';
» str2='the';
» k = findstr(strl,str2)
k =
12 28
· lower('str') — возвращает строку символов str, в которой символы верхнего регистра переводятся в нижний регистр, а все остальные символы остаются без изменений.
Пример:
» str='Example Of The Function';
» t=lower(str)
t =
example of the function
· upper( 'str') — возвращает строку символов str, в которой все символы нижнего регистра переводятся в верхний регистр, а все остальные символы остаются без изменений.
Пример:
» str='danger!';
» t = upper(str)
t =
DANGER!
· strcat(sl,s2,s3,...) — выполняет горизонтальное объединение соответствующих рядов массивов символов s1, s2, s3 и т. д., причем пробелы в конце каждого ряда отбрасываются, и возвращает объединенную строку (ряд) результирующего массива символов, пробелы добавляются заново после анализа строк в полученном массиве. Все входные массивы должны иметь одинаковое число строк (в частном случае должны быть представлены в виде одной строки символов), но если один из входных аргументов — не массив символов, а строковый массив ячеек, то любой из других входных аргументов может быть скаляром или любым массивом той же размерности и того же размера. Если входной массив состоит только из символов, то выходной массив также будет являться массивом символов. Если любой из входных массивов является строковым массивом ячеек, то функция strcat возвращает строковый массив ячеек, сформированный из объединенных соответствующих элементов массивов si, s2, s3. при этом любой из элементов может быть скаляром и т. д.
Примеры:
» sl{1.2}='book' :
» sl sl =
'Home' 'book'
» s2{ 1.1}= 'home ' :
» s2{ 1,2}= 'reading';
» s2 s2 =
'home' 'reading'
» t = strcat(sl.s2)
t =
'Homehome' 'book read ing'
» sl=['wri ']
s1 =wri
» s2=['ter']
s2 =ter
» t = strcat(sl.s2)
t =
writer
· strvcat(t1,t2,t3....) — выполняет вертикальное объединение строк tl, t2, t3,.. в массив символов S аналогично char(tl,t2.t3....). Пример:
» t1=['string'];
» t2=['concatenation']:
» S = strvcat(tl.t2)
S =
string concatenation
· strcmp( 'str1' . 'str2') — возвращает логическую единицу, если две сравниваемые строки str1 и str2 идентичны, и логический ноль в противном случае;
· TF = strcmp(S.T) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных элементов массивов S и Т и нули для всех остальных, причем если один из массивов — не массив символов, а строковый массив ячеек, то перед сравнением из сравниваемых копий рядов массива символов удаляются пробелы в конце строк. Массивы S и Т должны иметь одинаковый размер, или один из них может быть скалярной ячейкой.
Примеры:
» strl='computer';
» str2='computer';
» k = strcmp(strl.str2)
k =
» S{l,l}='first';
» S{1,2}='second ' :
» S S =
'first''second'
» T{l.l}='third';
» TF = strcmp(S.T)
TF =
0 0
» T{1.1}='second';
» TF - strcmp(S.T)
TF =
0 1
· strncmp( 'strT , 'str2' ,n) — возвращает логическую единицу, если две сравниваемые строки strl и str2 содержат n первых идентичных символов, и логический ноль в противном случае. Аргументы strl и str2 могут быть также строковыми массивами ячеек.
· TF = strncmp(S,T,n) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных (до n символов) элементов массивов S и Т и нули для всех остальных.
Примеры:
» strl='computer'
strl =
computer
» strl='computer for me'
strl =
computer for me
» k = strncmp(strl.str2,3)
k =
» k = strncmp(strl,str2.12)
L =
· strmatch( 'str' ,STRS, 'exact') — возвращает только индексы строк символов массива STRS, точно совпадающих со строкой символов str;
· strjust(S) — возвращает выровненный вправо массив символов (т. е. перемещает пробелы в конце рядов массива символов, если они есть, в начало тех же рядов) [ Функция strjusttS, 'left') возвращает массив символов, где все строки выровнены влево, a strjusttS. 'center') — где все строки выровнены по центру.— Примеч.ред. ];
· strmatch( 'str' ,STRS) — просматривает массив символов или строковый массив ячеек STRS по строкам, находит строки символов, начинающиеся с строки str, и возвращает соответствующие индексы строк;
Пример:
» STRS{1.1}='character':
» STRS{1.2}='array';
» STRS{2.1}='character array':
» STRS{2.2}='string':
» STRS
STRS =
'character' 'array'
'character array' 'string'
» i = strmatchCcharac'.STRS)
i =
»i = strmatch('character'.STRS.'exact')
i =
· strrep(strl,str2,str3) — заменяет все подстроки str2, найденные внутри строки символов str1 на строку str3;
· strrep(strl,str2,str3) — возвращает строковый массив ячеек, полученный в результате выполнения функции strrep над соответствующими рядами входных массивов символов или ячеек, если один из аргументов strl, str2 или str3 — строковый массив ячеек. В этом случае любой из аргументов может быть также скалярной ячейкой.
Пример:
» strl='This is a good example for me.':
» str2='good';
» str3='best';
» str = strrep(strl.str2.str3)
str =
This is a best example for me.
· strtokCstr' .delimiter) — возвращает часть текстовой строки str, ограниченную с ее конца разделителем del i miter. Символы-разделители в начале строки игнорируются. Вектор delimiter содержит возможные символы-разделители;
· strtokCstr') — использует символ-разделитель по умолчанию («белое пространство»). Реальными символами-разделителями при этом являются символ табуляции (ASCII-код 9), символ возврата каретки (ASCII-код 13) и пробел (ASCII-код 32);
· [token,rem]=strtok(...) — возвращает остаток rem исходной строки.
Примеры:
» str='This is a good example for me.':
» token = strtok(str)
token =
This
» token = strtok(str.'f')
token =
This is a good example
» [token,rem] = strtok(str)
token =
This
rem =
is a good example for me.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|