В каждом столбце найти минимум
Массивы
Как уже упоминали, все данные в системе Матлаб представляют собой массив. Это особенность системы. Матлаб предоставляет пользователю специальные возможности (матричные операции) для работы с массивами (векторами и матрицами). Однако пока мы будем рассматривать возможность поэлементной обработки (как в любом ЯВУ).
Массив– это упорядоченная совокупность данных одного типа, расположенных в памяти компьютера последовательно в порядке возрастания порядковых индексов (номеров).
Любой массив характеризуется именем, числом измерений (размерностью), размером, и типом элементов.
Размерность массива, или число измерений,определяет количество индексов необходимых для однозначного доступа к элементам массива. Число индексов характеризует размерность массива.
Размер массива соответствует количеству элементов по каждому измерению.
Элементами массива могут быть целые, вещественные, комплексные числа, логические значения и символы.
В массиве под одним именем хранится множество однотипных значений.
В программировании различают (по количеству измерений) одномерные массивы, двумерные массивы и многомерные (от 3-х). Мы будем рассматривать одномерные и двумерные массивы. В математике это следующие объекты: вектор (вектор-строка, вектор-столбец)и матрица. Вектор может быть представлен в виде столбца - вектор-столбец, или в виде строки – вектор-строка. Векторы и матрицы в Матлабе принято обозначать заглавными буквами.
В одномерном массиве расположение элемента определяется одним индексом, например, A (2). Каждый элемент массива имеет номер, определяющий его местоположение в массиве. В матрице (двумерном массиве) каждому элементу соответствует два индекса. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент матрицы.
Чтобы обратиться к элементу матрицы, достаточно указать имя матрицы и в скобках через запятую индексы (номера) строки и столбца. Например, запись Х (2, 3) означает обращение к элементу матрицы Х, расположенному во 2-й строке 3-го столбца.
Доступ к элементу массива или матрицы осуществляется указанием имени и в круглых скобках одного индекса, в случае с одномерным массивом и 2-х индексов, указанных через запятую, в случае с матрицей. В качестве индекса массива может использоваться целая переменная, константа или выражение (B(k), A(5), X(i+2), Y(3, 4)).
Нумерация элементов начинается с 1, т.е. индексы должны быть >=1.
Для вводалюбого массива одномерного и матрицы будем осуществлять в цикле(не учитываем пока возможности Матлаба). Вывод массивов в цикле, как мы увидим, в Матлабе выглядит некрасиво. Командой disp(<имя>)массив выводится автоматически в удобном для восприятия виде. Рассмотрим отдельно одномерные массивы и матрицы.
Одномерные массивы
Например, ввод и вывод массива можно организовать так:
Ввод массива
n=input('введите n=');
for i=1:n
X(i)=input('X(i)=');
end
На экране увидим:
Жирным шрифтом выделено, то, что будет выведено на экран, а курсивом – введенные значения.
введите n=3
X(i)=1
X(i)=2
X(i)=3
Вывод массива
Используем для вывода массива цикл. Запишем:
for i=1:n
disp(X(i));
end
Получили на экране при таком выводе:
Некрасиво! Так массив не надо выводить, ввод тоже неинформативен, не пронумерованы элементы.
При работе с массивами в одном сеансе работы в системе Matlab рекомендуется очищать рабочее пространство командой clear, а для удобства пользователя очищать окно Command Window командой clc.
Вывод массива в ML удобно осуществлять командой disp(<имя массива>). В этом случае массив выводится поэлементно в строку.
Используем другой вариант для ввода вывода массива:
Clear; %очистка рабочего пространства
clс; % очистка окна Command Window
n=input('введите n=');
for i=1:n
disp(sprintf('X(%g)=',i))
X(i)= input(' ');
end
disp('Массив X')
disp(X) % вывод массива целиком
На экране увидим:
введите n=3
X(1)=
X(2)=
X(3)=
Массив X
2 5 8
Еще лучше для ввода массива:
n=input('введите n=');
for i=1:n
X(i)=input(sprintf('X(%d)=%f',i));
end
На экране будет:
введите n=3
X(1)=1
X(2)=2
X(3)=3
Такой ввод и вывод массива более нагляден.
Пока мы не знаем операций и функций ML для работы с массивами и матрицами, обработку массивов будем осуществлять в цикле.
Блок-схемы задач на массивы рассмотрены на лекциях в прошлом семестре.
Пример
Вычислить среднее арифметическое значение положительных элементов в массиве.
clc;
n=input('Введите n=');
for i=1:n
X(i)=input(sprintf('X(%d)=%f',i));
end
s=0;
k=0;
for i=1:n
if X(i)>0
s=s+X(i);
k=k+1;
end
end
sr=s/k;
disp(‘sr=’);
disp(sr);
На экране увидим:
Введите n=3
X(1)=
X(2)=
-1
X(3)=
sr=
3.5000
Пример
В массиве X заменить минимальное значение числом b.
Запишем:
%заменить мин в массиве на число b
clear;
clc;
n=input('Введите n = ');
b=input('Введите b = ');
for i=1:n
X(i)=input('X(i)=');
end
disp('Исходный массив');
disp(X);
min=X(1);
pmin=1;
for i=2:n
if X(i)<min
min=X(i);
pmin=i;
end
end
X(pmin)=b;
disp('Измененный массив');
disp(X);
Получим на экране:
Введите n = 4
Введите b = 55
X(i)=1
X(i)=4
X(i)=0.7
X(i)=5
Исходный массив
1.0000 4.0000 0.7000 5.0000
Измененный массив
1 4 55 5
Пример
Сформировать новый массив из элементов кратных 5
clc;
clear;
n=input('Введите n=');
for i=1:n
disp(sprintf('X(%g)=',i))
X(i)= input('');
end
disp('Исходный массив');
disp(X);
k=0;
for i=1:n
if mod(X(i),5)==0
k=k+1;
Y(k)=X(i);
end
end
disp('Новый массив');
disp(Y);
Получим на экране:
Введите n=5
X(1)=
X(2)=
X(3)=
X(4)=
X(5)=
Исходный массив
2 55 6 45 15
Новый массив
55 45 15
Матрицы
В двумерном массиве каждому элементу соответствует два индекса. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент матрицы.
Чтобы обратиться к элементу двумерного массива, достаточно указать имя матрицы и в скобках через запятую индексы (номера) строки и столбца. Например, запись А(2, 3) означает обращение к элементу 2-й строки 3-го столбца.
Для поэлементного ввода и обработки двумерных массивов используют вложенные циклы.
Ввод матрицы можно осуществить следующими способами:
Й вариант
Этот вариант аналогичен 1-му примеру с одномерным массивом. Ввод матрицы осуществим построчно, но элементы матрицы при вводе пока будут не пронумерованы. Матрицу выведем традиционным для ML способом, указав в команде disp имя матрицы, например, disp (X).
Запишем:
clear;
clc;
%n – количество строк
%m – количество столбцов
n=input('Введите n=');
m=input('Введите m=');
for i=1:n
disp(sprintf('Введите эл. %d строки матрицы',i))
for j=1:m
X(i,j)=input('X(i,j)=');
end
end
disp('Матрица X');
disp(X);
На экране получим:
Введите n=2
Введите m=3
Введите эл. 1 строки матрицы
X(i,j)=4
X(i,j)=5
X(i,j)=6
Введите эл. 2 строки матрицы
X(i,j)=1
X(i,j)=2
X(i,j)=3
Матрица X
4 5 6
1 2 3
Приведем2-ой вариант,в котором элементы матрицы пронумерованы. Запишем:
clc;
clear;
n=input('Введите n=');
m=input('Введите m=');
for i=1:n
for j=1:m
disp(sprintf('Введите %s(%d,%d)=','X',i,j))
X(i,j)= input(' ');
end
end
disp('Матрица X');
disp(X);
Получим на экране:
Введите n=2
Введите m=3
Введите X(1,1)=
Введите X(1,2)=
Введите X(1,3)=
Введите X(2,1)=
Введите X(2,2)=
Введите X(2,3)=
Матрица X
4 3 7
4 9 1
Для обработки двумерных массивов используют вложенные циклы.В зависимости от решаемой задачи просмотр матрицы может осуществляться или по строкам, или по столбцам. Когда действия производятся во всей матрице, то порядок обхода элементов неважен. Если необходимо произвести обработку по строкам, сначала обрабатываются все элементы первой строки, затем все элементы второй строки и так до конца массива. Для этого во внешнем цикле изменяется первый индекс (индекс строки), а во внутреннем – второй (индекс столбца). Иными словами, чтобы перемещаться по элементам одной строки, нужно изменять номера столбцов. В случае, если необходимо выполнить действия по столбцам, поступают аналогично, с той лишь разницей, что внешний цикл организуется по столбцам, а внутренний цикл по строкам, т.е. сначала обрабатываются все элементы первого столбца, потом все элементы второго, третьего, и так далее, а для перемещения по элементам столбца изменяется номер строки.
Пример
Определить среднее арифметическое отрицательных элементов в матрице. Если их нет, выдать сообщение. Запишем:
clear;
clc;
n=input('введите n=');
m=input('введите m=');
disp('введите элементы матрицы');
for i=1:n
for j=1:m
X(i,j)=input('X(i,j)=');
end
end
disp('исходная матрица')
disp(X)
s=0;
k=0;
for i=1:n
for j=1:m
if X(i,j)< 0
k=k+1;
s=s+X(i,j);
end
end
end
if s==0
disp('Отрицательных нет');
else
sr=s/k;
disp('sr=');
disp(sr);
end
Получим на экране:
введите n=2
введите m=3
введите элементы матрицы
X(i,j)=1
X(i,j)=2
X(i,j)=3
X(i,j)=4
X(i,j)=5
X(i,j)=6
исходная матрица
1 2 3
4 5 6
Отрицательных нет
Пример
В каждом столбце найти минимум
clear;
clc;
n=input('введите n=');
m=input('введите m=');
disp('введите эл. матрицы');
for i=1:n
for j=1:m
disp(sprintf('Введите %s(%d,%d)=','X',i,j))
X(i,j)= input(' ');
end
end
%for i=1:n
%for j=1:m
% X(i,j)=input('X(i,j)=');
%end
%end
disp('исходная матрица')
disp(X)
for j=1:m
minX=X(1,j);
for i=1:n
if X(i,j)< minX
minX=X(i,j);
end
end
disp(sprintf('мин.зн. %2d столбца=%5.3f', j,minX))
end
На экране получим:
введите n=3
введите m=3
введите эл. матрицы
Введите X(1,1)=
Введите X(1,2)=
Введите X(1,3)=
Введите X(2,1)=
Введите X(2,2)=
Введите X(2,3)=
Введите X(3,1)=
Введите X(3,2)=
Введите X(3,3)=
исходная матрица
1 2 3
4 5 6
0 6 4
мин.зн. 1 столбца=0.000
мин.зн. 2 столбца=2.000
мин.зн. 3 столбца=3.000
Пример
В каждой строке заданной матрицы найти количество элементов удовлетворяющих условию X<=A(i,j)<=Y
Clc;
Clear;
x=input('введите x=');
y=input('введите y=');
n=input('введите n=');
m=input('введите m=');
disp('введите эл. матрицы');
for i=1:n
for j=1:m
A(i,j)=input('A(i,j)=');
end
end
disp('исходная матрица')
disp(A)
for i=1:n
k=0;
for j=1:m
if A(i,j)>=x && A(i,j)<=y
k=k+1;
end
end
disp(sprintf('в строке № %2d количество эл.=%2d', i,k))
end
На экране увидим:
введите x=2
введите y=6
введите n=3
введите m=3
введите эл. матрицы
A(i,j)=3
A(i,j)=7
A(i,j)=5
A(i,j)=2.5
A(i,j)=4
A(i,j)=5
A(i,j)=1
A(i,j)=3
A(i,j)=8
Исходная матрица
3.0000 7.0000 5.0000
2.5000 4.0000 5.0000
1.0000 3.0000 8.0000
в строке № 1 количество эл.= 2
в строке № 2 количество эл.= 3
в строке № 3 количество эл.= 1
<== предыдущая лекция | | | следующая лекция ==> |
Критика НЛП як наукового методу. | | | Предпосылки и причины отмены крепостного права. |
Дата добавления: 2016-03-22; просмотров: 1358;