Die Mathe-Redaktion - 25.05.2013 22:29
Auswahl
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]

Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter April 2013

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 244 Gäste und 22 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matroid mire2
Mathematische Softwarepakete » Maple » Projektive Ebene mit maple16 Projekt
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Projektive Ebene mit maple16 Projekt
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2012-08-22 23:27


Hallo,

ich möchte die Projektive Ebene ähnlich wie hier mit Papierstreifen nachbauen. Mathematisch habe ich die Sache schon durchgedacht, aber ich möchte keinesfalls das alles per hand durchrechnen und auch das plotten wird ohne Computer schwer. Ich möchte daher maple(16) verwenden, allerdings reichen meine rundimentären Kenntnisse nicht mal für den ersten Schritt aus und ich möchte auch nicht erst ein Buch durchwälzen. Ich möchte es daher mal mit dem Forum probieren und beginne mit dem ersten Schritt:

Zuerst soll folgende Funktion
M:\mathbb{C}\rightarrow\mathbb{R}^3
z\mapsto\text{Re}\left(\frac{1}{z^3-z^{-3}+\sqrt{5}}
\begin{pmatrix} i(z^2-z^{-2})\\z^2+z^{-2}\\\frac{2i}{3}(z^3+z^{-3}) \end{pmatrix}
\right)+\begin{pmatrix}0\\0\\\frac{1}{2}\end{pmatrix}
und dann die Funktion
B(z):=\frac{M(z)}{|M(z)|^2}
in Maple bekanntgemacht werden und zur Kontrolle soll das Bild von B geplottet werden. Kann mir jemand da eine Starthilfe geben?





  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2012-08-23 01:32


Hallo, hier ein Ansatz.
Maple
restart;with(plots):
1/(z^3-z^(-3)+sqrt(5))*(<I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))>);
subs(z=x+I*y,%);
Re(%)assuming real:M:=%+<0,0,1/2>;
M0:=LinearAlgebra:-VectorNorm(M,2):
B:=M/M0^2:
B1:=subs(y=1,B); # Schnittebene y=1 als Beispiel, k.A. ob das sinnvoll ist
spacecurve([B1(1),B1(2),B1(3)],x=-1e5..1e5,colour=black,axes=normal);


Gruß
[ Nachricht wurde editiert von Ollie am 23.08.2012 01:41:55 ]



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2012-08-23 14:54


Hi Ollie, vielen Dank für deine Hilfe. Das sieht schon mal gut aus. ;)
Also folgendes steht jetzt bei mir im Worksheet:
Maple
restart;
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B):
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
Bc:=subs(z=c,B):
#spacecurve([Bc(1),Bc(2),Bc(3)],t=0..1,color=black,axes=normal);
BcL:=int(VectorNorm(Bc,2),t=0..s):
#plot(BcL,s=0..1);

Also ich hab die Kurve Bc (das wird eine von vielen) und was ich nun machen will ist diese auf Bogenlänge zu parametrisieren. Das erste was mir auffällt ist, das bereits jetzt dies schon etwas rechenintensiv ist, dabei würde es mir numerisch absolut genügen. Kann man das durch einen Befehl festlegen oder muss man da ganz anders vorgehen?
Ansonsten habe ich jetzt die Längenfunktion BcL und was ich jetzt machen muss, ist diese Expression BcL nach s aufzulösen, also einfach die Funktion zu invertieren. Wie gehe ich da vor?

Edit: Ich merke gerade, das Integral symbolisch auszurechnen dauert nicht lange, nur der plot, also fällt diese Frage schon mal weg. ;)
[ Nachricht wurde editiert von calabi-yau am 24.08.2012 12:25:02 ]



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2012-08-24 13:16


zum Plot: Ersetzte int durch Int, dann geht das Plotten in Sekunden.
Am Schluß habe ich noch eine Zeile angehängt, die numerisch die obere Integrationsgrenze bei gegebener Bogenlänge berechnet.


Ach ja: Durch Einfügen von assume(t::real); wurde BcL übersichtlicher.
Gruß



Maple
restart; assume(t::real);
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B):
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
Bc:=subs(z=c,B):
#spacecurve([Bc(1),Bc(2),Bc(3)],t=0..1,color=black,axes=normal);
BcL:=Int(VectorNorm(Bc,2),t=0..s);
plot(BcL,s=0..1);
 
