Kronecker product: Difference between revisions
Content added Content deleted
(Added Ada.) |
|||
Line 196: | Line 196: | ||
0 0 0 0 1 0 0 1 0 0 0 0 |
0 0 0 0 1 0 0 1 0 0 0 0 |
||
0 0 0 0 1 1 1 1 0 0 0 0 |
0 0 0 0 1 1 1 1 0 0 0 0 |
||
</pre> |
|||
=={{header|Ada}}== |
|||
{{works with|Ada|Ada|83}} |
|||
<lang Ada>with Ada.Text_IO; |
|||
with Ada.Integer_Text_IO; |
|||
procedure Kronecker_Product is |
|||
type Matrix is array (Positive range <>, Positive range <>) of Integer; |
|||
function "*"(Left, Right : in Matrix) return Matrix is |
|||
result : Matrix |
|||
(1 .. Left'Length(1) * Right'Length(1), |
|||
1 .. Left'Length(2) * Right'Length(2)); |
|||
LI : Natural := 0; |
|||
LJ : Natural := 0; |
|||
begin |
|||
for I in 0 .. result'Length(1) - 1 loop |
|||
for J in 0 .. result'Length(2) - 1 loop |
|||
result (I + 1, J + 1) := |
|||
Left(Left'First(1) + (LI), Left'First(2) + (LJ)) |
|||
* Right |
|||
(Right'First(1) + (I mod Right'Length(1)), |
|||
Right'First(2) + (J mod Right'Length(2))); |
|||
if (J+1) mod Right'Length(2) = 0 then |
|||
LJ := LJ + 1; |
|||
end if; |
|||
end loop; |
|||
if (I+1) mod Right'Length(1) = 0 then |
|||
LI := LI + 1; |
|||
end if; |
|||
LJ := 0; |
|||
end loop; |
|||
return result; |
|||
end "*"; |
|||
Left1 : constant Matrix := ((1, 2), (3, 4)); |
|||
Right1 : constant Matrix := ((0, 5), (6, 7)); |
|||
result1 : constant Matrix := Left1 * Right1; |
|||
Left2 : constant Matrix := ((0, 1, 0), (1, 1, 1), (0, 1, 0)); |
|||
Right2 : constant Matrix := ((1, 1, 1, 1), (1, 0, 0, 1), (1, 1, 1, 1)); |
|||
result2 : constant Matrix := Left2 * Right2; |
|||
begin |
|||
for I in result1'Range(1) loop |
|||
for J in result1'Range(2) loop |
|||
Ada.Integer_Text_IO.Put(Ada.Text_IO.Standard_Output, result1(I, J)); |
|||
end loop; |
|||
Ada.Text_IO.New_Line; |
|||
end loop; |
|||
Ada.Text_IO.New_Line; |
|||
for I in result2'Range(1) loop |
|||
for J in result2'Range(2) loop |
|||
Ada.Integer_Text_IO.Put(Ada.Text_IO.Standard_Output, result2(I, J)); |
|||
end loop; |
|||
Ada.Text_IO.New_Line; |
|||
end loop; |
|||
end Kronecker_Product;</lang> |
|||
{{out}} |
|||
<pre> 0 5 0 10 |
|||
6 7 12 14 |
|||
0 15 0 20 |
|||
18 21 24 28 |
|||
0 0 0 0 1 1 1 1 0 0 0 0 |
|||
0 0 0 0 1 0 0 1 0 0 0 0 |
|||
0 0 0 0 1 1 1 1 0 0 0 0 |
|||
1 1 1 1 1 1 1 1 1 1 1 1 |
|||
1 0 0 1 1 0 0 1 1 0 0 1 |
|||
1 1 1 1 1 1 1 1 1 1 1 1 |
|||
0 0 0 0 1 1 1 1 0 0 0 0 |
|||
0 0 0 0 1 0 0 1 0 0 0 0 |
|||
0 0 0 0 1 1 1 1 0 0 0 0 |
|||
</pre> |
</pre> |
||