Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
∑
12
2.
i=3
( 2 i )! 3.
i= 1
(i) !
i=2
( 2 i+1 )!
x
2i 20 50
1
∑ (−1 ) 1
i
6
∑ (−1 )
i
∑
4.
i=2
i! 5.
i= 0
i! 6.
i=0
i!
7
8. 9.
∑ (−1) x
i i
40
7. i=3 ∑ (−1) (i+1) x
i i
100 (i+1 )( i+2 )
∑ (−1) x
i i
i=0 i =10
2
60
∑ix
i
10. i=1
Интегралы
1 1 π /4
1 e e1
dx
∫ ∫ ln xdx ∫ ln( x+1)dx
4. 0 √1+x 2
. 5. 0 . 6. 0 .
π /2 1 π
e x dx
∫ x cos xdx ∫ 1+e 2 x ∫ cos3 xdx
7. 0 . 8. 0 . 9. 0 .
π /4 π /2 1
∫ cosdxx ∫ dx
1+sin x
∫ arctgxdx
10. 0 . 11. 0 . 12. 0 .
1 √2 2 π /4
dx
∫ 1+e x ∫ arcsin xdx ∫ tgxdx
13. 0 . 14. 0 . 15. 0
π/2 1 1
∫ ctgxdx ∫ xe dx
x
∫ √ 1+x dx
16. π /4 . 17. 0 . 18. 0
Варианты для заданий 3-4
1. Даны последовательности чисел А = {а0…аn–1} и С = {с0…сn–1}.
Создать приложение, определяющее, совпадают ли поэлементно элементы
массивов А и С.
2. Дана последовательность чисел С = {с0…сn–1}. Дан набор из N пар
кодирующих чисел (ai,bi), т.е. все ai заменяются на bi. Создать приложение,
кодирующее последовательность С следующим образом: массив разделяется
на подмассивы и каждый процесс осуществляет кодирование своего
подмассива.
3. Дана последовательность чисел С = {с0…сn–1} и число b. Создать
приложение для определения количества вхождений числа b в массив C.
4. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска произведения чисел a0*а1*…*an–1.
5. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска максимального ai.
6. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска минимального ai.
7. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска всех ai, являющихся простыми числами.
8. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска всех ai, являющихся квадратами любого
натурального числа.
9. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для вычисления выражения a0-а1+a2-а3+a4-а5+...
10. Дана последовательность натуральных чисел {a0…an–1}. Создать
приложение для поиска суммы ∑ai, где ai – четные числа.
11. Даны результаты сдачи экзамена по N студенческим группам.
Требуется создать приложение, вычисляющее средний балл. Процессы
должны осуществлять вычисления параллельно по группам.
12. Охранное агентство разработало новую систему управления
электронными замками. Для открытия двери клиент обязан произнести
произвольную фразу из 25 слов. В этой фразе должно встречаться заранее
оговоренное слово, причем только один раз. Требуется создать приложение,
управляющее замком. Процессы должны осуществлять сравнение
параллельно по словам.
13. Дан список студентов по группам. Требуется создать приложение
для определения количества студентов с фамилией Иванов. Процессы
должны осуществлять поиск совпадений по группам параллельно.
14. Среди студентов университета проведен опрос с целью определения
процента студентов, знающих точную формулировку правила Буравчика. В
результате собраны данные о количестве знатоков на каждом факультете по
группам. Известно, что всего обучается 10000 студентов. Требуется создать
приложение для определения процента знающих правило Буравчика
студентов. Каждый процесс должен осуществлять поиск количества знатоков
по факультету. Искомый процент определяет главный процесс.
15. Даны результаты сдачи экзамена по группам. Требуется создать
приложение, вычисляющее количество двоечников и отличников. Процессы
должны осуществлять вычисления параллельно по группам.
16. Руководство заготовительной компании «Рога и Копыта» проводит
соревнование по заготовке рогов среди своих региональных отделений. Все
данные по результатам заготовки рогов (заготовитель, его результат)
хранятся в общей базе данных по отделениям. Требуется создать
приложение для поиска лучшего заготовителя. Процессы должны
осуществлять поиск победителя параллельно по отделениям. Главный
процесс определит победителя.
Основные характеристики среды MATLAB
Система MATLAB (сокращение от MATrix LABoratory - матричная лабо-
ратория) представляет собой интегрированную программную среду для
выполнения численных расчетов, компьютерного моделирования и
вычислительных экспериментов, охватывающих в том или ином объеме
различные области классической и современной математики, а также
широчайший спектр инженерных приложений.
Архитектурно система MATLAB состоит из базовой программы и
нескольких десятков так называемых пакетов расширения, которые в своей
совокупности обеспечивают исключительно широкий диапазон решаемых
задач. Интеграция всех этих средств в единой рабочей среде обеспечивает
необходимую гибкость использования сотен встроенных функций,
реализующих разнообразные математические процедуры и вычислительные
алгоритмы.
Основные элементы графического интерфейса системы MATLAB
Каждый отдельный запуск системы MATLAB называется сеансом работы с
ней.
При вызове Matlab ее интерфейс можно настроить по своему желанию.
Наиболее удобно видеть все окна в различных закладках. Это достигается
выполнением пункта меню Desktop, DesktopLayout, AllTabbed. При этом
можно сделать невидимыми закладки Command History и Profile и окно будет
следующего вида:
Конструкция переключателя
Для осуществления множественного выбора (или ветвления) используется
конструкция с переключателем типа switch:
switch switch_Bыражение
case саsе_Выражение
Список_инструкций
case {саsе_Выражение1, Саsе_выражение2, саsе_ВыражениеЗ....}
Список_инструкций
Otherwise
Список_инструкций
end
Если выражение после заголовка switch имеет значение одного из выражений
саsе_Выражение..., то выполняется блок операторов case, в противном случае
— список инструкций после оператора otherwise. При выполнении блока case
исполняются те списки инструкций, для которых сазе_Выражение совпадает
со switch_выpaжением. сазе_Выражение может быть числом, константой,
переменной, вектором ячеек или даже строчной переменной. В последнем
случае оператор case истинен, если функция strcmp (значение, выражение)
возвращает логическое значение «истина».
Поясним применение оператора switch на примере m-файла swl.m:
switch var
case {1,2,3}
disp(‘Первый квартал')
case {4,5,6}
disp('Второй квартал')
case {7,8,9}
d.isp( 'Третий квартал')
case {10.11,12}
disp(‘Четвертый квартал')
otherwise
disp('Ошибка в задании')
end
Эта программа в ответ на значения переменной van — номера месяца —
вычисляет, к какому кварталу относится заданный месяц, и выводит
соответствующее сообщение:
» var=2;
» swl
Первый квартал
» var=4;swl
Второй квартал
» var=7:swl
Третий квартал
» var=12;swl
Четвертый квартал
» var=-l;swl
Ошибка в задании
Диалоговый ввод
Приведем простой пример диалоговой программы:
% Вычисление длины окружности с диалоговым вводом радиуса
r=0;
while r>=0,
r=input('Введите радиус окружности r=');
if r>=0
disp(' Длина окружности l=');
disp(2*pi*r),
end
end
Эта программа служит для многократного вычисления длины окружности по
вводимому пользователем значению радиуса г. Простейший диалог
реализован с помощью команды input:
input(‘Введите радиус окружности r='):
При выполнении этой команды вначале выводится запрос в виде строки,
затем происходит остановка работы программы и ожидается ввод значения
радиуса г (в общем случае числа). Ввод, как обычно, подтверждается
нажатием клавиши Enter, после чего введенное число присваивается
переменной г. Следующие строки
if r>=0
disp(' Длина окружности l = ');
disp(2*pi*r);
end
с помощью команды disp при r>=0 выводят надпись «Длина окружности 1=»
и вычисленное значение длины окружности.
Пока r>=0. цикл повторяется. Но стоит задать r<0, вычисление длины
окружности перестает выполняться, а цикл завершается.
Функция input может использоваться и для ввода произвольных строковых
выражений. При этом она задается в следующем виде:
input('Комментарий'. ‘s’)
При выполнении этой функции она останавливает вычисления и ожидает
ввода строкового комментария. После ввода возвращается набранная строка.
Это иллюстрирует следующий пример:
» S=input('Введите выражение ','s') % (Вводим) 2*sin(l)
S=
2*sin(l)
» eval(S)
ans =
1.6829
Функция eval позволяет вычислить выражение, заданное (полученное от
функции input) в символьном виде. Вообще говоря, возможность ввода
любого символьного выражения в сочетании с присущими языку
программирования MATLAB управляющими структурами открывает путь к
созданию диалоговых программ любой сложности
Функции в MATLAB(М-функции)
М-функции являются M-файлами, которые допускают наличие входных и
выходных аргументов. Они работают с переменными в пределах собственной
рабочей области, отличной от рабочей области системы MATLAB.
Пример
Функция average - это достаточно простой M-файл, который вычисляет
среднее значение элементов вектора:
function y = average (x)
% AVERAGE Среднее знач0ение элементов вектора.
[m,n] = size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error('Входной массив должен быть вектором’)
end
y =sum(x)/length(x); % Собственно вычисление
Эти команды нужно записать в M-файл, именуемый average.m. Функция
average допускает единственный входной и единственный выходной
аргументы. Для того чтобы вызвать функцию average, надо ввести
следующие операторы:
z=1:99;
average(z)
ans = 50
Структура М-функции.
M-функция состоит из:
строки определения функции;
первой строки комментария;
тела функции;
строчных комментариев;
Строка определения функции. Строка определения функции сообщает
системе MATLAB, что файл является М-функцией, а также определяет
список входных аргументов.
Строка определения функции average имеет вид:
function y = average(x)
Здесь:
1. function - ключевое слово, определяющее М-функцию;
2. y - выходной аргумент;
3. average - имя функции;
4. x - входной аргумент.
Каждая функция в системе MATLAB содержит строку определения функции,
подобную приведенной.
Если функция имеет более одного выходного аргумента, список выходных
аргументов помещается в квадратные скобки. Входные аргументы, если они
присутствуют, помещаются в круглые скобки. Для отделения аргументов во
входном и выходном списках применяются запятые.
Пример
function [x, y, z] = sphere(theta, phi, rho)
Первая строка комментария. Для функции average первая строка
комментария выглядит так:
% AVERAGE Среднее значение элементов вектора
Это - первая строка текста, которая появляется, когда пользователь набирает
команду help <имя_функции>. Поскольку эта строка содержит важную
информацию об M-файле, она должна быть тщательно составлена.
Тело функции. Тело функции содержит код языка MATLAB, который
выполняет вычисления и присваивает значения выходным аргументам.
Операторы в теле функции могут состоять из вызовов функций,
программных конструкций для управления потоком команд, интерактивного
ввода/вывода, вычислений, присваиваний, комментариев и пустых строк.
Пример
Тело функции average включает ряд простейших операторов
программирования:
Оператор вызова функции size [m, n] = size(x);
Начало оператора if if(~((m==1)|(n==1))|(m == 1 & n == 1))
Сообщение об ошибке Error('Input должно быть вектором')
Конец оператора if end
Вычисление и присваивание y = sum(x)/length(x);
Как уже говорилось ранее, комментарии отмечаются знаком (%). Строка
комментария может быть размещена в любом месте M-файла, в том числе и в
конце строки.
Имена М-функций. В системе MATLAB на имена М-функций налагаются те
же ограничения, что и на имена переменных - их длина не должна превышать
31 символа. Имена М-функций должны начинаться с буквы; остальные
символы могут быть любой комбинацией букв, цифр и подчеркиваний.
Имя файла, содержащего М-функцию, составляется из имени функции и
расширения “.m”.
Средства MATLAB для выполнения параллельных вычислений
MATLAB Parallel Computing Toolbox (PCT) – это набор специальных
средств и функций для написания параллельных алгоритмов и организации
распределенных вычислений, который позволяет использовать как локальные
многопроцессорные, так и распределенные вычислительные ресурсы. PCT
предназначен для разработки параллельных алгоритмов, для формирования
распределенной задачи, передачи её на сервер и для приема результатов
вычислений. Основная задача формулируется на языке MATLAB и может
использовать функции любых пакетов расширения. Также пакет
поддерживает интерфейс передачи сообщений MPI, что позволяет
разрабатывать на MATLAB эффективные приложения с параллельными
вычислениями. Серверная часть пакета - MATLAB Distributed Computing
Server (DST) обеспечивает исполнение основной задачи на удаленных
сессиях MATLAB. Планировщик MathWorks Job Manager распределяет ежду
исполнителями подзадачи. Он координирует выполнение заданий и
асинхронно распределяет задачи рабочим станциям – исполнителям.
Планировщик устанавливается на любой машине находящейся в сети и
может обрабатывать задания различных пользователей различных платформ.
Принцип динамического лицензирования позволяет использовать при
разработке распределенных приложений любые пакеты расширений
MATLAB имеющиеся на клиентской стороне.
Работа (job) – это некоторая сложная операция, которую нужно выполнить в
сеансе MATLAB. Работа разбивается на сегменты, называемые заданиями
(tasks). Пользователь решает, как лучше разделить работу на задания. Работа
делится на идентичные задания, но они выполняются не одинаково.
Сессия MATLAB , в которой определены работа и задания, называется
клиентской сессией (client). Клиент использует PCT для определения работы
и заданий. MATLAB DST выполняет работу путем вычисления заданий и
возврата результата клиентской сессии.
job manager- это часть программного обеспечения, которая координирует
выполнение работ и вычисление их заданий. job manager распределяет
задания для выполнения индивидуальным сессиям MATLAB, называемым
рабочими (workers).
Можно конфигурировать один компьютер как клиента, рабочего или
планировщика ( job manager).
Переменная section - массив типа variant, так как он различен в каждой lab.
Если есть необходимость использовать весь массив в одном рабочем
пространстве, следует использовать функцию gather.
P>> combined = gather(whole)
Заметим, что это объединяет весь массив в рабочем пространстве всех lab.
Можно собрать массив в рабочем пространстве только одного.
X = gather(C, номер lab) конвертирует codistributed массив C в variant массив
X так, что все данные содержатся в lab с указанным номером, а X размера 0
строк и 0 столбцов содержится во всех остальных lab.
Так как вывод во всех lab обычно невозможен, для графического
использования данных следует получить данные в рабочем пространстве
клиента. Копирование массива в клиентское пространство выполняется
командой
pmode lab2client combined 1
, выполняемой в окне команд клиента
>>pmode lab2client combined 1
>> combined
combined =
1011 1012 1021 1022 1031 1032 1041 1042
1013 1014 1023 1024 1033 1034 1043 1044
1015 1016 1025 1026 1035 1036 1045 1046
Со многими матричными функциями можно оперировать, используя
codistributed массивы. Например, функция eye создает единичную матрицу
(по диагонали 1, остальные 0). Можно создать codistributed единичную
матрицу с помощью команды, выполняемой в окне Parallel Command
Window.
P>> distobj = codistributor1d();
P>> I = eye(6, distobj)
P>> getLocalPart(I)
Вызов функции codistributor1d без аргументов определяет распределение по
умолчанию, которое является распределением по столбцам, причем в каждый
lab попадет столько столбцов, сколько возможно.
matlabpool close
spmd
if labindex==1
R = rand(9,9);
else
R = rand(4,4);
end
end
spmd
labdata = load(['datafile_' num2str(labindex) '.ascii'])
result = MyFunction(labdata)
end
Объекты Composite
MM{2}
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
spmd
if labindex > 1
HH = rand(4)
end
end
На клиенте:
HH
1: No data
2: class = double, size = [4 4]
3: class = double, size = [4 4]
Еще пример:
spmd
if labindex > 1
BB = rand(labindex)
end
end
Lab 2:
BB =
0.3802 0.7370
0.1215 0.3625
Lab 3:
BB =
0.7895 0.3064 0.7922
0.3299 0.6448 0.8524
0.0525 0.7349 0.9092
На клиенте: BB
BB =
1: No data
2: class = double, size = [2 2]
3: class = double, size = [3 3]
MM{3} = eye(4);
PP = Composite()
PP =
1: No data
2: No data
3: No data
PP{ii} = ii
end
>> PP{:}
ans = 1
ans = 2
ans = 3
spmd
if labindex == 3
MM
end
end
Lab 3:
MM =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
matlabpool 4
spmd
AA = labindex; % Начальная установка
end
AA(:) % Composite
[1]
[2]
[3]
[4]
spmd
AA = AA * 2; % Умножение существующего значения
end
AA(:) % Composite
[2]
[4]
[6]
[8]
clear AA % Очмстка на клиенте также очищает все lab
spmd
AA = AA * 2; % Генерируется ошибка
end
matlabpool close
Пример с 4 labs
Xs = gcat(labindex)
res = gop(@F, x)
res = gop(@F, x, targetlab)
Аргументы
F Функция, которая действует во всех lab.
x Аргумент для функции F, должен быть одной и той же переменной
во всех lab, но может иметь различные значения.
res Переменная для сохранения результата.
targetlab Рабочий процесс, которому возвращается результат.
F(F(x1,x2),F(x3,x4))
Примеры
res = gop(@plus,x)
for i=1:REPS
tStart = tic; total = 0;
for j=1:nsum,
total = total + besselj(j,REPS);
end
tElapsed = toc(tStart);
minTime = min(tElapsed, minTime);
end
averageTime = toc/REPS;