BcLn:=proc(L) fsolve(L=Int(VectorNorm(Bc,2),t=0..s),s); end proc;
BcLn(0.5);





  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2012-08-24 15:09


Hi, vielen Dank, wir nähern uns in kleinen Schritten einem guten Anfang. ;)
Nun sieht der Code bei mir so aus, nur funktionieren die letzten beiden Codezeilen nicht so wie ich es mir vorstelle. Den plot will ich mal wieder zur Kontrolle machen, das Ableiten sollte das normierte Tangentialvektorfeld zu Kurve geben.


Maple
restart; assume(t::real);
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B):
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
Bc:=subs(z=c,B):
#spacecurve([Bc(1),Bc(2),Bc(3)],t=0..1,color=black,axes=normal);
BcL:=Int(VectorNorm(Bc,2),t=0..s):
l1:=subs(s=0.2,BcL):
l2:=subs(s=0.4,BcL):
l3:=subs(s=0.6,BcL):
l4:=subs(s=0.8,BcL):
lmax:=subs(s=1,BcL):
#plot(BcL,s=0..1);
BcLi:=proc(L) fsolve(L=BcL,s); end proc:
cc:=unapply(Bc,t)@BcLi:
spacecurve(cc(s),s=0..lmax); #?!
ccD:=D(cc); #?!



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2012-08-24 22:22


Ich habe die Prozedur cc jetzt nicht direkt an spacecurve übergeben, sondern diese auf eine diskrete Punkteliste gemapt und dann letztere gespacecurved. Was soll eigentlich das Endergebnis unserer Bemühungen sein? :-)
Maple
restart; assume(t::real,c::real);
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=normal(M/VectorNorm(M,2)^2):
BReal:=subs(z=x+I*y,B):
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
Bc:=subs(z=c,B):Bc:=simplify(Bc,symbolic) assuming real;
#spacecurve([Bc(1),Bc(2),Bc(3)],t=0..1,color=black,axes=normal);
BcL:=Int(VectorNorm(Bc,2),t=0..s):
l1:=subs(s=0.2,BcL):
l2:=subs(s=0.4,BcL):
l3:=subs(s=0.6,BcL):
l4:=subs(s=0.8,BcL):
lmax:=subs(s=1,BcL):
#plot(BcL,s=0..1);
BcLi:=proc(L) fsolve(L=BcL,s); end proc:
cc1:=unapply(Bc,t):
cc:=cc1@BcLi:
seq(n/10,n=-20..20):
map(cc,[%]):
S:=map(convert,%,list):
spacecurve(S,colour=black,axes=normal,style=line); 
 
 



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2012-08-24 23:26


Das Endergebnis ist ein Nachbau der reellen projectiven Ebene als Immersion in den R^3 nach Werner Boy (Die Funktion B oben stammt genauer von Bryant/Kusner) wie sie in Oberwolfach steht (siehe Link oben). Dazu nimmt man einige Parameterlinien und plottet sie auf Papier. Genauer nimmt man eine Parameterlinie c wie oben. Nun muss man eine Kurve auf dem flachen Blatt Papier so plotten, dass deren (signierte) Krümmung im Flachen gleich der intrinsischen (signierten) Krümmung von c auf der Boyschen Fläche ist. Dies hat den Effekt, dass wenn man die geplottete Linie zu einem Streifen aufdickt, dieser dann tangential zur Fläche verläuft, wenn man alle Streifen zusammenbaut. Dazu helfen Punktierungen auf den Streifen, die die Schnittpunkte der Streifen markieren. Wie man das im genauen macht, sehen wir, wenn wir im Maple Projekt weitermachen. ;)

Hast du eine Lösung für die Ableitung von cc? Ich meine ich sehe das Problem: Bereits BcLi ist nur numerisch gegeben, kann maple keine numerischen Funktionen ableiten?

