Kronecker product: Difference between revisions
→{{header|REXX}}: refurbished
Walterpachl (talk | contribs) (→{{header|REXX}}: refurbished) |
|||
Line 3,501:
=={{header|REXX}}==
A little extra coding was added to make the matrix glyphs and elements alignment look nicer.
<syntaxhighlight lang="rexx">/*REXX program calculates the
w=
Call showMat what,arows*brows||'X'||arows*bcols
Say ''
Say copies('|',55)
bMat= 3x4 1 1 1 1 1 0 0 1 1 1 1 1 /* " B " " " " */▼
Say ''
call makeMat 'A', aMat /*construct A matrix from elements.*/▼
Call KronMat 'Kronecker product' /* calculate the Kronecker product */
Call showMat what,arows*brows||'X'||arows*bcols
Exit
/*--------------------------------------------------------------------*/
makemat:
Parse Arg what,size elements /*elements: e.1.1 e.1.2 - e.rows cols*/
@.what.#.##=xy; w= max(w, length(xy) )▼
Parse Var size rows 'X' cols
end /*cB*/▼
x.what.shape=rows cols
end /*cA*/▼
n=0
Do r=1 To rows
Do c=1 To cols
n=n+1
element=word(elements,n)
w=max(w,length(element))
End
▲ @.what.r.c=_
End
Return
▲ call showMat what, size; return
/*--------------------------------------------------------------------*/
kronmat: /* compute the Kronecker Product */
Parse Arg what
say; say $ copies('═',7) "matrix" what copies('═',7)▼
Parse Var x.a.shape arows acols
do r=1 for row; _= '│' /*start with long vertical bar*/▼
Parse Var x.b.shape brows bcols
rp=0
Do ra=1 To arows
Do rb=1 To brows
say $ $ _ '│' /*append a long vertical bar. */▼
rp=rp+1
cp=0
Do ca=1 To acols
x=x.a.ra.ca
Do cb=1 To bcols
y=x.b.rb.cb
xy=x*y
x.what.rp.cp=xy /* element of product */
End /* rB */
End /* rA */
Return
/*--------------------------------------------------------------------*/
showmat:
Parse Arg what,size .
Parse Var size rows 'X' cols
z='+'
b6=left('',6)
Say ''
Say b6 b6 '+'copies('-',cols*(w+1)+1)'+'
Do r=1 To rows
▲ line='|' right(x.what.r.1,w) /* element of first column
Do c=2 To cols /* loop for other columns */
line=line right(x.what.r.c,w) /* append the elements */
End /* c */
End /* r */
Say b6 b6 '+'copies('-',cols*(w+1)+1)'+'
Return
</syntaxhighlight>
{{out|output|text= when using the default inputs:}}
<pre>
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
=={{header|Ring}}==
|