Zufällige Vektoren erstellen < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:35 Sa 24.11.2007 | Autor: | mcyonx |
Aufgabe | Für n,k [mm] \in \IN [/mm] soll eine Liste [] mit k zufälligen Vektoren der Länge n mit Einträgen aus [mm] \IZ [/mm] vom Betrag <100 erzeugt werden. |
Ich habe bisher folgendes geschrieben:
aufgabea:=proc(n,k);
> with(LinearAlgebra):
> for i from 1 to k do
> s:=0;
> s:=RandomVector(n):
> list1:=[];
> [op(list1),s];
> od;
end proc;
Bisher gibt er auch Vektoren der Länge n aus, aber immer nur einen. Kann mir einer auf die Sprünge helfen woran es liegt?
Gruß
mcyonx
|
|
|
|
Hallo,
du machst zwei Fehler:
1. Du setzt deine Liste list1 in jedem Schleifendurchlauf auf [].
2. Du fügst ihr auch nie etwas hinzu.
Also überleg, wo das list1 := [] hin soll, damit es nur zu Beginn ausgeführt wird und sorg dafür, dass die Liste auch immer aktualisiert wird. Danach funktioniert es.
Zwei Anmerkungen noch:
1. Deklariere immer schön alle in der Prozedur benutzten Varaiblen als local.
2. Gib das Ergebnis der Prozedur immer explizit mit return zurück. Dann gibt es auch keine Verwechslungen, was das Ergebnis eigentlich ist.
Gruß
Martin
|
|
|
|
|
Hallöchen.
Ich beschäftige mich auch mit dieser Aufgabe und wollte das ein wenig "einfacher" Lösen, indem ich einfach eine Zufallsmatrix erzeuge:
k := RandomMatrix(n,k, generator=-99..99);
Die nächste Teilaufgabe lautet nämlich hier:
Bei Eingabe einer endlichen Liste L = [v1, v2, . . .] von Vektoren [mm] v_i \in \IR^n [/mm] soll überprüft werden ob die Vektoren linear unabhängig sind.
Ich dachte nun, ob ich das einfach mit diesem Befehl "linsolve" machen kann...
In der Anleitung zur Aufgabe steht, dass: Vector, RandomVector, Dimension, Multiply, solve können helfen.
Ich dachte mir nun, dass wenn ich zu meiner Zufallsmatrix eben über "linsolve" löse. Wenn das Resultat nicht der Nullvektor ist, dann sind die Dinger linear abhängig, ansonsten sind sie linear unabhängig.
Was meinst ihr?
Viele Grüße
Traumfänger
|
|
|
|
|
Hallo,
> Ich beschäftige mich auch mit dieser Aufgabe und wollte das ein wenig "einfacher" Lösen, indem ich einfach eine Zufallsmatrix erzeuge:
>
> k := RandomMatrix(n,k, generator=-99..99);
Du meintest wohl eher:
m := RandomMatrix(n,k, generator=-99..99);
Wenn es erlaubt ist, dann spricht nichts dagegen.
> Ich dachte nun, ob ich das einfach mit diesem Befehl "linsolve" machen kann...
Du solltest nicht die Packages linalg und LinearAlgebra verwechseln! Kleingeschriebenes gehört zu linalg, Großgeschriebenes zu LinearAlgebra! Der entsprechende Befehl heißt LinearSolve.
> In der Anleitung zur Aufgabe steht, dass: Vector, RandomVector, Dimension, Multiply, solve können helfen.
Hier stellt sich also die Frage, ob du unbedingt RandomVector nutzen musst oder auch dein obiger Anfang ok ist...
> Ich dachte mir nun, dass wenn ich zu meiner Zufallsmatrix eben über "linsolve" löse. Wenn das Resultat nicht der Nullvektor ist, dann sind die Dinger linear abhängig, ansonsten sind sie linear unabhängig.
Eher mit LinearSolve (s.o.). Aber überlege dir nochmal, ob deine Kriterien stimmen. Wenn du einen Vektor aus den anderen linear kombinieren willst, dann müssen sie linear abhängig sein, also lösbar. Falls aber nicht, dann ist das GLS eher unlösbar, oder?
Außerdem kannst du ja evtl noch die Beziehung zwischen n und k auswerten. Können 100 Vektoren mit je fünf Einträge linear unabhängig sein?
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:36 So 25.11.2007 | Autor: | mcyonx |
Hm, ich beschäftige mich auch geade mit dem b Teil nur irgendwie komme ich nicht recht voran. Ich gebe mehrere Vektoren ein und speicher sie alle in einer Liste. Jetzt weiß ich aber nicht wie ich auf die einzelnen Listenelemente zugreifen kann und wie ich dann weiter verfahre.
Kann mir vielleicht einer einen kleinen Tip geben?
MfG mcyonx
|
|
|
|
|
Hallo,
auf ein einzelnes Listenelement kannst du per Index in eckigen Klammern zugreifen, aber lass dich besser davon inspirieren, was die beiden anderen hier machen. Mach am besten eine Matrix daraus und schau dir das Ergebnis von LinearSolve an.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:58 So 25.11.2007 | Autor: | smie |
Aufgabe | Bei Eingabe einer endlichen Liste L = [v1, v2, . . .] von Vektoren $ [mm] v_i \in \IR^n [/mm] $ soll überprüft werden ob die Vektoren linear unabhängig sind. |
wie kann man eine liste mit vektoren in eine matrix umwandeln ? geht das überhaupt?
hier meine überlegungen:
Ich habe eine Liste in der k Vektoren der Dimension n enthalten sind durch aufruf der Procedur:
>with(LinearAlgebra):
> vectorlist:=proc(k,n)
> local i,l:
> l:=[]:
>
> for i from 1 by 1 to n do
> l:=[op(l),RandomVector(k,generator=rand(1..100))]:
> end do:
> return l:
> end proc:
k := RandomTools[Generate](integer(range=2..10)):
> n := RandomTools[Generate](integer(range=2..10)):
> p :=vectorlist(n,k);
erstellt.
wenn nun k>n dann müssen die vektoren ja zwangsläufig linear abhängig sein.
wie kann ich nun lineare abhängigkeit der vektoren für k [mm] \le [/mm] n untersuchen?
meine idee:
erstes element jedes vektors ergibt die erste zeile einer matrix
zweites element jedes vektors ergibt die zweite zeile einer matrix
usw. der grösse k spalten , n zeilen.
Dann will ich mit dem Befehl LibnearSolve(matrix); diese lösen.
dazu benötige ich aber eine matrix,habe aber nur eine vectorliste.
mfg smie
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:56 Mo 26.11.2007 | Autor: | Martin243 |
Hallo,
> wie kann man eine liste mit vektoren in eine matrix umwandeln ? geht das überhaupt?
Klar! Man kann so ungefähr alles in alles umwandeln mit der Funktion convert. In deinem Falle wäre es:
m = convert(p, Matrix);
Gruß
Martin
|
|
|
|