PS: Die reelle projective Ebene ist die eindeutige geschlossene, nichtorientierte, irreducible (bzgl. zusammenhängender Summe #) 2-Mannigfaltigkeit und neben der Sphäre und dem Torus die dritte Fläche, mit der sich alle geschlossenen 2-Mannigfaltigkeiten klassifizieren lassen. Die Immersion oben minimiert außerdem das Willmore-Funktional (minimale Elastizitätsenergie). Ein wunderbares Model um Laien etwas Topologie näherzubringen.



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2012-08-24 23:57


Aha.Topologisch unbeleckt wie ich bin, nehme ich das erstmal zur Kenntnis und zeige noch ein Beispiel zur numerischen Differentation in maple.
Maple
f := proc (t) t^2 end proc;
fdiff(f, [1], [3]);

Die erste eckige Klammer gibt die Differentationsvariable(n) an, die zweite den Auswertepunkt.





  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, vom Themenstarter, eingetragen 2012-08-25 01:46


Edit: siehe unten
[ Nachricht wurde editiert von calabi-yau am 26.08.2012 01:53:23 ]



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2012-08-25 19:03


Edit: siehe unten
[ Nachricht wurde editiert von calabi-yau am 26.08.2012 01:53:38 ]



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2012-08-26 01:52


also ich habe nun eine möglichkeit gefunden, die parametrisierung nach bogenlänge zu vermeiden. zur besseren übersicht habe ich die 2 vorhergehenden (jetzt redundanten) posts gelöscht.

Maple
restart; assume(t::real,x::real,y::real);
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B): BReal:=simplify(BReal,symbolic) assuming real:
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
cReal:=<Re(c),Im(c)>:
k:=subs(x=cReal(1),y=cReal(2),BReal):
Dk:=<diff(k(1),t),diff(k(2),t),diff(k(3),t)>:
Dkn:=Dk/VectorNorm(Dk,2):
DxB:=<diff(BReal(1),x),diff(BReal(2),x),diff(BReal(3),x)>:
DyB:=<diff(BReal(1),y),diff(BReal(2),y),diff(BReal(3),y)>:
DxBc:=subs(x=cReal(1),y=cReal(2),DxB):
DyBc:=subs(x=cReal(1),y=cReal(2),DyB):
N:=CrossProduct(DxBc,DyBc):
Nn:=N/VectorNorm(N,2):
q:=Matrix([[1+Nn(1)*I,Nn(2)+Nn(3)*I],[-Nn(2)+Nn(3)*I,1-Nn(1)*I]]):
x:=Matrix([[Dkn(1)*I,Dkn(2)+Dkn(3)*I],[-Dkn(2)+Dkn(3)*I,-Dkn(1)*I]]):
vv:=MatrixMatrixMultiply(q,MatrixMatrixMultiply(x,MatrixInverse(q))):
v:=<Im(vv[1,1]),Re(vv[1,2]),Im(vv[1,2])>:
DDkn:=<diff(Dkn(1),t),diff(Dkn(2),t),diff(Dkn(3),t)>:
w:=DDkn/VectorNorm(Dk,2):
f:=v(1)*w(1)+v(2)*w(2)+v(3)*w(3):
#evalf(subs(t=0.1,f));
#plot(f,t=0..1,numpoints=10);
 
chi:=Int(f*VectorNorm(Dk,2),t=0..a):
#evalf(subs(a=0.5,chi));
res1:=Int(cos(chi)*subs(t=a,VectorNorm(Dk,2)),a=0..s):
res2:=Int(sin(chi)*subs(t=a,VectorNorm(Dk,2)),a=0..s):
evalf(subs(s=0.5,res1));


Das wäre das Endergebnis (für einen Streifen), allerdings schafft mein PC es nicht, den letzten Befehl in annehmbarer Zeit zu berechnen. Was könnte man vereinfachen?



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2012-08-26 11:10


Kein Wunder, der Teilintegrand f ist Dutzende worksheet-Seiten lang.
Nach symbolischen Berechnungen sollte man immer die Teilausdrücke untersuchen und ggfs. vereinfachen lassen. Keep it simple.

