,
здесь
path-
name.filename
– строка (путь и имя файла);
49
Заметим, что имена листов следует писать на английском языке, файлы не
должны нарушать структуру матриц; создается файл по имени выходной пе-
ременной
namematrix
.
Ниже, на рисунке, приведен пример чтения данных из файла Excel и резуль-
тат чтения в ML:
Файл
inex.xls
Имя листа Sheet1
импортирование текстового файла
load filename
(текстовый файл, см. пример, пусть
filename
это
inp.dat
)
форматированный ввод
сначала открывается файл
pathname.filename
, записанный строкой в ка-
честве первого аргумента:
fid = fopen('pathname.filename', 'permission')
второй аргумент,'permission'
– указывает на форму доступа (
'r'
–
чтение из файла;
'w'
– запись в новый файл,
'a'
– добавление в сущест-
вующий файл, подробнее см. help);
fid
– файловый идентификатор, кото-
рый система связывает с файлом (здесь подразумевается, что файл располо-
жен в рабочей папке) или указывает на ошибку (например, отрицательное
значение
fid
).
50
Затем происходит считывание данных из файла:
a = fscanf(fid, format, size),
здесь
format = [' %g %f %e %s %c %d \n'],
указывает, что в каждой строке файла записано шесть чисел , указанного
формата:
%g
– с плавающей точкой машинного представления
%f
– с фиксированной точкой
%e
– с плавающей точкой
%s
– строка, пробелы в которой не учитываются
%c
– строка, учитываются пробелы
%d
– целые десятичные
символ
\n
– переход считывания на следующую строку (перевод каретки);
size
- размер массива (матрицы), обусловлен машинным представлением,
т.е. колонки матрицы, последовательно записаны в вектор-строку
size = [m, n]
m
- количество элементов в строке;
n
– количество
элементов в столбце,
n = inf
, если неизвестно количество строк в файле
(длина столбца), из которого производится чтение, т.е.
size = [m, inf]
(см. далее рисунок с примерами, случай
size= [2,inf]
).
Обратите внимание, что после считывания получаем матрицу, транспониро-
ванную по отношению к заданной в файле, но операция транспонирования
A.' поставит все на свои места.
51
Операцию транспонирования A.' необходимо применить после считывания в
обоих примерах, это обусловлено машинным представлением – хранением
матриц вектором, записанным по столбцам.
форматированный вывод
fprintf(fid, format, namevar)
Запись в файл
namevar
(записанный строкой с необходимым расширени-
ем);
fid
– файловый идентификатор файла, который уже открыт и пустой
или ранее создан;
format
– строка по аналогии с форматированным вводом, здесь далее при-
веден пример формата, который еще имеет поясняющие надписи
['points number= %d x= %g y=%e surf=%f \n' ]
fclose(fid) -
команда, закрывающая созданный файл.
Пример 4. Создание шахматной структуры, без использования циклов
%% шахматный порядок
figure
%m - нечетное; n-любое
m=9
n=6
A=rand(m,n)
A(1:2:end)=0
mytitle=['m=',num2str(m),' - число строк, нечетное']
subplot(2,2,1),spy(A),title(mytitle)
m=8
%m - четное;
n=6
A=rand(m,n)
A(1:2:end)=0
mytitle=['m=',num2str(m),' - четное']
subplot(2,2,2),spy(A), title(mytitle)
A=rand(m,n)
AA=A
A=[rand(1,n);A]
52
A(2:2:end)=0
A(1,:)=[]
mytitle=['добавляем 1-ю строку; тот же алгоритм, и уда-
ляем 1-ю строку']
subplot(2,2,3),spy(A), title(mytitle)
53
Задания для самостоятельного решения
Задание 1
Построить блочно-диагональную матрицу, которая состоит из n блоков (
n
–
целое, генерируется случайным образом на отрезке
[4,8]
с помощью
randi
или
randint
– зависит от версии MatLab).
Блоки строятся генератором равномерно распределенных чисел на отрез-
ке
[0,1]
, размер каждого из n блоков определяется арифметической
прогрессией
n:1:2n-1
.
Вывести на экран структуру матрицы командой
spy
.
Задание 2
Построить матрицу
A
пятого порядка с помощью генератора
rand
.
Вычислить
A' A
и
A'+A
и доказать, что полученные матрицы симмет-
ричны. При выполнении задания циклы использовать нельзя.
Задание 3
Второй и предпоследний блоки блочно-диагональной матрицы (см.
задание 1) определяют подматрицу блочной матрицы, начинающейся
с
n+1
–й строки и столбца и до
end-(2n-1)
строки и столбца.
Требуется передвинуть выбранные блоки так, чтобы они разместились
в вершинах побочной диагонали подматрицы.
Структуру матрицы отобразить на экране с помощью команды
spy
.
Задание 4
Постройте заполненную матрицу размера (
m,n
).
Расставьте нули в матрице в шахматном порядке, не используя опера-
торов цикла.
Рассмотрите случаи для четного и нечетного значений
m
.
Отобразите на экране структуру исходной матрицы и результата в
смежных осях. Для этого используйте команды
spy
и
subplot
.
54
Задание 5
Предложите два способа суммирования элементов вектора длины
10000000 (сгенерируйте случайным образом с помощью
rand
), без
использования цикла.
Оцените скорость выполнения операций в обоих случаях. Команды
оценивания времени работы процессора:
tic, toc
; -секундомер; и
затраты на процесс как разница времени начала и конца:
t1=clock
, инструкции алгоритма
, t2=etime(clock,t1)
Задание 6
Задайте
n
- размер матриц
A=ones(n)
,
B=zeros(n)
;
n=size(C)
,
C
– произвольная матрица, состоящая из нулей и единиц, сгенерирован-
ная
randi (randint)
.
Объясните смысл и результат следующих операций:
B&C
A|C
Замечание. Любую матрицу, элементы которой нули, или единицы, можно
конвертировать в логическую. Например, матрица
A=logical(ones(n))
– логическая; здесь
logical
– конвертер.
Контрольные задания и вопросы
Выполните и объясните следующие команды. Полагайте переменные зада-
ний 1-4 глобальными.
Задание 1. help elmat
ones(2,5)
A=[1:3;4:6]
B=ones(size(A))
eye(5)
rand(5)
C=zeros(3)
55
Задание 2. help >
D=[1-i 2; 0.5i -1+2*i]
real(D)
imag(D)
D1=D’
D2=D.’
% объясните отличие D1 D2
A’
% матрица A из задания 1
Задание 3. Выполнить, объяснить особенности
10/3
format rational
1/3
format short
1/3
% обратите внимание на системные переменные,
% которые являются результатом выполнения последних двух команд
1/0
0/0
realmin
realmax
Задание 4. Выполнить, определить размер результирующих массивов. Объ-
яснить.
A=[A; sin(0.5*pi*(1:3))]
diag(A)
diag(diag(A))
S=sum(A)
S=sum(sum(A))
abs(A)
norm(A)
%определите по справке, какую норму вы определили
56
Объекты класса Char. Функции и свойства
Объекты типа Char являются потомком ARRAY, поэтому для них спра-
ведливы все принципы, которые поддерживаются для массивов.
Объекты типа Char – строки; строки состоят из цифр, букв и символов
таблицы ASCII, каждый элемент строки занимает два байта, это является
нетипичным для других языков программирования, в которых одному
элементу отводится один байт памяти, но MatLab ориентирован на
матричные вычисления, в основе которых лежит комплексная арифметика
(переход от операций комплексной арифметики к вещественной достигается
автоматически с нулевой мнимой частью, обратный переход автоматически
невозможен), это и обусловливает резервирование еще одного байта на
комплексную часть.
Справка о создании, контроле типа и редактировании строковых перемен-
ных
% Задание строки:
% один или серия символов заключается в апостроф
A='ученье'
% кавычка задается четырьмя апострофами
A=''''ученье''''
% выводится “ученье”
% контроль типа:
% является ли аргумент функции ischar строкой,
ischar(A)
% если да, то результат - логическая единица
length(A)
% количество элементов строки равно 10
% Конкатенация строк (по правилом матричной алгебры):
% строки записываются матрицей размера 2
3
['tip'; 'top']
% аналогично функцией strvcat (важно: согласование раз-
мерностей по столбцам не требуется!)
% две строки последовательно записываются строкой %из
шести букв,аналогично функцией strcat
['tip', 'top']
57
% Поиск букв или лексем:
S= ’sin(x)*cos(y)’, s=’x’
% ищем в большей строке меньшую
k = findstr(s, S)
% ищем в строке первого аргумента строку второго
r = strfind(S, s)
isempty(k), isempty(r)
% проверка хотя бы
% одного совпадения лексем (успех - логическая единица)
%% Сравнение строковых переменных v1 и v2
% v1 сравнилось c v2, если все буквы совпали с учетом
% регистра
strcmp(v1,v2)
% v1 сравнилось c v2, если все буквы совпали без учета
% регистра
strcmpi(v1,v2)
% сравнилось n букв, с учетом регистра
strncmp(v1,v2,n)
% сравниваются n букв без учета регистра
strncmpi(v1,v2,n)
Пример 1. Конкатенация (соединение) строк
% Конкатенация строк с пробелами и без в конце,
% первый способ:
strcat('C ', 'Новым ', 'Годом!')
% пробел – элемент строки!
strcat('C', 'Новым', 'Годом!')
% второй способ:
['C ', 'Новым ', 'Годом!']
Пример 2. Сравнение строк
% c учетом регистра и без:
s1='ABCDEFGH'
s2='ABCDefgh'
s3='ABCabc'
strcmp(s1,s2)
strcmpi(s1,s2)
strncmp(s1,s2,3)
58
Пример 3. Сравнение матриц, элементы которых - строки
% c учетом регистра и без:
sm1=['1234567'; 'ABCDEFG'], sm2=['1234567'; 'ABCDefg']
strcmp(sm1, sm2)
strncmp(sm1, sm2, 4)
strcmpi(sm1, sm2)
sm3=['1234567'; 'ABCDEFG']
sm4=['1234567'; 'ABCdefg']
strcmpi(sm3, sm4)
Пример 4. Преобразование регистра строки
% строчные буквы:
lower('Happy Birthday - С Днем Рождения!')
% прописные буквы:
upper('Happy New Year - С Новым Годом!')
Пример 5. Выделение лексем
% выделение слов, составляющих выражение,
% разделенных пробелами
s='С Новым Годом!'
[t1, r1] = strtok(s)
[t2, r2] = strtok(r1)
[t3, r3] = strtok(r2)
% выбраны три лексемы в переменных: t1, t2, t3
% выделение слов, составляющих выражение, разделенных
%нестандартными разделителями:
s='a+b*c'
[t1, r1] = strtok(s, '+*')
[t2, r2] = strtok(s, '+*')
[t3, r3] = strtok(s, '+*')
% второй аргумент –строка, должна содержать весь набор
%разделителей
Пример 6. Поиск элементов строки (подстрок в строке)
% результат – номер элемента в строке поиска, с которо-
го, начинаются совпадения
s1='00', s2='2003'; s3='100002'
59
findstr(s1,s2)
findstr(s2,s1)
strfind(s1,s2)
strfind(s2,s1)
findstr(s3,s1)
Пример 7. Поиск элементов (подстрок) в многомерных строках
sm=strvcat('com', 'compare', 'computer')
strmatch('com', sm)
strmatch('com', sm, 'exact')
s='123com'
strmatch('com',s)
sc={'com';'compare';'computer'}
strmatch('com', sc)
Пример 8. Поиск и замена элементов строки
s='12341234'
s1=strrep(s, '123', 'ABCD')
s2=strrep(s, '124', 'ABCD')
s3=strrep(s, '123', '')
Пример 9. Вывод элементов таблицы ASCII
%
вся таблица
char(1:255)
% xyz
char(120:122)
Пример 10. Заполнение многомерной строки элементами
%
второй и третий аргументы – размерности %массива
repmat('=', 1,4)
repmat('*-', 3,4)
Пример 11. Выравнивание строки
s=' 123456 '
sl=strjust(s, 'left')
sc=strjust(s, 'center')
sr=strjust(s, 'right')
60
Пример 12. Выполнение фрагментов строки
s='С Новым Годом!';
s(1:2)
s(3:8)
s(9:end)
Пример 13. Выявление позиций элемента в строке
s='С Новым Годом!';
r=eq(s, 'о')
% или равносильно:
q=r=='о';
if any(r), disp('есть совпадение'),end %
sum(r)
% количество совпадений
index=find(r)
% порядковые номера позиций совпадений
61
Объекты класса Cell. Функции и свойства
Cell – конструктор класса, массива разнородных объектов – ячеек. Од-
нако с его помощью только задается размер массива. Фигурные скобки ис-
пользуются для перечисления его элементов, а также для указания индексов
при оперировании его объектами.
Способы создания: делятся на декларативные, описательные, конвер-
тационные и создаваемые системой. К числу создаваемых системой относят-
ся массивы ячеек, получаемые при формировании выходных параметров
переменной длины, массивы ячеек, которые используются системой и поль-
зователем при обработке событий пользовательского интерфейса и т.д.
В отличие от ранее рассмотренных объектов, содержание массива
ячеек даже при отсутствии подавления вывода точкой с запятой (;) будет не-
видимым.
Функция
Достарыңызбен бөлісу: |