<?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[Binäre Orthonormalmatrix]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich versuche eine Matrix in C++ zu programmieren, mit L Zeilen und N Spalten. Die Koeffizienten sollen nur 0 oder 1 sein und random gewählt werden mit folgender Einschränkung:</p>
<p>Die L Zeilenvektoren sollen alle orthonormal zueinander stehen. Dies ist nur möglich, wenn keine zwei Einser in den Spalten untereinander stehen. Ferner dürfen in keiner Zeile mehr als eine Eins stehen, sonst wäre die Länge nicht mehr Eins.</p>
<p>Zum Beispiel sowas:</p>
<p>0000001<br />
1000000<br />
0000010</p>
<p>Ich bin bis jetzt soweit gekommen, dass ich ein Array von 0 bis N-1 random geshuffelt habe und eine mit Nullen gefüllte Matrix, welche die orthonormalen Zeilenvektoren enthalten soll, initialisiert habe.</p>
<p>Nun würde ich gerne die Zeilen dieser Matrix mit einer for Schleife ablaufen und in jeder Zeile demjenigen Spaltenkoeffizient den Inhalt 1 zuweisen, welcher der Inhalt des Spaltenkoeffizient des geshuffelten Vektors ist.</p>
<p>Also konkret wenn z.B. der geshuffelte Vektor beginnt mit (3, 5,....) bei der Matrix in der ersten Zeile in der dritten Spalte eine 1 steht und in der zweiten Zeile in der 5. Spalte eine 1 ist usw...</p>
<p>Mein Code bis jetzt sieht wie folgt aus:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;stdlib.h&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;stdlib.h&gt;
#include &lt;algorithm&gt;

#define N 30      //Anzahl der Spalten
#define L 4       //Anzahl der Zeilen

