Решение задач обработки матриц 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Решение задач обработки матриц



Для понимания этого раздела необходимо ознакомиться с приложе­нием.

Продемонстрируем приемы программирования на языке MATLAB на примере задачи обработки матрицы (уровня 2.5.2. из [3]).

В отличии от классических универсальных языков программирования (Pascal, C, Fortran), предполагающих компиляцию программ, в MATLAB-про­грамме не требуется вводить размеры массивов; они определяются автомати­чески по присваиваемым или вводимым из файла значениям массива, и могут быть получены с помощью функций size и ndims. Рассмотрим операторы, с по­мощью которых можно определить размеры массива.

Оператор

[n,m] = size(а)

возвращает n и m - размеры матрицы а.

Длину n вектора b можно также определить с помощью оператора:

n= length(b)

Число n индексов массива Х можно вычислить, используя оператор:

n = ndims(Х).

Пример 1. Дана матрица а. Для каждой строки матрицы найти сумму элементов и определить число строк, для которых эта сумма положительна.

Обозначения поясняются таблицей 1. Размеры матрицы (n и m) формально отнесены к промежуточным данным, так как в программе будут вычисляться с применением функции size.

Таблица 1. Состав данных примера 1.

Имя Смысл Тип Структура
Исходные данные
а заданная матрица вещественный двумерный массив
Выходные данные
p счетчик строк матрицы целый простая переменная
s сумма элементов p-ой строки вещественный одномерный массив
k число строк с положи­тельной суммой эле­ментов целый простая переменная
Промежуточные данные
n число строк матрицы целый простая переменная
m число столбцов целый простая переменная
q счетчик столбцов матрицы целый простая переменная

На рис. 1.6 изображена блок-схема алгоритма. Обратите внимание, что блок 6 содержит параметрический цикл, в котором вычисляется сумма элемен­тов строки.

На рис.1.7 показан алгоритм, закодированный на языке MATLAB, и ре­зультаты его выполнения; для сравнения рядом приведена PASCAL-программа. Легко видеть, что текст MATLAB проще и короче. Однако приведенная после­довательность инструкций в командном окне MATLAB в сущности не является автономной программой. Его нельзя повторно запустить (без копирования че­рез буфер обмена), нельзя отредактировать, нельзя транслировать в исполняе­мую программу (файл с расширением.exe). Причина этих ограничений состоит в том, что транслятор командного окна MATLAB является интерпретатором. Чтобы частично снять эти ограничения, надо оформить последовательность MATLAB-команд как M-файл (см. лабораторную работу №2).

Основное преимущество языка PASCAL (как и любого языка, требующего компиляции) состоит в простоте создания обособленного от среды программи­рования исполняемого файла. Заметим, что в работе ин­женера часто требуется получить результат, а не инструмент исследования. В такой ситуации интерактивные пакеты прикладных программ (такие как MATLAB) вне конкуренции. Кроме того, в диалоговом режиме, пробуя раз­личные варианты вычислений, можно построить оптимальный алгоритм реше­ния задачи, на основе которого впоследствии создать исполняемую программу.

Задачу примера 1 можно решить без операторов условия и цикла с по­мощью функции find (массив), которая возвращает индексы ненулевых эле­ментов массива в виде вектор-столбца; нумерация элементов матрицы осуще­ствляется по столбцам. Получаем лаконичное решение:

>> load d:\valentina\a.txt

>> s=sum(a');

>> k=length(find(s>0));


 

 
 

2. Задание

1.
Запустите MATLAB и выполните все примеры теоретической части.

2. Разработайте блок-схему алгоритма для задачи [3] 2.5.2.N+1.

3. Закодируйте алгоритм на языке MATLAB, используя таблицу П.6 (кодирование основных алгоритмических структур – см. Приложение). Предусмотрите ввод исходных данных из текстового файла и вывод результатов в командное окно MATLAB и в текстовый файл.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 401; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.100.120 (0.006 с.)