33 puts(
"############ Basic Matrix Algebra ###############");
38 matrix_t matrix1[3][4] = { { 0.2785, 0.9649, 0.9572, 0.1419 },
39 { 0.5469, 0.1576, 0.4854, 0.4218 },
40 { 0.9575, 0.9706, 0.8003, 0.9157 },
43 matrix_t matrix2[3][4] = { { 0.7922, 0.0357, 0.6787, 0.3922 },
44 { 0.9595, 0.8491, 0.7577, 0.6555 },
45 { 0.6557, 0.9340, 0.7431, 0.1712 },
50 matrix_t diag_vec[3] = { 1.1, 2.3, 3.5 };
52 matrix_add(m, n, matrix1, matrix2, res_matrix);
53 printf(
"matrix1 + matrix2 = ");
56 matrix_sub(m, n, matrix1, matrix2, res_matrix);
57 printf(
"matrix1 - matrix2 = ");
61 printf(
"trans(matrix2) = ");
64 matrix_mul(m, n, matrix1, n, m, trans_matrix, res_mul_matrix);
65 printf(
"matrix1 x matrix2 = ");
69 printf(
"dig_matrix = ");
73 printf(
"dig_matrix = ");
77 { 0.8147, 0.0975, 0.1576, 0.1419, 0.6557 },
78 { 0.9058, 0.2785, 0.9706, 0.4218, 0.0357 },
79 { 0.1270, 0.5469, 0.9572, 0.9157, 0.8491 },
80 { 0.9595, 0.8491, 0.7577, 0.6555, 0.6787 },
81 { 0.6557, 0.9340, 0.7431, 0.1712, 0.9595 },
85 printf(
"swapped matrix3 = ");
88 puts(
" *** Test Partial Matrix Multiplication *** ");
91 { 0.8147, 0.9706, 0.8491, 0.0462, 0.1869, 0.4984, 0.5472 },
92 { 0.9058, 0.9572, 0.9340, 0.0971, 0.4898, 0.9597, 0.1386 },
93 { 0.1270, 0.4854, 0.6787, 0.8235, 0.4456, 0.3404, 0.1493 },
94 { 0.9134, 0.8003, 0.7577, 0.6948, 0.6463, 0.5853, 0.2575 },
95 { 0.6324, 0.1419, 0.7431, 0.3171, 0.7094, 0.2238, 0.8407 },
96 { 0.0975, 0.4218, 0.3922, 0.9502, 0.7547, 0.7513, 0.2543 },
97 { 0.2785, 0.9157, 0.6555, 0.0344, 0.2760, 0.2551, 0.8143 },
98 { 0.5469, 0.7922, 0.1712, 0.4387, 0.6797, 0.5060, 0.2435 },
99 { 0.9575, 0.9595, 0.7060, 0.3816, 0.6551, 0.6991, 0.9293 },
100 { 0.9649, 0.6557, 0.0318, 0.7655, 0.1626, 0.8909, 0.3500 },
101 { 0.1576, 0.0357, 0.2769, 0.7952, 0.1190, 0.9593, 0.1966 }
105 { 0.2511, 0.9172, 0.0540, 0.0119, 0.6020 },
106 { 0.6160, 0.2858, 0.5308, 0.3371, 0.2630 },
107 { 0.4733, 0.7572, 0.7792, 0.1622, 0.6541 },
108 { 0.3517, 0.7537, 0.9340, 0.7943, 0.6892 },
109 { 0.8308, 0.3804, 0.1299, 0.3112, 0.7482 },
110 { 0.5853, 0.5678, 0.5688, 0.5285, 0.4505 },
111 { 0.5497, 0.0759, 0.4694, 0.1656, 0.0838 }
115 uint8_t a_row_begin, a_row_end, a_col_begin, a_col_end;
116 uint8_t b_row_begin, b_row_end, b_col_begin, b_col_end;
122 a_row_begin = 3, a_row_end = 7;
123 a_col_begin = 2, a_col_end = 4;
124 b_row_begin = 3, b_row_end = 5;
125 b_col_begin = 1, b_col_end = 3;
127 a_row_begin, a_row_end, a_col_begin, a_col_end,
128 b_row_begin, b_row_end, b_col_begin, b_col_end,
141 puts(
" *** Test The 2-norm of a Matrix, *** ");
144 printf(
"A_two_norm = %7.4f\n", two_norm);
147 { -0.2743, -4.9913, 0.3375, -6.5684, -6.9048 },
148 { -4.9657, -2.0716, -4.7133, -2.7536, -4.3030 },
149 { -0.4857, -3.2137, -0.9424, -0.7667, -5.7025 },
150 { -5.0518, -4.1867, -0.9702, 0.4721, -0.6457 },
151 { 0.4341, -0.3534, -3.9564, -5.9608, -4.5103 },
152 { -4.2001, -2.3179, -2.4574, -2.4494, -2.7717 },
153 { -5.4272, -2.6022, -6.3932, -3.2449, -5.6748 }
158 printf(
"D_two_norm = %7.4f\n", two_norm);
161 printf(
"D_frob_norm = %7.4f\n", frob_norm);
168 "*********** Test the Inverse of Upper Triangular Matrices ***********");
171 { 0.8147, 0.9706, 0.8491, 0.0462, 0.1869, 0.4984, 0.5472 },
172 { 0.0000, 0.9572, 0.9340, 0.0971, 0.4898, 0.9597, 0.1386 },
173 { 0.0000, 0.0000, 0.6787, 0.8235, 0.4456, 0.3404, 0.1493 },
174 { 0.0000, 0.0000, 0.0000, 0.6948, 0.6463, 0.5853, 0.2575 },
175 { 0.0000, 0.0000, 0.0000, 0.0000, 0.7094, 0.2238, 0.8407 },
176 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7513, 0.2543 },
177 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.8143 },
178 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 },
179 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 },
180 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 },
181 { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 }
185 puts(
"Square Matrix:");
195 puts(
"Rectangular Matrix:");
206 "*********** Test the Inverse of Lower Triangular Matrices ***********");
209 { 0.8147, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 },
210 { 0.9058, 0.9572, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 },
211 { 0.1270, 0.4854, 0.6787, 0.0000, 0.0000, 0.0000, 0.0000 },
212 { 0.9134, 0.8003, 0.7577, 0.6948, 0.0000, 0.0000, 0.0000 },
213 { 0.6324, 0.1419, 0.7431, 0.3171, 0.7094, 0.0000, 0.0000 },
214 { 0.0975, 0.4218, 0.3922, 0.9502, 0.7547, 0.7513, 0.0000 },
215 { 0.2785, 0.9157, 0.6555, 0.0344, 0.2760, 0.2551, 0.8143 },
216 { 0.5469, 0.7922, 0.1712, 0.4387, 0.6797, 0.5060, 0.2435 },
217 { 0.9575, 0.9595, 0.7060, 0.3816, 0.6551, 0.6991, 0.9293 },
218 { 0.9649, 0.6557, 0.0318, 0.7655, 0.1626, 0.8909, 0.3500 },
219 { 0.1576, 0.0357, 0.2769, 0.7952, 0.1190, 0.9593, 0.1966 }
223 puts(
"Square Matrix:");
231 puts(
"Rectangular Matrix:");
245 { 0.8147, 0.1576, 0.6557, 0.7060, 0.4387 },
246 { 0.9058, 0.9706, 0.0357, 0.0318, 0.3816 },
247 { 0.1270, 0.9572, 0.8491, 0.2769, 0.7655 },
248 { 0.9134, 0.4854, 0.9340, 0.0462, 0.7952 },
249 { 0.6324, 0.8003, 0.6787, 0.0971, 0.1869 },
250 { 0.0975, 0.1419, 0.7577, 0.8235, 0.4898 },
251 { 0.2785, 0.4218, 0.7431, 0.6948, 0.4456 },
252 { 0.5469, 0.9157, 0.3922, 0.3171, 0.6463 },
253 { 0.9575, 0.7922, 0.6555, 0.9502, 0.7094 },
254 { 0.9649, 0.9595, 0.1712, 0.0344, 0.7547 }
257 uint8_t m = 10, n = 5;
265 puts(
"++++++++++ upper triangular ++++++++++");
280 puts(
"++++++++++ lower triangular ++++++++++");