using namespace std;
//=============================================
//Fisher-Yates-Shuffle-Algorithmus
void FisherYates(std::vector&lt;int&gt;&amp; vec)
{
    int n = vec.size();
    for (int i = n - 1; i &gt; 0; --i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}
//=============================================
int main () {                                      
int ik,il;

//Erstelle Array Sequenz 0,1,2,3,...,N-1
int Sequenz[N];
for(il=0; il&lt;N; il++){Sequenz[il]=il;}

//Berechnet aus Array Sequenz den Vektor sequenz
vector&lt;int&gt; sequenz;
sequenz.insert( sequenz.begin() , Sequenz , Sequenz + N ) ; 

//Wendet Fisher-Yates Algorithmus zum shuffeln an
FisherYates(sequenz);

//Ausgabe des geshuffelten Vektors (Kopie des Ausgabestreams aus der STL)
std::copy(sequenz.begin(), sequenz.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

cout &lt;&lt; endl;

//Erstellt (L x N) Matrix muster mit Vektoren 
vector&lt; vector&lt;int&gt; &gt; muster( L,vector&lt;int&gt;(N) );

//Setzen der zueinander orthonormalen Zeilenvektoren

for(ik=0 ; ik&lt;L; ik++)
{
    for(il=0; il&lt;N; il++)
    {                 

    //To DO: Was steht hier drinnen?

    }

cout &lt;&lt; &quot;\n&quot;;
}

//Ausgabe der zueinander orthonormalen Zeilenvektoren
for(ik=0; ik&lt;L; ik++)
{
    for(il=0; il&lt;N; il++)
    {
    cout &lt;&lt; muster[ik][il];
    }
cout &lt;&lt; &quot;\n&quot;;
}

//=============================================
return 0;                                                                                             
}
//=============================================
</code></pre>
<p>Ich habe im Code 'To DO' einkommentiert. Ich denke da muss jetzt die Ersetzung der 1-er in den jeweiligen Spaltenindizes hinein aber ich weiss nicht wie es geht.</p>
<p>Ich habe mit replace, if_replace und swap etwas herum gespielt aber das war nicht zielführend. Würde mir bitte jemand Helfen wie ich hier nun weiter gehe?</p>
<p>Danke für die Hilfe und Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334478/binäre-orthonormalmatrix</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 15:17:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334478.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Sep 2015 14:30:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binäre Orthonormalmatrix on Wed, 16 Sep 2015 14:51:47 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich versuche eine Matrix in C++ zu programmieren, mit L Zeilen und N Spalten. Die Koeffizienten sollen nur 0 oder 1 sein und random gewählt werden mit folgender Einschränkung:</p>
<p>Die L Zeilenvektoren sollen alle orthonormal zueinander stehen. Dies ist nur möglich, wenn keine zwei Einser in den Spalten untereinander stehen. Ferner dürfen in keiner Zeile mehr als eine Eins stehen, sonst wäre die Länge nicht mehr Eins.</p>
<p>Zum Beispiel sowas:</p>
<p>0000001<br />
1000000<br />
0000010</p>
<p>Ich bin bis jetzt soweit gekommen, dass ich ein Array von 0 bis N-1 random geshuffelt habe und eine mit Nullen gefüllte Matrix, welche die orthonormalen Zeilenvektoren enthalten soll, initialisiert habe.</p>
<p>Nun würde ich gerne die Zeilen dieser Matrix mit einer for Schleife ablaufen und in jeder Zeile demjenigen Spaltenkoeffizient den Inhalt 1 zuweisen, welcher der Inhalt des Spaltenkoeffizient des geshuffelten Vektors ist.</p>
<p>Also konkret wenn z.B. der geshuffelte Vektor beginnt mit (3, 5,....) bei der Matrix in der ersten Zeile in der dritten Spalte eine 1 steht und in der zweiten Zeile in der 5. Spalte eine 1 ist usw...</p>
<p>Mein Code bis jetzt sieht wie folgt aus:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;stdlib.h&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;stdlib.h&gt;
#include &lt;algorithm&gt;

#define N 30      //Anzahl der Spalten
#define L 4       //Anzahl der Zeilen

using namespace std;
//=============================================
//Fisher-Yates-Shuffle-Algorithmus
void FisherYates(std::vector&lt;int&gt;&amp; vec)
{
    int n = vec.size();
    for (int i = n - 1; i &gt; 0; --i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}
//=============================================
int main () {                                      
int ik,il;

//Erstelle Array Sequenz 0,1,2,3,...,N-1
int Sequenz[N];
for(il=0; il&lt;N; il++){Sequenz[il]=il;}

//Berechnet aus Array Sequenz den Vektor sequenz
vector&lt;int&gt; sequenz;
sequenz.insert( sequenz.begin() , Sequenz , Sequenz + N ) ; 

//Wendet Fisher-Yates Algorithmus zum shuffeln an
FisherYates(sequenz);

//Ausgabe des geshuffelten Vektors (Kopie des Ausgabestreams aus der STL)
std::copy(sequenz.begin(), sequenz.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

cout &lt;&lt; endl;

//Erstellt (L x N) Matrix muster mit Vektoren 
vector&lt; vector&lt;int&gt; &gt; muster( L,vector&lt;int&gt;(N) );

//Setzen der zueinander orthonormalen Zeilenvektoren

for(ik=0 ; ik&lt;L; ik++)
{
    for(il=0; il&lt;N; il++)
    {                 

    //To DO: Was steht hier drinnen?

    }

cout &lt;&lt; &quot;\n&quot;;
}

//Ausgabe der zueinander orthonormalen Zeilenvektoren
for(ik=0; ik&lt;L; ik++)
{
    for(il=0; il&lt;N; il++)
    {
    cout &lt;&lt; muster[ik][il];
    }
cout &lt;&lt; &quot;\n&quot;;
}

//=============================================
return 0;                                                                                             
}
//=============================================
</code></pre>
<p>Ich habe im Code 'To DO' einkommentiert. Ich denke da muss jetzt die Ersetzung der 1-er in den jeweiligen Spaltenindizes hinein aber ich weiss nicht wie es geht.</p>
<p>Ich habe mit replace, if_replace und swap etwas herum gespielt aber das war nicht zielführend. Würde mir bitte jemand Helfen wie ich hier nun weiter gehe?</p>
<p>Danke für die Hilfe und Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468178</guid><dc:creator><![CDATA[cpp_Jungspund]]></dc:creator><pubDate>Wed, 16 Sep 2015 14:51:47 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Orthonormalmatrix on Thu, 17 Sep 2015 01:12:38 GMT]]></title><description><![CDATA[<p>Ich konnte das Problem selbst lösen. Verzeihung für den Doppelpost.</p>
<p>Hier mein fertiges Programm falls jemand wissen möchte was ich getan habe:</p>
<pre><code>//Programm berechnet L zufällige, binäre, paarweise orthonormale Zeilenvektoren der Länge N
#include &lt;iostream&gt; 
#include &lt;stdlib.h&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;stdlib.h&gt;
#include &lt;algorithm&gt;

#define N 5      //Anzahl der Spalten
#define L 3       //Anzahl der Zeilen

using namespace std;
//=============================================
//Fisher-Yates-Shuffle-Algorithmus
void FisherYates(std::vector&lt;int&gt;&amp; vec)
{
    int n = vec.size();
    for (int i = n - 1; i &gt; 0; --i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}
//=============================================
int main () {                                      
int ik,il;

int Sequenz[N];
for(il=0; il&lt;N; il++){Sequenz[il]=il;}

vector&lt;int&gt; sequenz;
sequenz.insert( sequenz.begin() , Sequenz , Sequenz + N ) ; 

FisherYates(sequenz);

vector&lt; vector&lt;int&gt; &gt; muster( L,vector&lt;int&gt;(N) );

//Setze orthonormale Zeilenvektoren
il=0;
for(ik=0; ik&lt;L; ik++)
{

   muster[ik][sequenz[il&rsqb;&rsqb;=1;          
   il++;
}  

//Ausgabe der zueinander orthonormalen Zeilenvektoren
for(ik=0; ik&lt;L; ik++)
{
    for(il=0; il&lt;N; il++)
    {
    cout &lt;&lt; &quot; &quot; &lt;&lt; muster[ik][il];
    }
cout &lt;&lt; &quot;\n&quot;;
}

//cout &lt;&lt; &quot;\n&quot;;
//for(int il : sequenz){cout &lt;&lt; sequenz[il] &lt;&lt; &quot; &quot;;}

//=============================================
return 0;                                                                                             
}
//=============================================
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2468234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468234</guid><dc:creator><![CDATA[cpp_Jungspund]]></dc:creator><pubDate>Thu, 17 Sep 2015 01:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Orthonormalmatrix on Thu, 17 Sep 2015 19:32:04 GMT]]></title><description><![CDATA[<p>Ich würds einfach mit ner bool Tabelle machen:<br />
L Einträge, für die L Spalten.<br />
Zufallszahl z0 zwischen 0 und L-1 würfeln,<br />
in der 1. Spalte an dieser Pos ne 1 setzen.<br />
Dann in der Tabelle die Position als verwendet markieren.<br />
In der nächsten Runde ne Zufallszahl z1 zw. 0 und L-2 würfeln, weil ja<br />
nur noch L-1 Positionen für die 1 belegt werden können.<br />
Die Zahl z1 kann man als Index in die Tabelle verwenden, wobei natürlich die belegten Einträge zu überspringen sind.<br />
Usw. bis man alle N&lt;=L Zeilen gefüllt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468342</guid><dc:creator><![CDATA[MC78]]></dc:creator><pubDate>Thu, 17 Sep 2015 19:32:04 GMT</pubDate></item></channel></rss>