Rešitev: Seštevanje razpršenih matrik (Mathematica)

Iz MaFiRaWiki

Naloga: Seštevanje razpršenih matrik


Funkcija SestejElemente

S funkcijo SestejElemente sestejemo tiste elemente seznama S, ki imajo enaki prvi dve koordinati, ostale pa pustimo pri miru. {{i,j,k},{i1,j1,k1},{i,j,l}}->{{i,j,k+l},{i1,j1,l1}}

SestejElemente[seznam_List] /; Length[seznam] == 1 := seznam
SestejElemente[seznam_List] := seznam //. {l___, {m_, n_, o_},
 p___, {m_, n_, r_}, s___} -> {l, {m, n, o + r}, p, s}

In[3]:= seznam1={{1,1,1},{2,3,4},{3,2,1},{1,1,2}}
Out[3]= {{1, 1, 1}, {2, 3, 4}, {3, 2, 1}, {1, 1, 2}}

In[4]:= SestejElemente[seznam1]
Out[4]= {{1, 1, 3}, {2, 3, 4}, {3, 2, 1}}

Funkcija Odstrani

S funkcijo Odstrani odstranimo iz seznama S ničelne elemente, ki smo jih lahko dobili, ko smo uporabili funkcijo SestejElemente.

Odstrani[seznam_List] := seznam //. {l___, {m_, n_, 0}, o___} -> {l, o}

In[6]:= seznam2={{1,1,0},{1,1,1},{1,2,0},{1,2,2},{2,2,0}}
Out[6]= {{1, 1, 0}, {1, 1, 1}, {1, 2, 0}, {1, 2, 2}, {2, 2, 0}}

In[7]:= Odstrani[seznam2]
Out[7]= {{1, 1, 1}, {1, 2, 2}}

Funkcija Sestej

Sestej[m1_,m2_]:=If[m1〚1〛\[Equal]m2〚1〛&& m1〚2〛\[Equal]m2〚2〛,Matrika[m1〚1〛,m1〚2〛,
 Odstrani[SestejElemente[Sort[Join[m1〚3〛,m2〚3〛]]]]],Null]

In[9]:= matrika1 = Matrika[2, 2, {{1, 2, 1}, {2, 1, 3}, {2, 2, 2}}]
Out[9]= Matrika[2,2,{{1,2,1},{2,1,3},{2,2,2}}]

In[10]:= MatrixForm[{{0, 1}, {3, 2}}]
Out[10]= \begin{bmatrix}   0&1\\   3&2\\   \end{bmatrix}

In[11]:= matrika2 = Matrika[2, 2, {{1, 1, 5}, {1, 2, 5}, {2, 1, 1}, {2, 2, -2}}]
Out[11]= Matrika[2,2,{{1,1,5},{1,2,5},{2,1,1},{2,2,-2}}]

In[12]:= MatrixForm[{{5, 5}, {1, -2}}]
Out[12]= \begin{bmatrix}   5&5\\   1&-2\\   \end{bmatrix}
 
In[13]:= Sestej[matrika1, matrika2]
Out[13]= Matrika[2,2,{{1,1,5},{1,2,6},{2,1,4}}]

In[14]:= MatrixForm[{{5, 6}, {4, 0}}]
Out[14]= \begin{bmatrix}   5&6\\   4&0\\   \end{bmatrix}

Osebna orodja