В каждом столбце найти минимум




Массивы

Как уже упоминали, все данные в системе Матлаб представляют собой массив. Это особенность системы. Матлаб предоставляет пользователю специальные возможности (матричные операции) для работы с массивами (векторами и матрицами). Однако пока мы будем рассматривать возможность поэлементной обработки (как в любом ЯВУ).

Массив – это упорядоченная совокупность данных одного типа, расположенных в памяти компьютера последовательно в порядке возрастания порядковых индексов (номеров).

Любой массив характеризуется именем, числом измерений (размерностью), размером, и типом элементов.

Размерность массива, или число измерений, определяет количество индексов необходимых для однозначного доступа к элементам массива. Число индексов характеризует размерность массива.

Размер массива соответствует количеству элементов по каждому измерению.

Элементами массива могут быть целые, вещественные, комплексные числа, логические значения и символы.

В массиве под одним именем хранится множество однотипных значений.

В программировании различают (по количеству измерений) одномерные массивы, двумерные массивы и многомерные (от 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-й вариант

Этот вариант аналогичен 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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: