430 likes | 544 Views
Chapter 15 C-implementation PA = LU. Speaker: Lung-Sheng Chien. OutLine. Data structure of full matrix Implementation of PA=LU Visual Studio 2005: How To Linux machine: How to compile. row-major versus col-major. Logical index : 2D. col-major based. 6. -2. 2. 4. 12. -8. 6. 10.
E N D
Chapter 15 C-implementationPA = LU Speaker: Lung-Sheng Chien
OutLine • Data structure of full matrix • Implementation of PA=LU • Visual Studio 2005: How To • Linux machine: How to compile
row-major versus col-major Logical index : 2D col-major based 6 -2 2 4 12 -8 6 10 3 -13 9 3 6 -2 2 4 -6 4 1 -18 12 -8 6 10 3 -13 9 3 row-major based -6 4 1 -18 6 -2 2 4 12 -8 6 10 We choose col-major representation 3 -13 9 3 -6 4 1 -18
col-major: C starts index from 0 0 6 1 matrix.h 2 12 3 3 -6 4 -2 5 -8 6 -13 7 col-major based 4 8 legal 2 9 6 10 9 11 1 12 is useless 1 6 -2 2 4 13 4 is forbidden 2 12 -8 6 10 10 14 3 3 -13 9 3 3 15 -6 4 1 -18 -18 16
Relaxation for high precision package global.h Large 1D array, “int” is 4-byte, only supports up to 2G elements We use col-major, however you can implement both. http://crd.lbl.gov/~dhbailey/mpdist/
Data structure of matrix and its method matrix.h constructor (建構子): zeros Arithmetic: matvec, matsub, norm 1 4 destructor (解構子): dealloc I/O: disp 2 5 Index rule: we do it explicitly 3
matrix.cpp constructor [1] empty handler 1 1 set parameter 5 2 2 3 contiguous memory block 4 3 6 1 2 12 3 3 5
matrix.cpp constructor [2] 0 6 1 4 2 12 3 3 -6 4 low -2 5 -8 6 1 -13 7 high 4 8 2 2 9 3 6 10 9 11 4 4 1 12 pointer arithmetic 13 4 10 14 3 15 5 -18 16
destructor 0 matrix.cpp 6 1 2 12 3 3 -6 1 4 -2 5 2 -8 6 3 -13 7 4 free pointer array 1 8 2 free physic storage 2 9 6 10 9 11 free matrix handler 1 12 3 13 4 10 14 3 15 -18 16
Input/Output matrix.cpp 6 -2 2 4 12 -8 6 10 Show in standard form: human readable 3 -13 9 3 -6 4 1 -18
Simple driver main.cpp Execution result
duplicate of a matrix / vector matrix.cpp verification We require matrix handler to verify configuration, this is very important for debugging.
y = Ax matrix.cpp Outer-product formulation
Matrix / vector norm matrix.cpp Maximum of absolute column sum Maximum of absolute row sum 2-norm is difficult to compute, we will discuss this later
OutLine • Data structure of full matrix • Implementation of PA=LU • Visual Studio 2005: How To • Linux machine: How to compile
Algorithm ( PA = LU ) [1] Given full matrix , construct initial lower triangle matrix use permutation vector to record permutation matrix verification (1) we store lower triangle matrix L into storage of matrix A (2) The reason to construct type int_matrix is for permutation matrix P, since we can check dimension between A and P.
Algorithm ( PA = LU ) [2] let , and Note that P is a column vector for we have compute update original matrix stores in lower triangle matrix
Algorithm ( PA = LU ) [3] such that 1 find a , NOT efficient 2 swap row and row define permutation matrix , we have then after swapping rows
Algorithm ( PA = LU ) [4] 3 compute for if then by swapping and compute 4 then endif
Algorithm ( PA = LU ) [5] we store lower triangle matrix into storage of matrix A, this code is different from code in MATLAB. 5 decompose How to compute efficiently?
Algorithm ( PA = LU ) [6] component-wise update : Observation: we implement with column-major form, column-wise update is good
Algorithm ( PA = LU ) [7] where by updating by updating matrix (recursion is done) then endfor
Algorithm ( PA = LU ) [8] 6 -2 2 4 1 12 -8 6 10 12 -8 6 10 0.25 1 -11 7.5 0.5 3 -13 9 3 -0.5 0 1 4 -13 -6 4 1 -18 0.5 -2/11 1/11 1 3/11 Store L and U into original A Question 1: how to write down a test driver Question 2: how to do backward and forward
Test driver [1] main.cpp 6 -2 2 4 12 -8 6 10 3 -13 9 3 -6 4 1 -18 1 Remember to duplicate matrix A since A is modified when execute LU decomposition.
Test driver [2] 2 5 6 3 7 8 4 Linear solver: do backward and forward 5 -6.9306 17.9583 26.5833 6 7.3333
Exercise • Implement PA = LU. • Implement forward and backward. • Write a driver to test your linear solver. • Any other implementation for full matrix?
OutLine • Data structure of full matrix • Implementation of PA=LU • Visual Studio 2005: How To • Linux machine: How to compile
Visual Studio 2005: How To [1] Create a new project: File Project
Visual Studio 2005: How To [2] Choose Win32 console application, this is the same as what we do in VC 6.0 Project name: vc 2005 will create a directory, the same name as project name
Visual Studio 2005: How To [3] We choose “next” bottom to set an empty project, DO NOT press Finish bottom.
Visual Studio 2005: How To [4] Empty project, this is very important
Visual Studio 2005: How To [5] 3 Add “main.cpp” to this project Empty project 1 Add new item (source file or header file) to this project 2
Visual Studio 2005: How To [6] Write source code “hello world” Compile: Build Build matrix
Visual Studio 2005: How To [7] Result of compilation, including linking: success Additional directory “debug” appears Executable file “matrix.exe” in this debug directory
Visual Studio 2005: How To [8] Execute matrix.exe: Debug Start Without Debugging Execution in VC 6.0
Visual Studio 2005: How To [9] Suppose we want to add several source files into this project. 1 Copy files into directory /matrix/matrix Add source files into the project by Project Add Existing item 2
Visual Studio 2005: How To [10] Select the files you want to add All souce files in this project
Visual Studio 2005: How To [11] Remember that executable file is in directory /matrix/debug, you can use command window to execute matrix.exe
Visual Studio 2005: How To [12] There is another “debug” directory in /matrix/matrix, this directory contains object files, no executable file
OutLine • Data structure of full matrix • Implementation of PA=LU • Visual Studio 2005: How To • Linux machine: How to compile
Linux machine: How to compile [1] Suppose we put all source file into directory matrix_constructor and upload to workstation. 1 Remove all VC related files. 2 use command “qmake -project” to generate project file 3
Linux machine: How to compile [2] use command “qmake matrix_constructor.pro” to generate Makefile Later on, we will introduce Makefile 4 use command “make” to compile your codes and generate executable file 5
Linux machine: How to compile [3] Execute executable file by “./matrix_constructor” 6