<?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[Matrixpointer]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Mein Problem ist dass ich viele schlimme Sachen mit einer Matrix machen muss. Dafür erstelle ich mir ein Pointerarry wobei jeder Pointer wieder auf ein double Array zeigt.<br />
Ich habe dafür eine allozierungsfunktion geschrieben. Ich habe aus meinem Buch den Befehl malloc dafür verwendet. Ich nehme auch gerne new wenn mir jemand erklärt wie^^ Bei mir hat das irgendwie nicht geklappt.</p>
<p>Das Programm kompiliert ohne Fehler. Leider gibt es einen Fehler beim Aufrufen meiner Matrix_malloc() Funktion.</p>
<p>&quot;Eine nicht behandelte Ausnahme des Typs &quot;System.NullReferenceException&quot; ist in Jacobi.exe aufgetreten.</p>
<p>Zusätzliche Informationen: Object reference not set to an instance of an object.&quot;</p>
<p>Dabei zeigt er auf diese Zeile:</p>
<pre><code>if(!(*tmp = (double *) malloc(n*sizeof(double*)))){
</code></pre>
<p>Die gesamte Funktion sieht so aus:</p>
<pre><code>double** m_alloc(int n) {
	unsigned int j;
	double** tmp;
	if(!(*tmp = (double *) malloc(n*sizeof(double*)))){ 
		return NULL;
	}
	for (j = 0; j &lt; n; ++j) {
		if(!(tmp[j] = (double *) malloc(n*sizeof(double)))){
			return NULL;
		}
	}
	return tmp;
}
</code></pre>
<p>Ich freue mich sehr über jede Hilfe und Verbesserung!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/295908/matrixpointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 05:11:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295908.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Nov 2011 09:35:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrixpointer on Thu, 24 Nov 2011 09:35:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Mein Problem ist dass ich viele schlimme Sachen mit einer Matrix machen muss. Dafür erstelle ich mir ein Pointerarry wobei jeder Pointer wieder auf ein double Array zeigt.<br />
Ich habe dafür eine allozierungsfunktion geschrieben. Ich habe aus meinem Buch den Befehl malloc dafür verwendet. Ich nehme auch gerne new wenn mir jemand erklärt wie^^ Bei mir hat das irgendwie nicht geklappt.</p>
<p>Das Programm kompiliert ohne Fehler. Leider gibt es einen Fehler beim Aufrufen meiner Matrix_malloc() Funktion.</p>
<p>&quot;Eine nicht behandelte Ausnahme des Typs &quot;System.NullReferenceException&quot; ist in Jacobi.exe aufgetreten.</p>
<p>Zusätzliche Informationen: Object reference not set to an instance of an object.&quot;</p>
<p>Dabei zeigt er auf diese Zeile:</p>
<pre><code>if(!(*tmp = (double *) malloc(n*sizeof(double*)))){
</code></pre>
<p>Die gesamte Funktion sieht so aus:</p>
<pre><code>double** m_alloc(int n) {
	unsigned int j;
	double** tmp;
	if(!(*tmp = (double *) malloc(n*sizeof(double*)))){ 
		return NULL;
	}
	for (j = 0; j &lt; n; ++j) {
		if(!(tmp[j] = (double *) malloc(n*sizeof(double)))){
			return NULL;
		}
	}
	return tmp;
}
</code></pre>
<p>Ich freue mich sehr über jede Hilfe und Verbesserung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148100</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Thu, 24 Nov 2011 09:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Thu, 24 Nov 2011 09:46:57 GMT]]></title><description><![CDATA[<p>*tmp ist eine Dereferenzierung eines uninitialisierten Zeigers. Das hättest du mit der Fehlermeldung auch leicht gogglen können.</p>
<p>Deinen Code...kann ich nicht verbessern. Das ist zu schlimm. Schmeiß weg, lern die Sprache die du benutzen möchtest, mach's neu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148109</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 24 Nov 2011 09:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Thu, 24 Nov 2011 09:54:22 GMT]]></title><description><![CDATA[<p>tut mir leid für den grausamen Code <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="😃"
    /><br />
Wir müssen für Numerik einige Sachen implementieren und unser vorheriges Programm hatten wir in C zum laufen bekommen.<br />
Das nächste machen wir in c++, leider ist das ein wenig anders mit den Pointern.<br />
Um mir großes Wissen über c++ anzueignen ist jetzt leider nicht die Zeit. Erst in den Weihnachtszeit (Vorlesungsfrei).<br />
Im Mathestudium hat man einiges um die Ohren, so dass man nicht dazu kommt Zeit anderweitig zu investieren.</p>
<p>Ich würde mich trotzdem gerne an eurem Wissen bereichern wenn ihr so nett seid <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="🙂"
    /><br />
Wenn dieser Code so schlecht ist, dann würde ich mich über eine alternative bzw. korrekte implementierung eines Pointerarrays mit den gewünschten Eigenschaften freuen <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>LG<br />
Sunflower</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148111</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Thu, 24 Nov 2011 09:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Thu, 24 Nov 2011 09:54:08 GMT]]></title><description><![CDATA[<p>Das ist aber nicht C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148113</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 24 Nov 2011 09:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Thu, 24 Nov 2011 10:44:21 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Mein Problem ist dass ich viele schlimme Sachen mit einer Matrix machen muss.</p>
</blockquote>
<p>Und zwar?</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>Ich freue mich sehr über jede Hilfe und Verbesserung!</p>
</blockquote>
<p>Verwende Kapselung. Verwende einen eigenen Typen als Matrix-Abstraktion. Zeigerfrickeleien sind doch fehleranfällig.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;cassert&gt;

class matrix
{
  std::vector&lt;double&gt; coeffs_;
  int rows_, cols_;

  typedef std::vector&lt;double&gt;::size_type size_type;

  size_type indexof(int i, int j) const {
    assert( 0&lt;=i &amp;&amp; i&lt;rows_ );
    assert( 0&lt;=j &amp;&amp; j&lt;cols_ );
    return size_type(i)*cols_ + j; // row major
  }

public:
  matrix();
  matrix(int r, int c, double default_value=0);

  void reset(int r, int c, double default_value=0);

  int rows() const {return rows_;}
  int cols() const {return cols_;}

  double  operator()(int i, int j) const {return coeffs_[indexof(i,j)];}
  double&amp; operator()(int i, int j)       {return coeffs_[indexof(i,j)];}
};

:::

int main()
{
  matrix m (5,5,0.0);
  for (int i=0; i&lt;5; ++i)
    m(i,i) = 42;

  return 0;
}
</code></pre>
<p>u.s.w.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148135</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 24 Nov 2011 10:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Fri, 25 Nov 2011 08:27:46 GMT]]></title><description><![CDATA[<p>Danke Krümelkacker!<br />
Dein Beitrag hat geholfen dass ich wieder bisschen etwas zu Klassen verstanden habe.</p>
<p>Zur anderen Frage<br />
Ich muss im einzelnen Householdertransformationen, Givens Rotationen, Sigular Value Decomposition und am Ende noch Jacobi, Gauß Seidel und SOR implementieren.<br />
Insgesammt muss ich die Matrix also auf Tridiagonalgestalt, Bidiagonalgestallt bringen und später aufspalten um interative Verfahren darauf anzuwenden.<br />
Also insgesamt nur aufwendig, nicht besonders schwer. (Außer HH)<br />
Nur zuvor hatten wir es in C und da war es mit den Pointern nach einiger Zeit doch etwas zu hässlich und dann wollte ich mich an c++ trauen.</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148611</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 25 Nov 2011 08:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Fri, 25 Nov 2011 08:58:02 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Zur anderen Frage<br />
Ich muss im einzelnen Householdertransformationen, Givens Rotationen, Sigular Value Decomposition und am Ende noch Jacobi, Gauß Seidel und SOR implementieren.<br />
Insgesammt muss ich die Matrix also auf Tridiagonalgestalt, Bidiagonalgestallt bringen und später aufspalten um interative Verfahren darauf anzuwenden.<br />
Also insgesamt nur aufwendig, nicht besonders schwer. (Außer HH)<br />
Nur zuvor hatten wir es in C und da war es mit den Pointern nach einiger Zeit doch etwas zu hässlich und dann wollte ich mich an c++ trauen.</p>
</blockquote>
<p>Tu das.</p>
<p>Was war noch gleich die Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148622</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Nov 2011 08:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Fri, 25 Nov 2011 09:42:34 GMT]]></title><description><![CDATA[<p>Die Frage wurde dank Krümelkacker beantwortet, danke <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="🙂"
    /><br />
Ich hab mich ein bisschen den Container &quot;vector&quot; eingelesen und ein wenig in obj. Programmierung. Jetzt hab ich garkeine Pointer mehr!<br />
Das ist herrlich.</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148638</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 25 Nov 2011 09:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Fri, 25 Nov 2011 13:20:08 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Ich muss im einzelnen Householdertransformationen, Givens Rotationen, Sigular Value Decomposition und am Ende noch Jacobi, Gauß Seidel und SOR implementieren.</p>
</blockquote>
<p>Autsch. Musst Du das? Glaub'ich nicht. Selbst in meinem dicken Numerikbuch, welches ich für zwei Semester (Numerik I und Numerik II) verwendet habe, steht nicht drin, wie sie SVD berechnet werden kann, sondern nur dass es sie gibt (mit Beweis). Der einzige Hinweis zu den Berechnungen war &quot;Das würde den Rahmen dieses Buches sprengen&quot;. SVD berechnen ist schwarze Magie. So'was implementiert man einfach nicht selbst. Man benutzt fertige Bibliotheken wie z.B. <a href="http://eigen.tuxfamily.org/dox/TutorialLinearAlgebra.html" rel="nofollow">Eigen</a>, welche die Arbeit mit Matrizen und Vektoren unter C++ ähnlich einfach macht wie unter Matlab zum Beispiel...</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>Insgesammt muss ich die Matrix also auf Tridiagonalgestalt, Bidiagonalgestallt bringen und später aufspalten um interative Verfahren darauf anzuwenden.<br />
Also insgesamt nur aufwendig, nicht besonders schwer. (Außer HH)</p>
</blockquote>
<p>Wenn Du mit HH Householder meinst: HH ist noch mit das einfachste von dem, was Du alles aufgezählt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148709</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 25 Nov 2011 13:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Sat, 26 Nov 2011 18:16:22 GMT]]></title><description><![CDATA[<p>SVD´s berechnen ist einfacher als HH implementieren</p>
<p>Wenn man es natürlich genau nimmt dann kann man eine SVD nicht berechnen weil es keinen exakten algorithmus gibt um die Eigenwerte zu bestimmen.<br />
Aber es gibt eine Möglichkeit sich super stabil an die Eigenwerte anzunähern.<br />
Dann muss man einfach die Eigenvektoren zu den Eigenwerten bestimmen woraus man dann eine Orthogonale symmetrische Matrix V aus Eigenvektoren zusammensetzten kann und eine Matrix D mit Eigenwerten auf der Diagonalen. Dann fehlt nur noch U und das ist mit 2 bekannten Matritzen einfach zu berechnen.</p>
<p>Gruß<br />
Sunflower</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149296</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Sat, 26 Nov 2011 18:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Matrixpointer on Sat, 26 Nov 2011 18:13:28 GMT]]></title><description><![CDATA[<p>Ich weiß nicht genau was du damit meinst das HH das einfachste davon wäre. Ich habe zwar Gauß Seidel und SOR noch nicht implementiert, aber ich denke wenn ich SOR hab dann kommt Gauß Seidel von selber.<br />
Givens ist wirklich einfach. Aber HH ist da noch am Fehleranfälligsten. Die normale HH funktioniert bei mir auch.<br />
Nur die HH die meine Tridiagonalgestallt aus meiner Matrix erzeugen soll um anschließend mit Givens die Nebendiagonalen systematisch zu elemenieren funktioniert bei mir nicht. Der Algorithmus ist bei alles Verfahren einfach. Nur bei der Implementierung scheitert es. Warum hab ich bis jetzt nicht herausgefunden. Aber ich hab ja noch 2 Wochen.</p>
<p>LG<br />
Sunflower</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149300</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Sat, 26 Nov 2011 18:13:28 GMT</pubDate></item></channel></rss>