<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Unverständliche Matrizenmultiplikation]]></title><description><![CDATA[<p>Verehrte Community,</p>
<p>anlässlich einer mir nicht verständlichen Lösung wende ich mich an euch.</p>
<p>Problem sieht wie folgt aus:<br />
Es ist eine Templateklasse &quot;Matrix&quot; gegeben, die praktisch einen zweidimensionalen Vektor darstellt. Die erste Dimension besteht aus einem normalen Vektor, der Elemente mit dem Typ &quot;MathVektor&quot; hat. Ok, davon wird also ein Feld erzeugt. Nun soll für die Matrizenklasse ein *=-Operator geschrieben werden, der als Parameter eine zweite Matrix übergeben bekommt und dann damit multipliziert.</p>
<p>Als Lösung wird das hier vorgeschlagen:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Matrix&lt;T&gt;&amp; Matrix&lt;T&gt;::operator*=(const Matrix&lt;T&gt;&amp; b) {
        if(spalten() != b.zeilen())
                throw &quot;Falsche Dimension in Matrix*=!&quot;;
        Matrix&lt;T&gt; erg(zeilen(), b.spalten());
	for(size_t i=0; i&lt;zeilen(); ++i) {
		for(size_t j=0; j&lt;b.spalten(); ++j) {
			erg[i][j] = T(0);
			for(size_t k=0; k&lt;spalten(); ++k)
				erg[i][j] += super::operator[](i)[k] * b[k][j];
		}
	}
	*this = erg;
	return *this;
}
</code></pre>
<p>Und das war meine Meinung dazu:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Matrix&lt;T&gt;&amp; Matrix&lt;T&gt;::operator*=(const Matrix&lt;T&gt;&amp; x) {
        if(!(zeilen()==x.zeilen() &amp;&amp; spalten()==x.spalten())) {
                throw &quot;Matrizen sind nicht gleich groß.&quot;;
        }

        for(int i=0; i&lt;zeilen(); ++i) {
                for(int j=0; j&lt;spalten(); ++j) {
                        super::operator[](i)[j] *= x.super::operator[](i)[j];
                }
        }
        return *this;
}
</code></pre>
<p>Kann mir jemand vllt. den Gedankengang hinter der Musterlösung erklären. Ich zweifel nämlich langsam dran, dass ich unter Matrizenmultiplikation das Richtige versteh. Meiner Meinung nach wird jedes einzelne Feld mit dem Entsprechenden der anderen Matrix multipliziert. Dann begreif ich aber nicht, was der Sinn dieser k-Schleife ist. Hab's mal versucht, mir aufzuzeichnen, bin aber damit leider auch nicht weitergekommen.</p>
<p>Danke für die Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195188/unverständliche-matrizenmultiplikation</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 21:19:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195188.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Oct 2007 10:21:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unverständliche Matrizenmultiplikation on Mon, 15 Oct 2007 10:21:27 GMT]]></title><description><![CDATA[<p>Verehrte Community,</p>
<p>anlässlich einer mir nicht verständlichen Lösung wende ich mich an euch.</p>
<p>Problem sieht wie folgt aus:<br />
Es ist eine Templateklasse &quot;Matrix&quot; gegeben, die praktisch einen zweidimensionalen Vektor darstellt. Die erste Dimension besteht aus einem normalen Vektor, der Elemente mit dem Typ &quot;MathVektor&quot; hat. Ok, davon wird also ein Feld erzeugt. Nun soll für die Matrizenklasse ein *=-Operator geschrieben werden, der als Parameter eine zweite Matrix übergeben bekommt und dann damit multipliziert.</p>
<p>Als Lösung wird das hier vorgeschlagen:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Matrix&lt;T&gt;&amp; Matrix&lt;T&gt;::operator*=(const Matrix&lt;T&gt;&amp; b) {
        if(spalten() != b.zeilen())
                throw &quot;Falsche Dimension in Matrix*=!&quot;;
        Matrix&lt;T&gt; erg(zeilen(), b.spalten());
	for(size_t i=0; i&lt;zeilen(); ++i) {
		for(size_t j=0; j&lt;b.spalten(); ++j) {
			erg[i][j] = T(0);
			for(size_t k=0; k&lt;spalten(); ++k)
				erg[i][j] += super::operator[](i)[k] * b[k][j];
		}
	}
	*this = erg;
	return *this;
}
</code></pre>
<p>Und das war meine Meinung dazu:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Matrix&lt;T&gt;&amp; Matrix&lt;T&gt;::operator*=(const Matrix&lt;T&gt;&amp; x) {
        if(!(zeilen()==x.zeilen() &amp;&amp; spalten()==x.spalten())) {
                throw &quot;Matrizen sind nicht gleich groß.&quot;;
        }

        for(int i=0; i&lt;zeilen(); ++i) {
                for(int j=0; j&lt;spalten(); ++j) {
                        super::operator[](i)[j] *= x.super::operator[](i)[j];
                }
        }
        return *this;
}
</code></pre>
<p>Kann mir jemand vllt. den Gedankengang hinter der Musterlösung erklären. Ich zweifel nämlich langsam dran, dass ich unter Matrizenmultiplikation das Richtige versteh. Meiner Meinung nach wird jedes einzelne Feld mit dem Entsprechenden der anderen Matrix multipliziert. Dann begreif ich aber nicht, was der Sinn dieser k-Schleife ist. Hab's mal versucht, mir aufzuzeichnen, bin aber damit leider auch nicht weitergekommen.</p>
<p>Danke für die Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385430</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 15 Oct 2007 10:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unverständliche Matrizenmultiplikation on Mon, 15 Oct 2007 10:24:14 GMT]]></title><description><![CDATA[<p>Das sieht aus wie <a href="http://de.wikipedia.org/wiki/Matrix_%28Mathematik%29" rel="nofollow">Matrizenmultiplikation</a> im Sinne der Mathematik - und die funktioniert nicht als komponentenweises Produkt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385431</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 15 Oct 2007 10:24:14 GMT</pubDate></item><item><title><![CDATA[Reply to Unverständliche Matrizenmultiplikation on Mon, 15 Oct 2007 11:19:46 GMT]]></title><description><![CDATA[<p>Ok, danke. Hatte vorher noch nie mit sowas zu tun. Werds mir mal anschaun und mich ggf. zurückmelden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Alles klar, habs verstanden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385447</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 15 Oct 2007 11:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to Unverständliche Matrizenmultiplikation on Mon, 15 Oct 2007 13:25:56 GMT]]></title><description><![CDATA[<p>jaja, die hässliche matrixmultiplikation</p>
<p>wäre schön für den weltfrieden, wenn die in quadratischer laufzeit (d.h. lediglich 2 Schleifen) funktionieren würde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385589</guid><dc:creator><![CDATA[crashterpiece]]></dc:creator><pubDate>Mon, 15 Oct 2007 13:25:56 GMT</pubDate></item></channel></rss>