2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение19.10.2012, 07:54 


14/12/09
306
Курсовая работа.

Цель работы: получение практических навыков по использованию Win32 API для программирования механизмов межпроцессного взаимодействия (IPC).

Задача.
Реализовать нахождение обратной матрицы методом Гаусса, при этом задания по решению систем линейных уравнений распределяются поровну для каждого процесса.
Способ решения: Почтовые ящики (Mailslot)

Я вообще не знаю, как это делать. В учебнике ничего по этому поводу не сказано. В методичке даны следующие коды:
1) Создание почтового ящика.
2) Запись сообщения в почтовый ящик.
3) Чтение сообщений в почтовый ящик.

И что теперь делать? :-(
Я ещё могу понять, когда просят написать обычную программу. Но при чём здесь почтовые ящики вообще?
И как вообще начать решать линейные уравнения? И откуда их брать? И какие они должны быть? И... :facepalm:

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение19.10.2012, 08:15 
Аватара пользователя


31/10/08
1244
Вопрос:
Цитата:
И что теперь делать?

Ответ:
Решать задачу. На вашем месте я бы только радовался элементарной задачи.

Вопрос:
Цитата:
Но при чём здесь почтовые ящики вообще?

Ответ:
Цитата:
получение практических навыков по использованию Win32 API для программирования механизмов межпроцессного взаимодействия (IPC).


Вопрос:
Цитата:
И как вообще начать решать линейные уравнения?

Ответ:
Система линейнх уравнений может быть записанан матричном виде $A*X=B$
Решение системы имеет вид $X=A^{-1}*B$
Где $A^{-1}$ обратная матрица.
Цитата:
нахождение обратной матрицы методом Гаусса


Вопрос:
Цитата:
И откуда их брать?

Ответ:
Интерфейс ввода данных можете выбрать/придумать сами.
Для отладки сами составити "случайным образом".
Смотри ограничения на метод Гаусса.

Вопрос:
Цитата:
И какие они должны быть?

Смотри ограничения на метод Гаусса.

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение19.10.2012, 08:50 


14/12/09
306
Pavia, Вы можете сказать, что из себя представляет метод почтовых ящиков? Я просто не понимаю какой смысл использовать почту для решения математических задач... :-(

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение19.10.2012, 09:07 
Аватара пользователя


31/10/08
1244
Mikle1990
Почтовый ящик. Это название механизма для межпроцессного взаимодействия (IPC).
Такое назване он получил из-за аналогии с аналоговыми почтовыми ящиками.

Задача заключается не в решении математической задач. Математическу задачу вам дали в нагрузку.
Основная цель это разбить решение метематической задачи на процессы.
Для чего нужно разбивать на процесы?

Это вам должны были рассказывать на лекции. Также можеет прочитать в рекомендованнйо литературе. Или в интернете поищите(ключевое слово IPC)
В двух словах IPC применяется к примеру для распаралеливания. Что на современном многоядерном процессоре даст прирост скорости вычисления. Второе для организации связи между разными программами. Т.е. защита. К примеру имеется критический процес который читает данные с датчика и управляет мотором. И второй процес который выводи отчёт о проделанной работе. Вот им надо объмениваться данными о том сколько времени проработал мотор с какой нагрузкой. А приэтом подения второго процесса не должно вызывать падения первого. Для этого и делают разделение.

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение19.10.2012, 17:36 


14/12/09
306
1. Открываю Microsoft Visual Studio.
2. Создаю проект: Visual C++ -> Win32 -> Проект Win32
3. Создаю форму: Проект -> Добавить новый элемент -> Форма Windows Forms

Вопрос 1. В форме мне надо создавать текстбоксы - ячейки матрицы, куда человек может вписать значения или же мне надо изобразить систему линейных алгебраических уравнений, где надо проставить коэффициенты?

(Оффтоп)

Я не понимаю, мне надо иметь дело с системой линейных уравнений или только с матрицами... :facepalm:

Вопрос 2. При создании проекта, там автоматически создался некий код. Мне его не трогать или же надо почистить от того, что не понадобится? А что мне не понадобится? :|

(Оффтоп)

Код:
// MyProject.cpp: определяет точку входа для приложения.
//

#include "stdafx.h"
#include "MyProject.h"

#define MAX_LOADSTRING 100

// Глобальные переменные:
HINSTANCE hInst;                        // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];               // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];         // имя класса главного окна

// Отправить объявления функций, включенных в этот модуль кода:
ATOM            MyRegisterClass(HINSTANCE hInstance);
BOOL            InitInstance(HINSTANCE, int);
LRESULT CALLBACK   WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK   About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
   UNREFERENCED_PARAMETER(hPrevInstance);
   UNREFERENCED_PARAMETER(lpCmdLine);

   // TODO: разместите код здесь.
   MSG msg;
   HACCEL hAccelTable;

   // Инициализация глобальных строк
   LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
   LoadString(hInstance, IDC_MYPROJECT, szWindowClass, MAX_LOADSTRING);
   MyRegisterClass(hInstance);

   // Выполнить инициализацию приложения:
   if (!InitInstance (hInstance, nCmdShow))
   {
      return FALSE;
   }

   hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYPROJECT));

   // Цикл основного сообщения:
   while (GetMessage(&msg, NULL, 0, 0))
   {
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
   }

   return (int) msg.wParam;
}



