ВИКОРИСТАННЯ ФУНКЦІОНАЛЬНОЇ ДЕКОМПОЗИЦІЇ ДЛЯ РОЗВ’ЯЗКУ ОБЧИСЛЮВАЛЬНИХ ЗАДАЧ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Паралельні та розподілені обчислення

Частина тексту файла (без зображень, графіків і формул):

Мiнiстерство освiти і науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ  Лабораторна робота №1 з диципліни: «Паралельні і розподілені обчислення» на тему: «ВИКОРИСТАННЯ ФУНКЦІОНАЛЬНОЇ ДЕКОМПОЗИЦІЇ ДЛЯ РОЗВ’ЯЗКУ ОБЧИСЛЮВАЛЬНИХ ЗАДАЧ» МЕТА РОБОТИ. Вивчити методи декомпозицій задач. Набути навиків розв’язування задач з використанням функціональної декомпозиції. Завдання: Вираз, який слід обрахувати, заданий наступним чином: x = (4y1y2’y2)’(y2y1’+y2y1’Y3)y2; При чому елементи  визначаються згідно правил: y1=A×b, де для парних bi=19/(i2+1) для непарних bi=19, і=1,2,...n y2=A1(b1+19c1); Y3 = A2(C2+B2), де Cij=19/(i+2j)3 Послідовність виконання. 1.  Аналіз завдання. Для заданого виразу вхідними даними є: розмірність матриць – n; матриці ; вектори-стовпці . Ці параметри повинні вводитися з клавіатури, або генеруватися випадковим чином (крім розмірності). При чому, елементи всіх матриць та векторів є цілими додатними числами, більшими за нуль. Вектор-стовпець  та матриця  обраховуються, виходячи з уведеної розмірності, зауважимо, що значення їх елементів завжди менші одиниці і різко спадають зі збільшенням розмірності. Наприклад для n=3, значення вектора-стовпця  будуть становити: b1=19; b2=19/(22+1)=3.8; b3=19,а значення матриці , відповідно: C11=0,5 C12=0,333 C13=0,25 C21=0,333 C22=0,250 C23=0,2 C31=0,250 C32=0,2 C33=0,1667 При утворенні  враховуємо, що результатом множення матриці А на вектор-стовпець b є вектор-стовпець, елементи якого будуть раціональними числами(тобто матимуть значущу дробову частину). При утворенні  враховуємо, що результатом додавання двох векторів-стовпців є вектор-стовпець, елементи якого можуть бути більшими за нуль цілими числами. Далі, при множенні цілочисельної додатної матриці А1 на результат додавання, отримаємо вектор-стовпець з цілочисельними елементами. При утворенні  враховуємо, що присутні лише операції додавання та множення, а тому вихідний результат може бути додатнім або відємним і завжди матиме значущу дробову частину. Таким чином, згідно поставленої задачі, в обчисленні загального виразу приймають участь три різні елементи – два вектори стовпці  та матриця . Виконанні виразу отримаємо число так як перший множний вектор-рядок, другий матрица, а третій стовпець. Таким чином, з попереднього випливає, що остаточний результат є число, яке може бути як додатними так і від’ємними і завжди має дробову частину. 2.  Декомпозиція задачі. Однозначно, всі обчислення безпосередньо залежать від розмірності даних, тому найперше, слід забезпечити ввід змінної n, що визначає цю розмірність. Далі, можна паралельно виконувати обчислення значень вектора b та матриці С2, оскільки вони незалежні від інших параметрів. Крім того, на тому ж рівні декомпозиції слід визначати вхідні дані, тобто вводити з клавіатури, або генерувати випадковим чином матриці  та вектори-стовпці . Наступний рівень декомпозиції – це знаходження елементів виразу. Значення  залежить від введеної матриці А та обрахованого вектора b. Значення  залежить від введеної А1 та різниці векторів b1 і c1, тому знайти його можна лише після обчислення (b1 - c1). Зауважимо, що множення на константу не є окремою операцією, як і транспонування векторів. Аналогічно, знаходимо . Подальша декомпозиція відбувається згідно заданої послідовності операцій та врахування залежностей отриманих на кожному рівні даних. Повна схема декомпозиції обчислення заданого виразу приведена нижче. 3.   Об’єднання частин виразу проведено безпосередньо у схемі декомпозиції, оскільки воно однозначно визначається порядком обчислень. 4.   Для написання програми, що ілюструє процес обчислення виразу згідно розробленої схеми декомпозиції, слід врахувати наступні особливості: Дані, що вводяться з клавіатури, або генеруються випадковим чином повинні бути цілими числами, більшими за нуль. Результати проміжних обрахунків будуть містити дробову частину, виняток складає лише елемент y2. Тому слід обирати відповідний тип даних(багатобайтний). Оскільки на окремо взятому рівні декомпозиції обраховуються незалежні частини підвиразів, функції що їх програмно реалізують повинні викликатися псевдо-одночасно.(Тобто перш ніж виконувати будь яку функцію третього рівня, слід виконати всі функції другого рівня і т.д.) Схема декомпозиції обчислення виразу 5. Текст програми n = input('n = '); %n - створюється змінанна,її тим визначається згідно з тим що їй присвоюється, може бути число, вектор, матриця, рядок r = input('Щоб задати масиви вручну введіть 1, рандомом 2: '); %input() функція для зчитування значення з клавіатури, параметром є рядок який буде виводитись if (r == 2) %if - оператор if закінчується оператором end A = randint(n,n,10); %A - змінна, randint - генерація масиву цілих чисел, параметри n - к-сть рядків, n - к-сть стовпців, 10 - діапазон чисел що генеруються 0..10 mess = 'A = '; %mess - рядкова змінна для запису в файл, всі рядки заключаються в одинарні лапки dlmwrite('1.txt', mess, 'delimiter', ''); %dlmwrite - функція запису в файл dlmwrite('1.txt', A, '-append','delimiter', '\t', 'precision',15); %вона має наступні параметри '1.txt' - файл, A - Змінна яку треба записати,'-append' - дописувати в файл, 'delimiter' - задати явно розділювач для елементів матриці, '\t' - розділювач, 'precision' - задати точність типу double, 15 - число має складатись з 15 знаків A1 = randint(n,n,10); mess = 'A1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', A1, '-append','delimiter', '\t', 'precision',15); b1 = randint(n,1,10); mess = 'b1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', b1, '-append','delimiter', '\t', 'precision',15); c1 = randint(n,1,10); mess = 'c1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', c1, '-append','delimiter', '\t', 'precision',15); A2 = randint(n,n,10); mess = 'A2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', A2, '-append','delimiter', '\t', 'precision',15); B2 = randint(n,n,10); mess = 'B2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', B2, '-append','delimiter', '\t', 'precision',15); else A = randint(n,n,10); A1 = randint(n,n,10); b = randint(n,1,10); b1 = randint(n,1,10); c1 = randint(n,1,10); A2 = randint(n,n,10); B2 = randint(n,n,10); C2 = randint(n,n,10); for i = 1:n %Вкладений цикл for змынна і набуває значень від 1 до n for j = 1:n %Внутрішній цикл for змінна j набуває значень від 1 до n A(i,j) = input('A[i,j] = '); % end %Завершує внутрішній цикл end %Завершує зовнішній цикл for i = 1:n for j = 1:n A1(i,j) = input('A1[i,j] = '); end end for i = 1:n b1(i) = input('b1[i] = '); end b1 = b1'; % b = b' - операція транспонування оператор ' транспонує матрицю. for i = 1:n c1(i) = input('c1[i] = '); end c1 = c1'; for i = 1:n for j = 1:n A2(i,j) = input('A2[i,j] = '); end end for i = 1:n for j = 1:n B2(i,j) = input('B2[i,j] = '); end end end; for i = 1:n if(mod(i,2)==0) b(i) = 19/(i^2+1); else b(i) = 19; end; end mess = 'b = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', b', '-append','delimiter', '\t', 'precision',15); y1 = A*b'; %y1 = A*b' - множення матриці на стовбець, b - було рядком, після транспонації стало стовпцем mess = 'y1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', y1, '-append'); t0 = 2*c1; t1 = b1+t0; mess = 'b1+2c1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t1, '-append'); y2 = A1*t1; mess = 'y2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', y2, '-append'); for i = 1:n for j = 1:n C2(i,j) = 1/(i+j); end end mess = 'C2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', C2, '-append','delimiter', '\t', 'precision',15); t2 = B2+C2; mess = 'B2+C2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t2, '-append','delimiter', '\t', 'precision',15); Y3 = A2*t2; mess = 'Y3 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', Y3, '-append','delimiter','\t'); t3 = 4*y1; mess = '4*y1 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t3, '-append','delimiter', '\t', 'precision',15); t4 = t3*y2'; mess = '4*y1*y2" = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t4, '-append','delimiter', '\t', 'precision',15); t5 = t4*y2; t5 = t5'; mess = '(4*y1*y2"*y2)" = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t5, '-append','delimiter', '\t', 'precision',15); t6 = y2*y1'; mess = 'y2*y1" = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t6, '-append','delimiter', '\t', 'precision',15); t7 = y2*y1'; mess = 'y2*y1" = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t7, '-append','delimiter', '\t', 'precision',15); t8 = t7*Y3; mess = 'y1*y2"*Y3 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t8, '-append','delimiter', '\t', 'precision',15); t9 = t6+t8; mess = '(y2*y1" + y1*y2"*Y3) = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t9, '-append','delimiter', '\t', 'precision',15); t10 = t5*t9; mess = '(4*y1*y2"*y2)"*(y2*y1" + y1*y2"*Y3) = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', t10, '-append','delimiter', '\t', 'precision',15); x = t10*y2; mess = 'х = (4*y1*y2"*y2)"*(y2*y1" + y1*y2"*Y3)* y2 = '; dlmwrite('1.txt', mess,'-append', 'delimiter', ''); dlmwrite('1.txt', x, '-append','delimiter', '\t', 'precision',15); 6. Результати виконання програми x = (4*y1*y2"*y2)"*(y2*y1" + y1*y2"*Y3)* y2 = 9.17992293948633e+016 Висновки В роботі використано паралелізм на рівні підзадач, оскільки передбачається, що кожен блок зі схеми декомпозиції є реалізований у виді функції. Це є середньоблоковий паралелізм. Обмін даними відбувається через використання спільних змінних. Присутня залежність даних між різними рівнями декомпозиції, але в межах одного рівня її немає. Є залежність за керуванням, оскільки послідовність обчислювального процесу наперед однозначно відома. Залежність за ресурсами та вводом/виводом може бути визначена лише у відношенні до певної обчислювальної системи.
Антиботан аватар за замовчуванням

31.03.2013 01:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!