Die letzte Zeile gibt neben dem Ergebnis auch die Berechnungszeit des subs-Befehls aus.



   
Maple
restart; assume(t::real,x::real,y::real);
with(plots):with(LinearAlgebra):
M:= Re( 1/(z^3-z^(-3)+sqrt(5)) * <I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))> ) + <0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B): BReal:=simplify(BReal,symbolic) assuming real:
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
c:=I*t:
cReal:=<Re(c),Im(c)>:
k:=subs(x=cReal(1),y=cReal(2),BReal):
Dk:=<diff(k(1),t),diff(k(2),t),diff(k(3),t)>:
Dkn:=Dk/VectorNorm(Dk,2):
DxB:=<diff(BReal(1),x),diff(BReal(2),x),diff(BReal(3),x)>:
DyB:=<diff(BReal(1),y),diff(BReal(2),y),diff(BReal(3),y)>:
DxBc:=subs(x=cReal(1),y=cReal(2),DxB):
DyBc:=subs(x=cReal(1),y=cReal(2),DyB):
N:=CrossProduct(DxBc,DyBc):
Nn:=N/VectorNorm(N,2):
q:=Matrix([[1+Nn(1)*I,Nn(2)+Nn(3)*I],[-Nn(2)+Nn(3)*I,1-Nn(1)*I]]):
x:=Matrix([[Dkn(1)*I,Dkn(2)+Dkn(3)*I],[-Dkn(2)+Dkn(3)*I,-Dkn(1)*I]]):
vv:=MatrixMatrixMultiply(q,MatrixMatrixMultiply(x,MatrixInverse(q))):
v:=<Im(vv[1,1]),Re(vv[1,2]),Im(vv[1,2])>:
DDkn:=<diff(Dkn(1),t),diff(Dkn(2),t),diff(Dkn(3),t)>:
w:=DDkn/VectorNorm(Dk,2):
f:=v(1)*w(1)+v(2)*w(2)+v(3)*w(3):
#evalf(subs(t=0.1,f));
#plot(f,t=0..1,numpoints=10);
f_simple:=simplify(f*VectorNorm(Dk,2)):
chi:=Int(f_simple,t=0..a):
#evalf(subs(a=0.5,chi));
VN:=simplify(VectorNorm(Dk,2)):
res1:=Int(cos(chi)*subs(t=a,VN),a=0..s):
#res2:=Int(sin(chi)*subs(t=a,VectorNorm(Dk,2)),a=0..s):
 
st:=time():evalf(subs(s=0.5,res1));time()-st;
 
 
 



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2012-08-26 15:11


Hi Ollie,

ja danke, das funktioniert. Zum Geschwindigkeitsvergleich wollte ich noch eine andere Methode ausprobieren, bei der ich die Umkehrfunktion der Längenfunktion doch wieder benutze, aber die fsolve Lösung ist irgendwie inkompatibel zum Rest:

Maple
kL:=Int(DkNorm,t=0..a):
kLi:=proc(l) fsolve(l=kL,a); end proc:
fL:=proc(L) subs(t=kLi(L),f); end proc:
 
sys:=diff(theta(s),s)=fL(s), diff(b1(s),s)=cos(theta(s)), diff(b2(s),s)=sin(theta(s));
p:=dsolve({sys,theta(0)=0,b1(0)=0,b2(0)=0},{theta(s),b1(s),b2(s)},type=numeric):
test:=odeplot(p,[b1(s),b2(s)],0..5,numpoints=10):
display(test);

Bei sys:=... kommt dann logischerweise
"Error, (in fsolve) s is in the equation, and is not solved for"
Wie packe ich die Umkehrfunktion denn richtig in die ODE?

PS: Ich fahre morgen in den Urlaub, evtl. kann ich dann nicht antworten, aber ich komme wieder. ;)
[ Nachricht wurde editiert von calabi-yau am 26.08.2012 15:11:32 ]



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2012-08-27 14:20


Hi, ich nehme an, dies ist nur ein Auschnitt aus einem anderen code als der bisherige.

Schau mal bei dsolve,numeric nach, unter dem Beispiel zur Option "known".

Gruß



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2012-09-12 21:47


Hallo Ollie,

sorry das ich solange nicht weitergeschrieben habe. Erst war ich im Urlaub und dann musste ich umziehen. Der Code sieht momentan folgendermaßen aus und funktioniert ganz gut:

Maple
restart; assume(x::real,y::real,t::real);
with(plots):with(LinearAlgebra):
M:=Re(1/(z^3-z^(-3)+sqrt(5))*<I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))>)+<0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B): BReal:=simplify(BReal) assuming real:
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
 