//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
   WNDCLASSEX wcex;

   wcex.cbSize = sizeof(WNDCLASSEX);

   wcex.style         = CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc   = WndProc;
   wcex.cbClsExtra      = 0;
   wcex.cbWndExtra      = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYPROJECT));
   wcex.hCursor      = LoadCursor(NULL, IDC_ARROW);
   wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MYPROJECT);
   wcex.lpszClassName   = szWindowClass;
   wcex.hIconSm      = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

   return RegisterClassEx(&wcex);
}

//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND   - обработка меню приложения
//  WM_PAINT   -Закрасить главное окно
//  WM_DESTROY    - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   PAINTSTRUCT ps;
   HDC hdc;

   switch (message)
   {
   case WM_COMMAND:
      wmId    = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      // Разобрать выбор в меню:
      switch (wmId)
      {
      case IDM_ABOUT:
         DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
         break;
      case IDM_EXIT:
         DestroyWindow(hWnd);
         break;
      default:
         return DefWindowProc(hWnd, message, wParam, lParam);
      }
      break;
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      // TODO: добавьте любой код отрисовки...
      EndPaint(hWnd, &ps);
      break;
   case WM_DESTROY:
      PostQuitMessage(0);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
   UNREFERENCED_PARAMETER(lParam);
   switch (message)
   {
   case WM_INITDIALOG:
      return (INT_PTR)TRUE;

   case WM_COMMAND:
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
      {
         EndDialog(hDlg, LOWORD(wParam));
         return (INT_PTR)TRUE;
      }
      break;
   }
   return (INT_PTR)FALSE;
}

Вопрос 3. В задании написано, что обратную матрицу надо искать методом Гаусса. Здесь идёт речь именно о методе Гаусса или же о методе Гаусса-Жордана?

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение21.10.2012, 13:37 


14/12/09
306
Я до сих пор не смог разобраться. :-(

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение23.10.2012, 12:00 


10/04/12
705
1) В задании ничего не говорится про GUI. Вполне можно решить задачу средствами командной строки. Прочитать матрицу из файла, имхо, самый простой вариант.
2) Ну а дальше реализовать метод Гаусса (метод Гаусса wiki), курить про mailslot-ы (Mailslot, msdn)
3) Придумать, какую часть алгоритма будет вычислять каждый процесс, как они будут синхронизироваться, ...

 Профиль  
                  
 
 Re: Нахождение обратной матрицы методом Гаусса (Win32 API)
Сообщение08.11.2012, 02:49 


14/12/09
306
А есть что-нибудь на русском по данному вопросу?
Не знаю англ. язык :oops:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group