ВИКОРИСТАННЯ

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

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

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

Рік:
2010
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Паралельні та розподілені обчислення
Група:
КІ-44

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

Міністерство Освіти і Науки України Національний Університет “Львівська Політехніка” Кафедра ЕОМ  ЗВІТ до лабораторної роботи № 1 з курсу “Паралельні та розподілені обчислення ” Тема: ВИКОРИСТАННЯ ФУНКЦІОНАЛЬНОЇ ДЕКОМПОЗИЦІЇ ДЛЯ РОЗВ’ЯЗКУ ОБЧИСЛЮВАЛЬНИХ ЗАДАЧ. Мета: Вивчити методи декомпозицій задач. Набути навиків розв’язування задач з використанням функціональної декомпозиції. ЗМІСТ ЗВІТУ 1.Тема, мета, аналіз завдання(згідно варіанту). 2. Схема декомпозиції задачі та коментарі до неї. 3. Текст програми та результат її роботи на довільному наборі вхідних даних, для розмірності n>3. 4. Висновки. Аналіз завдання Завдання: Варіант №25  число, Де y1, y2, Y3, b, Cij обчислюються так: y1 = A*b, де bi = 25 - для парних і, bi=25/і3 - для непарних і=1,2,...n y2 = A1 (b1 + c1) Y3 = A2 (С2 +В2 ) , де Cij =25/(i + j)3 Виконання: Дані які вводяться з клавіатури: розмірність матриць – n; матриці A, A1, A2, B2 ; вектори-стовпці b1,c1 . Ці дані треба вводити з клавіатури, або генерувати випадковим чином n –генерувати не треба. Елементи матриць та векторів є цілими додатними числами, більшими за нуль. Вектор-стовпець b та матриця C2 обраховуються, відповідно до розмірності, значення їх елементів завжди менші одиниці і різко зменшуються зі збільшенням розмірності n. Під час обчислення y1 результатом множення матриці А на вектор-стовпець b має бути вектор-стовпець, елементами, якого є дробові числа. Під час обчислення y2 результатом додавання двох вектор-стовпців буде вектор-стовпець. При множенні матриці А1 на результат додавання b1+c1, отримаємо вектор-стовпець. При обчисленні Y3 отримаємо матрицю з дробових чисел. В обчисленні загального виразу приймають участь три різні елементи – два вектори стовпці y1, y2 та матриця Y3. Остаточним результатом є число. Схема декомпозиції задачі  Код програми //matrix.cpp #include "matrix.h" #include <stdio.h> #include <iostream> #include <string.h> #include <assert.h> #include <iomanip> #include <stdlib.h> #include <shlwapi.h> using namespace std; Calculate_Matrix::Calculate_Matrix(const int i,const int j) { x=i; y=j; mas = new double*[x]; for(int k=0;k<=x;k++) { mas[k] = new double[y]; } } void Calculate_Matrix::put(const int i, const int j,const double z) { mas[i][j]=(double )z; } double Calculate_Matrix::get( int i, int j) { return mas[i][j]; } void Calculate_Matrix::madd(const Calculate_Matrix a, const Calculate_Matrix b) { for(int k=0; k<a.x; k++) for(int m=0; m<a.y; m++) mas[k][m] = a.mas[k][m]+b.mas[k][m]; } void Calculate_Matrix::transp(const Calculate_Matrix a) { for(int k=0; k<y; k++) mas[0][k] = a.mas[k][0]; } void Calculate_Matrix::mmul(const Calculate_Matrix a, const Calculate_Matrix b) { Calculate_Matrix(a.x,b.y); for(int i=0; i<a.x; i++) for(int j=0; j<b.y; j++) { double s=0; for(int k=0; k<a.y; k++) s+=a.mas[i][k]*b.mas[k][j]; mas[i][j]=s; } } void Calculate_Matrix::print() { for(int k=0; k<x; k++) { for(int m=0; m<y; m++) cout<<setw(15)<<fixed<<mas[k][m]<<" "; cout<<endl; } cout<<endl;; } bool isNumber(const string str) { unsigned length = str.length(); for (unsigned i=0; i<length; ++i) if(str[i]>'9' || str[i]<'0') return false; return true; } void Calculate_Matrix::input() { int mn; char ch[64]; for(int i=0; i<x; i++) for(int j=0; j<y; j++) { cout<<endl<<"element ["<<i<<"]["<<j<<"]="; cin>>ch; if(isNumber(ch)) { mn = atoi(ch); mas[i][j]=mn; } else { cout << "Vvedit' chyslo"<<endl; cout<<endl<<"element ["<<i<<"]["<<j<<"]="; cin>>ch; mn = atoi(ch); mas[i][j]=mn; } } cout<<endl; } //main.cpp #include <iostream> #include <stdlib.h> #include "matrix.h" #include <stdio.h> #include <math.h> #include <conio.h> #include <ctype.h> using namespace std; int main(int argc, char* argv[]) { int i,j; int n; double buf; char choice; char choice1; cout<<"This program calculate expression:"<<endl<<endl<< "X=(y1'*Y3*y2+y2')*(Y3*Y3*Y3*y1+y1+y1*y2'*Y3*y1)"<<endl<<endl; cout<<"y1=A*b - vector"<<endl; cout<<"y2=A1(b1+c1) - vector"<<endl; cout<<"Y3=A2(B2+C2) - matrix"<<endl; cout<<"Matrix A, A1, A2, B2 Enter on keyboard else generate random."<<endl<<endl; cout<<"=============================================================="<<endl; do{ cout<<"Enter the size of matrix :"; cin>>n; cout<<endl; //if(n<3||n>=18) //{ // cout<<"Incorect ""n"", please enter ""n"" within 3<=n<=18!!!"<<endl; //} // else{ cout<<"Enter data of keyboard Y/N?:"; cin>>choice; cout<<endl; Calculate_Matrix y1(n,1),y2(n,1),Y3(n,n), X(1,1); Calculate_Matrix YY2(n,n), mul1(1,n),YY3(n,n),Y3y1(n,1),y1y2t(n,1), YY3y1(n,1), ty1(1,n),ty2(1,n), ty1Y3(1,n); Calculate_Matrix C2(n,n),B2(n,n),A2(n,n),b1(n,1),c1(n,1),A1(n,n),b(n,1),A(n,n),st2BC(n,n),st2bc(n,1); // state 1 cout<<endl<<endl<<"state 1"<<endl; if(choice=='y') { cout<<"Please enter only namber of 1 to 100"<<endl; cout<<"Input B2:"; B2.input(); cout<<"Input A2:"; A2.input(); cout<<"Input A1:"; A1.input(); cout<<"Input b1:"; b1.input(); cout<<"Input c1:"; c1.input(); cout<<"Input A:"; A.input(); for(i=0;i<=n;i++){ for(j=0;j<=n;j++) { buf=(double)25/((i+j+1)*(i+j+1)*(i+j+1)); C2.put(i,j,buf); } } for(i=0;i<n;i++) { b.put(i,0,(double )fmod((double )(i+1),(double )2)>0 ? ((double )25/((i+1)*(i+1))):((double )25)); } } else{ for(i=0;i<=n;i++) for(j=0;j<=n;j++) { buf=(double)25/((i+j+1)*(i+j+1)*(i+j+1)); C2.put(i,j,buf); } cout<<endl<<endl<<"C2"<<endl; C2.print(); for(i=0;i<n;i++) for(j=0;j<n;j++) B2.put(i,j,(double)rand() / (RAND_MAX + 1) * n ); cout<<endl<<endl<<"B2"<<endl; B2.print(); for(i=0;i<n;i++) for(j=0;j<n;j++) A2.put(i,j,(double)rand() / (RAND_MAX + 1) * n); cout<<endl<<endl<<"A2"<<endl; A2.print(); for(i=0;i<n;i++) b1.put(i,0,(double)rand()/ (RAND_MAX + 1) * n); cout<<endl<<endl<<"b1"<<endl; b1.print(); for(i=0;i<n;i++) c1.put(i,0,(double)rand()/ (RAND_MAX + 1) * n); cout<<endl<<endl<<"c1"<<endl; c1.print(); for(i=0;i<n;i++) for(j=0;j<n;j++) A1.put(i,j,(double)rand() / (RAND_MAX + 1) * n); cout<<endl<<endl<<"A1"<<endl; A1.print(); for(i=0;i<n;i++) b.put(i,0,(double )fmod((double )(i+1),(double )2)>0 ? ((double )25/((i+1)*(i+1))):((double )25)); cout<<endl<<endl<<"b"<<endl; b.print(); for(i=0;i<n;i++) for(j=0;j<n;j++) A.put(i,j,(double)rand() / (RAND_MAX + 1) * n); cout<<endl<<endl<<"A"<<endl; A.print(); } // state 2 cout<<endl<<endl<<"state 2"<<endl; st2BC.madd(B2,C2); cout<<endl<<endl<<"B2+C2"<<endl; st2BC.print(); st2bc.madd(b1,c1); cout<<endl<<endl<<"b1+c1"<<endl; st2bc.print(); //state 3 cout<<endl<<endl<<"state 3"<<endl; Y3.mmul(A2,st2BC); cout<<endl<<endl<<"Y3=A2*(B2+C2)"<<endl; Y3.print(); y2.mmul(A1,st2bc); cout<<endl<<endl<<"y2=A1*(b1+c1)"<<endl; y2.print(); y1.mmul(A,b); cout<<endl<<endl<<"y1=A*b"<<endl; y1.print(); //state 4 cout<<endl<<endl<<"state 4"<<endl; ty1.transp(y1); ty1Y3.mmul(ty1,Y3); cout<<endl<<endl<<"y1'*Y3"<<endl; ty1Y3.print(); //state 5 cout<<endl<<endl<<"state 5"<<endl; ty1.mmul(ty1Y3,y2); cout<<endl<<endl<<"y1'*Y3*y2"<<endl; ty1.print(); YY2.mmul(Y3,Y3); YY3.mmul(YY2,Y3); cout<<endl<<endl<<"Y3*Y3*Y3"<<endl; YY3.print(); //state 6 cout<<endl<<endl<<"state 6"<<endl; ty2.transp(y2); mul1.madd(ty1, ty2); cout<<endl<<endl<<"y1'*Y3*y2+y2'"<<endl; mul1.print(); YY3y1.mmul(YY3,y1); cout<<endl<<endl<<"Y3*Y3*Y3*y1"<<endl; YY3y1.print(); Y3y1.mmul(Y3,y1); cout<<endl<<endl<<"Y3*y1"<<endl; Y3y1.print(); y1y2t.mmul(y1,ty2); cout<<endl<<endl<<"y1*y2'"<<endl; y1y2t.print(); //state 7 cout<<endl<<endl<<"state 7"<<endl; YY3y1.madd(YY3y1,y1); cout<<endl<<endl<<"Y3*y1+y1"<<endl; YY3y1.print(); Y3y1.mmul(Y3y1,y1y2t); cout<<endl<<endl<<"y1*y2'*Y3*y1"<<endl; Y3y1.print(); //state 8 cout<<endl<<endl<<"state 8"<<endl; Y3y1.madd(Y3y1,YY3y1); cout<<endl<<endl<<"Y3*Y3*Y3*y1+y1+y1*y2'*Y3*y1"<<endl; Y3y1.print(); //state 9 cout<<endl<<endl<<"state 9"<<endl; X.mmul(mul1,Y3y1); cout<<endl<<endl<<"X= "; X.print(); cout<<"======================================================="<<endl<<endl; //} cout<<"Do you want calculate y/n?"<<endl; cout<<"Press any key and press enter for exit."<<endl; cin>>choice1; } while(choice1=='y'); getch(); return 0; } Результати виконання: This program calculate expression: X=(y1'*Y3*y2+y2')*(Y3*Y3*Y3*y1+y1+y1*y2'*Y3*y1) y1=A*b - vector y2=A1(b1+c1) - vector Y3=A2(B2+C2) - matrix Matrix A, A1, A2, B2 Enter on keyboard else generate random. ============================================================== Enter the size of matrix :4 Enter data of keyboard Y/N?:n state 1 C2 25.000000 3.125000 0.925926 0.390625 3.125000 0.925926 0.390625 0.200000 0.925926 0.390625 0.200000 0.115741 0.390625 0.200000 0.115741 0.072886 B2 0.005005 2.254272 0.773193 3.234863 2.339966 1.919434 1.401123 3.583740 3.291260 2.986328 0.696411 3.435669 2.841919 2.054077 1.215942 0.059937 A2 0.365601 1.457764 0.589233 0.663574 3.953979 1.782715 0.476318 0.018677 0.035645 1.511475 2.126587 2.284668 2.406982 2.428589 0.664917 2.652100 b1 1.803101 1.408447 0.228149 2.430664 c1 3.133179 3.210327 2.079468 1.207764 A1 3.503784 2.906616 3.823486 3.702759 2.157349 0.569336 1.848267 0.941284 3.448853 0.838379 3.118530 3.374512 3.987061 3.998657 2.445923 1.569702 b 25.000000 25.000000 2.777778 25.000000 A 1.064819 1.189087 3.360474 0.094971 1.503418 0.370483 2.708740 0.224854 0.035156 3.675049 1.103516 1.091553 2.351563 2.764648 3.350342 2.905884 state 2 B2+C2 25.005005 5.379272 1.699119 3.625488 5.464966 2.845360 1.791748 3.783740 4.217186 3.376953 0.896411 3.551410 3.232544 2.254077 1.331683 0.132823 b1+c1 4.936279 4.618774 2.307617 3.638428 state 3 Y3=A2*(B2+C2) 21.738413 9.600088 4.645010 9.022027 110.680849 27.992601 10.364307 22.774519 25.504950 16.823632 7.717496 13.704094 84.835869 28.081453 12.568965 20.629288 y2=A1*(b1+c1) 53.016025 20.968796 40.371074 49.505642 y1=A*b 68.056573 59.993150 123.109266 209.858873 state 4 y1'*Y3 29062.990324 10297.000639 4525.714995 7996.663365 state 5 y1'*Y3*y2 2335307.847335 59.993150 123.109266 209.858873 Y3*Y3*Y3 207412.424162 70410.723661 30671.494458 58748.212650 682375.292202 231205.930326 100626.736752 192470.788185 316633.358142 107649.052289 46931.560949 89944.074951 613800.143679 208118.692634 90614.878318 173407.717982 state 6 y1'*Y3*y2+y2' 2335360.863360 80.961946 163.480340 259.364515 Y3*Y3*Y3*y1 34444718.779179 113090682.405554 52660459.247029 101805509.712024 Y3*y1 4520.577531 15267.300631 6571.103114 13334.928551 y1*y2' 3608.088961 3180.598363 6526.763942 11125.883251 state 7 Y3*y1+y1 34444786.835752 113090742.398705 52660582.356295 101805719.570897 y1*y2'*Y3*y1 16310645.885889 55085778.868387 23709124.604420 48113608.497837 state 8 Y3*Y3*Y3*y1+y1+y1*y2'*Y3*y1 50755432.721641 168176521.267091 76369706.960715 149919328.068734 state 9 X= 118597235778948.250000 Do you want calculate y/n? Press any key and press enter for exit. Висновок: В даній лабораторні роботі використовується паралелізм на рівні підзадач, бо кожен блок зі схеми декомпозиції є реалізований у виді функції. Відповідно це середньоблоковий паралелізм. В результаті виконання даної лабораторної роботи вивчив методи декомпозицій задач. Набув навики розв’язування задач з використанням функціональної декомпозиції.
Антиботан аватар за замовчуванням

19.11.2012 18:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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