c:=exp(I*(Pi/2))*t:
cReal:=<Re(c),Im(c)>:
k:=subs(x=cReal(1),y=cReal(2),BReal): k:=simplify(k) assuming real:
#spacecurve([k(1),k(2),k(3)],t=0..1,color=black,axes=normal);
Dk:=<diff(k(1),t),diff(k(2),t),diff(k(3),t)>: Dk:=simplify(Dk) assuming real:
DkNorm:=VectorNorm(Dk,2): DkNorm:=simplify(DkNorm) assuming real:
DkN:=Dk/DkNorm: DkN:=simplify(DkN) assuming real:
DDkN:=<diff(DkN(1),t),diff(DkN(2),t),diff(DkN(3),t)>: DDkN:=simplify(DDkN) assuming real:
 
DxB:=<diff(BReal(1),x),diff(BReal(2),x),diff(BReal(3),x)>: DxB:=simplify(DxB) assuming real:
DyB:=<diff(BReal(1),y),diff(BReal(2),y),diff(BReal(3),y)>: DyB:=simplify(DyB) assuming real:
DxBc:=subs(x=cReal(1),y=cReal(2),DxB): DxBc:=simplify(DxBc) assuming real:
DyBc:=subs(x=cReal(1),y=cReal(2),DyB): DyBc:=simplify(DyBc) assuming real:
N:=CrossProduct(DxBc,DyBc): N:=simplify(N) assuming real:
NN:=N/VectorNorm(N,2): NN:=simplify(NN) assuming real:
q:=Matrix([[1+NN(1)*I,NN(2)+NN(3)*I],[-NN(2)+NN(3)*I,1-NN(1)*I]]):
x:=Matrix([[DkN(1)*I,DkN(2)+DkN(3)*I],[-DkN(2)+DkN(3)*I,-DkN(1)*I]]):
vv:=MatrixMatrixMultiply(q,MatrixMatrixMultiply(x,MatrixInverse(q))):
v:=<Im(vv[1,1]),Re(vv[1,2]),Im(vv[1,2])>: v:=simplify(v) assuming real:
f:=v(1)*DDkN(1)+v(2)*DDkN(2)+v(3)*DDkN(3): f:=simplify(f) assuming real:
 
fS:=subs(t=s,f):
DkNormS:=subs(t=s,DkNorm):
 
sys:=diff(theta(s),s)=fS, diff(b1(s),s)=cos(theta(s))*DkNormS, diff(b2(s),s)=sin(theta(s))*DkNormS:
p:=dsolve({sys,theta(0)=0,b1(0)=0,b2(0)=0},{theta(s),b1(s),b2(s)},type=numeric):
plo:=odeplot(p,[b1(s),b2(s)],0..1,numpoints=200):
display(plo);


Das Problem ist nun folgendes: Die Kurve c soll nun variieren. Nämlich will man verschiedene Winkel in der Definition von c oben. Im Code steht er momentan bei alpha=Pi/2. Wenn ich alpha=0 setze (also die Kurve ist dann c(t)=t), dann kommt bei der Berechnung von f weiter unten eine Art overflow. Wenn ich alpha=Pi/4 setze, dann dauert die Berechnung von DkNorm schon ewig. Sollte ich die Berechnung schon vor der Diffgleichung numerisch machen? Aber wie?



  Profil  Quote  Link auf diesen Beitrag Link
ThomasRichard
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 08.04.2010
Mitteilungen: 148
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, eingetragen 2012-09-14 11:35


Hallo calabi-yau,

diese Woche hat Oliver noch Urlaub, aber ich sehe, dass du auch auf MaplePrimes gefragt hast - gute Idee!



-----------------
Thomas Richard
Application Engineering / Technischer Support
Maplesoft Europe GmbH



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.04.2006
Mitteilungen: 901
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, vom Themenstarter, eingetragen 2012-09-15 09:59


Danke für die Info. Scheint eine schwierige Angelegenheit zu sein, auf MaplePrimes noch keine Antwort.

Ein kleines Zuckerl: Wenn ichs irgendwann hinbekomme, schreibe ich einen Artikel über das Modell auf dem MP. ;)



  Profil  Quote  Link auf diesen Beitrag Link
Ollie
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.05.2003
Mitteilungen: 5866
Aus: Aachen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, eingetragen 2012-09-23 13:20


