|
|
|
|
| Zitat von Redh3ad
| Zitat von MCignaz
Ich versteh dein Problem irgendwie nicht so richtig. Kannst du das mal in simplifiziertem Code zeigen?
| |
Ich bin schon wieder nen Schritt weiter, hab zwischendurch shared_ptr aus C++11 entdeckt und damit funktionierts anscheinend erstmal so, wie ich das gerne hätte.
| |
Ah ok. Ja eh empfehlenswert die Dinger. Aehm Unterschied Pointer und Referenzen: Pointer koennen leer sein, Referenzen nicht. Pointers - References
|
|
|
|
|
|
|
Ausm Kopf, ohne Gewähr:
def index(l, i, mu, K=4, n=5):
return l * (K-1 + n + 2) + i * 2 + mu
/e: Yeah, das scheint zu klappen:
|
Code: |
def gen(K, n):
for l in range(K-1):
for i in range(n):
for mu in range(2):
yield (l, i, mu)
def index(l, i, mu, K=4, n=5):
return l * (K-1 + n + 2) + i * 2 + mu
i = 0
for vec in gen(4, 5):
assert i == index(*vec)
i += 1
|
|
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 20.03.2014 22:05]
|
|
|
|
|
|
| Zitat von csde_rats
Ausm Kopf, ohne Gewähr:
def index(l, i, mu, K=4, n=5):
return l * (K-1 + n + 2) + i * 2 + mu
/e: Yeah, das scheint zu klappen:
|
Code: |
def gen(K, n):
for l in range(K-1):
for i in range(n):
for mu in range(2):
yield (l, i, mu)
def index(l, i, mu, K=4, n=5):
return l * (K-1 + n + 2) + i * 2 + mu
i = 0
for vec in gen(4, 5):
assert i == index(*vec)
i += 1
|
|
| |
Danke. Es ist ungefähr das, was ich mit meinem ausgehungerten Kopf die ganze Zeit versucht habe. Jetzt habe ich gegessen, kann es nachvollziehen - und hoffentlich den Rest von der Rechnung wieder alleine.
Danke!
|
|
|
|
|
|
|
Nachtrag:
...nope.
|
Code: |
# Funktionen, um Indizes von allen beteiligten Größen auszurechnen
def gbi(I,i,mu): #Generiert den Index in der zu minimierenden Funktion für Geodäten (GeodätenBestimmungsIndex)
return I*(K + n + 1) + i*2 + mu # (K+n+1) = K-1 + n +2
def kuri(gbi): #Generiert aus einem gbi einen Kurvenindex
return gbi//(K + n +1)
def puni(gbi): #Generiert aus einem gbi einen Interpolationspunktindex
return (gbi%(K + n +1))//2
def kooi(gbi): #Generiert aus einem gbi einen Koordinatenindex
return (gbi%(K + n +1))%2
def indextests():
K = 7
n = 5
for I in range(K-1): #Ich versuche klarzumachen, dass es um Wege zwischen Y_0 und Y_K geht - K-1 Stück
for i in range(n):
for mu in range(2):
print (I,i,mu),"->",gbi(I,i,mu)
print "-----done-----"
for rho in range(2*(K-1)*n):
print rho,"->",(kuri(rho),puni(rho),kooi(rho)) |
|
Vorsicht, das ist Sage-Code, nicht Python. Einige Rechenbefehle könnten anders sein. (// ist ganzzahlige Division, % modulo)
Das liefert lustige Sprünge.
|
Code: |
(0, 3, 0) -> 6
(0, 3, 1) -> 7
(0, 4, 0) -> 8
(0, 4, 1) -> 9
(1, 0, 0) -> 253
(1, 0, 1) -> 254
(1, 1, 0) -> 255 |
|
...verdammt. Ich habe mir gesagt, ich gehe erst nach hause, wenn ich eine Geodäte ausgerechnet habe. Ich glaube, scipy draufzuwerfen wird der einfachste Teil...
Vor allem, weil ich mir jedes Mal irgendwelche Syntaxdetails ansehen muss, die ich noch nicht verwendet habe...
Ich bin auch offen für Hinweise auf schlechten Stil.
¤dIT:
Und scheinbar hat numpy etwas namens flatten, was meinem Ziel sehr Nahe kommt - ich finde nur noch nicht die Umkehrrichtung
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Wraith of Seth am 20.03.2014 23:57]
|
|
|
|
|
|
Ist das K und das n in gbi das gleiche wie in indextests?
Bedenke:
|
Code: |
x = 1
def changex():
x = 3
print(x)
print(x)
changex()
print(x)
1
3
1 |
|
|
|
|
|
|
|
|
Aber ich rufe doch innerhalb von indextests auf? Sollte da nicht auch lokal vor global gelten?
|
|
|
|
|
|
|
Nein, die aufgerufene Funktion (gbi) weiß nichts von dem Scope (Geltungsbereich) des Aufrufers (indextests), kennt daher nicht die Werte der lokalen Variablen von indextests.
Es macht vielleicht einfach aus praktischen Gründen Sinn eine Klasse für die Methoden zu erstellen, die sich ein gemeinsames K und n teilen.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 21.03.2014 0:30]
|
|
|
|
|
|
Nachdem dir das um die Ohren fliegt, sobald K und n eine Rolle spielen, wohl nicht. Eigentlich sollte das aber auch nen Fehler geben.
Klasse ist wohl etwas Kanonen auf Spatzen. Aber die Variablen global zu definieren könnte helfen.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von RichterSkala am 21.03.2014 0:34]
|
|
|
|
|
|
Nicht wenn er auch noch ein globales K und n hat.
|
|
|
|
|
|
|
Ich lass den Scheiß einfach, mache np.arrays draus und hoffe, dass ich mit flatten und reshape mehr Glück habe.
|
|
|
|
|
|
|
Der Ansatz war eigentlich schon richtig, man muss es nur ordentlich programmieren. Kannst jetzt natürlich flatten und reshapen, aber dann stellt sich die frage, warum du überhaupt nen 1D Array brauchst. Da i_max und mu_max für jedes I gleich groß zu sein scheinen, kannst du doch von Anfang an mit nem 3D Array arbeiten...
... oder leg dich mal ne Runde hin und geh morgen mit nem frischen Kopf dran, dann geht das vielleicht etwas klarer.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von RichterSkala am 21.03.2014 0:42]
|
|
|
|
|
|
| Zitat von RichterSkala
... oder leg dich mal ne Runde hin und geh morgen mit nem frischen Kopf dran, dann geht das vielleicht etwas klarer.
| |
Müde bin ich überhaupt nicht. Die neuen Medis wirken etwas... ...beeindruckend.
Selbst wenn ich nur die globalen Variablen benutze, bleiben Sprünge drin.
|
Code: |
(0, 4, 0) -> 8
(0, 4, 1) -> 9
(1, 0, 0) -> 13
|
|
Eigentlich wäre das alles total simpel, wenn ich wüsste, was ich mache (aka Python tippen) oder zumindest jemanden im Raum hätte, den ich fragen kann.
Der Grund für das 1D-Array ist, dass das in die SciPy-Newtonverfahren reingehen muss.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Wraith of Seth am 21.03.2014 0:55]
|
|
|
|
|
|
Poste mal mehr oder weniger vollständigen Code (lauffähig), dann kann man dir helfen. Zur Not per PN wenn das im Thread nix gut ist.
|
|
|
|
|
|
|
|
Code: |
# Standardwerte für die Zahl der Interpolationspunkte n und des K für das diskrete Kalkül
K = 7 #Anzahl der Kurven
n = 5 #Anzahl der Interpolationspunkte
# Funktionen, um Indizes von allen beteiligten Größen auszurechnen
def gbi(I,i,mu): #Generiert den Index in der zu minimierenden Funktion für Geodäten (GeodätenBestimmungsIndex)
return I*(K + n + 1) + i*2 + mu # (K+n+1) = K-1 + n +2
def kuri(gbi): #Generiert aus einem gbi einen Kurvenindex
return gbi//(K + n +1)
def puni(gbi): #Generiert aus einem gbi einen Interpolationspunktindex
return (gbi%(K + n +1))//2
def kooi(gbi): #Generiert aus einem gbi einen Koordinatenindex
return (gbi%(K + n +1))%2
def indextests():
for I in range(K-1): #Ich versuche klarzumachen, dass es um Wege zwischen Y_0 und Y_K geht - K-1 Stück
for i in range(n):
for mu in range(2):
print (I,i,mu),"->",gbi(I,i,mu)
print "-----done-----"
for rho in range(2*(K-1)*n):
print rho,"->",(kuri(rho),puni(rho),kooi(rho)) |
|
Das dürfte letztlich alles relevante sein.
|
|
|
|
|
|
|
Oh, meine Funktion ist falsch, jupp. Ich weiß gar nicht wie ich drauf gekommen bin da was mit K für die I-Indizierung machen, das ist ja offensichtlich falsch, K ist die I-Größe, darf also nicht mit I multipliziert werden.
def gbi(I,i,mu): return I*n*2 + i*2 + mu
|
|
|
|
|
|
|
...und ich habe das nachrechnen aufgehört, weil es so ähnlich aussah, wie das, was ich damals in Numerik getippt habe...
|
|
|
|
|
|
|
Ich kapier immernochnicht, wie ich überhaupt auf die Idee gekommen bin das das richtig sein könnte in irgendeiner weit entfernten Galaxie.
Lel, Rechtschreibkorrektur schlägt "Nichtschwimmer" für "immernochnicht" vor.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 21.03.2014 1:24]
|
|
|
|
|
|
Funfact: Ich hatte gerade das Gefühl, dass mir die Geräuschkulisse des verlassenen Mathe-Instituts sagen will, dass über oder unter mir wer ein Stelldichein hat. Es klang nach rhythmischem Möbelschieben.
Danke nochmal.
Ich versuche jetzt mal selbst mir zu überlegen, wie ich eigentlich die Gleichungen definieren muss, damit ich meine Indexfunktionen auch manierlich anwenden kann...
|
|
|
|
|
|
|
| Zitat von csde_rats
Lel, Rechtschreibkorrektur schlägt "Nichtschwimmer" für "immernochnicht" vor.
| | Könnte daran liegen, dass es "immer noch nicht" geschrieben wird.
|
|
|
|
|
|
|
EDIT²: Interessanter: Einer der Urväter der Inflationsidee bekommt Überraschungsbesuch mit 5 Sigma. Da gibt es auch die entsprechende Korrektur, wann die Gravitationswellen entstanden sind.
Live long and prosper.
Ok, diesmal komme ich mir nicht ganz so dumm vor. Er will mir sagen, dass ein CAS keinen 2D Int-Vektor auf einen symbolischen 2D-Vektor addieren kann.
Wir reden von (0,0) + (cos(13/17),sin(13,17)). Ich fühle mich verarscht.
¤DIT:
DAS war hingegen ein sehr interessantes Debuggen.
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von Wraith of Seth am 21.03.2014 10:57]
|
|
|
|
|
|
|
|
|
|
Ich glaube, die Reihenfolge der Massen wird sich in meinem Kopf bald rapide bessern...
BTW, ich weise Physiker nochmal auf den Edit im letzten Post hin.
Blow shit up, throw women through walls, got it.
|
|
|
|
|
|
|
| Zitat von Redh3ad
| Zitat von MCignaz
Ich versteh dein Problem irgendwie nicht so richtig. Kannst du das mal in simplifiziertem Code zeigen?
| | Ich bin schon wieder nen Schritt weiter, hab zwischendurch shared_ptr aus C++11 entdeckt und damit funktionierts anscheinend erstmal so, wie ich das gerne hätte.
| | Noch ein Tipp dazu: Nutze, wenn immer es geht, den unique_ptr. Und außerdem die erzeugenden Funtionen make_shared und make_unique (C++14, wird aber von den meisten Compilern mittlerweile unterstützt). Auf diese Art und Weise musst du dir um ein delete keine Gedanken mehr machen.
|
|
|
|
|
|
|
C++ Rule 101: If you see a "delete", the program has a leak
|
|
|
|
|
|
|
|
|
|
|
Nett, aber die Aussage, dass sich das Universum "fast than the speed of light" ausgedehnt hat, ist etwas problematisch.
|
|
|
|
|
|
|
| Zitat von csde_rats
C++ Rule 101: If you see a "delete", the program has a leak
| |
Ihr habt keine Ahnung, wie froh ich bin, dass ich mir darum keine Gedanken machen muss in Sage. Wahrscheinlich kann ich, aber ich muss nicht...
Therefore, those people who say that they can't jack off to anime must have something wrong with their brains!
|
|
|
|
|
|
|
| Zitat von csde_rats
C++ Rule 101: If you see a "delete", the program has a leak
| |
Wenn man eine Regel mit auf eine einsame (C++)-Insel nehmen müsste, dann die.
|
|
|
|
|
|
|
Ich schäme mich auch ganz dolle dafür das ständig zu benutzen
|
|
|
|
|
|
|
Was, C++?
|
|
|
|
|
|
Thema: pOT-lnformatik, Mathematik, Physik XVI ( Ship painting activities ) |