Hi,
Ich habe die Normroutine aus dem Algebrapaket nicht verwendet und einfach sqrt(M1^2+M2^2+M3^2) geschrieben. Das vermeidet overhead. Für manche Werte von alpha ergeben sich lange Rechenzeiten (z.B. Pi/5), wobei ich nicht weiß, ob das nicht einen mathematischen Grund (Nähe von Singularität) hat. Wenn keine Probleme auftreten, dauert ein Durchlauf bei mir etwa 25 Sekunden.

Gruß
Maple
restart;ti:=time(): assume(x::real,y::real,t::real):
with(plots):with(LinearAlgebra):
M:=Re(1/(z^3-z^(-3)+sqrt(5))*<I*(z^2-z^(-2)),z^2+z^(-2),2*I/3*(z^3+z^(-3))>)+<0,0,2/5>:
B:=M/VectorNorm(M,2)^2:
BReal:=subs(z=x+I*y,B): BReal:=simplify(BReal) assuming real:
#plot3d([BReal(1),BReal(2),BReal(3)],x=-1..1,y=-1..1,grid=[80, 80]);
 
c:=exp(I*(3*Pi/4))*t;
cReal:=<Re(c),Im(c)>;
k:=subs(x=cReal(1),y=cReal(2),BReal): k:=simplify(k) assuming real:
#spacecurve([k(1),k(2),k(3)],t=0..1,color=black,axes=normal);
Dk:=<diff(k(1),t),diff(k(2),t),diff(k(3),t)>: Dk:=simplify(Dk,size) assuming real:
DkNorm:=(add(Dk(i)^2,i=1..3))^(1/2):DkNorm:=simplify(DkNorm) assuming real:
DkN:=Dk/DkNorm: DkN:=simplify(DkN) assuming real:
DDkN:=<diff(DkN(1),t),diff(DkN(2),t),diff(DkN(3),t)>:DDkN:=simplify(DDkN) assuming real:
 printf("Zeit bis hierhin:%f \n",time()-ti);
 
 
DxB:=<diff(BReal(1),x),diff(BReal(2),x),diff(BReal(3),x)>: DxB:=simplify(DxB) assuming real:
DyB:=<diff(BReal(1),y),diff(BReal(2),y),diff(BReal(3),y)>: DyB:=simplify(DyB) assuming real:
DxBc:=subs(x=cReal(1),y=cReal(2),DxB): DxBc:=simplify(DxBc) assuming real:
DyBc:=subs(x=cReal(1),y=cReal(2),DyB): DyBc:=simplify(DyBc) assuming real:
N:=CrossProduct(DxBc,DyBc): N:=simplify(N) assuming real:
NN:=N/(add(N(i)^2,i=1..3))^(1/2): NN:=simplify(NN) assuming real:
q:=Matrix([[1+NN(1)*I,NN(2)+NN(3)*I],[-NN(2)+NN(3)*I,1-NN(1)*I]]):
x:=Matrix([[DkN(1)*I,DkN(2)+DkN(3)*I],[-DkN(2)+DkN(3)*I,-DkN(1)*I]]):
vv:=MatrixMatrixMultiply(q,MatrixMatrixMultiply(x,MatrixInverse(q))):simplify(vv):
 
 
vvc:=evalc(vv[1,2]):
v1:=Im(evalc(vv[1,1])):v2:=Re(vvc):v3:=Im(vvc):
 
 
v:=simplify~(v) assuming real:
f:=v1*DDkN(1)+v2*DDkN(2)+v3*DDkN(3): #f:=simplify(f) assuming real;
 
printf("Zeit bis hierhin:%f \n",time()-ti);
fS:=subs(t=s,f):
DkNormS:=subs(t=s,DkNorm):
 
sys:=diff(theta(s),s)=fS, diff(b1(s),s)=cos(theta(s))*DkNormS, diff(b2(s),s)=sin(theta(s))*DkNormS:
p:=dsolve({sys,theta(0)=0,b1(0)=0,b2(0)=0},{theta(s),b1(s),b2(s)},type=numeric):
plo:=odeplot(p,[b1(s),b2(s)],0..1,numpoints=200):
display(plo);
 
 



  Profil  Quote  Link auf diesen Beitrag Link
calabi-yau hat die Antworten auf ihre/seine Frage gesehen.
Bewerte diesen Thread:
[Was sonst bewertet wurde]
 Neues Thema [Neues Thema]

 Antworten [Antworten]   

 Druckversion [Druckversion]


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2013 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]