Matroids Matheplanet Forum Index
Moderiert von matroid mire2
Mathematische Software & Apps » Sage - Sagemath » Funktion plotten
Autor
Universität/Hochschule J Funktion plotten
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Themenstart: 2022-09-05

Hallo, ich will in sage eine Funktion plotten. In dieser funktion taucht allerdings eine Summe deren oberster summationsindex (hier: floor(log(x)/log(2)) ) von der eigegeben Variable abhängt. Wenn ich die Funktion plotten möchte, kommt die Fehlermeldung:"unable to convert floor(log(x)/log(2)) to an integer" Ich sende mal die Definition meiner Funktion und die dazugehörige Fehlermeldung beim Plotversuch als Bild. Vielleicht sieht ja jemand wo der Fehler liegt. Das ist meine Funktion: https://matheplanet.com/matheplanet/nuke/html/uploads/b/55796_PI_mit_Fl.png Und das die Fehlermeldung: https://matheplanet.com/matheplanet/nuke/html/uploads/b/55796_Bildschirmfoto_vom_2022-09-05_16-02-35.png Mein eingegebener Befehl: plot(PI(x,Rho(5,60)),(x,4,10)) (Rho(5,60) generiert einfach eine Liste an komplexen Zahlen)


   Profil
Wario
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 01.05.2020
Mitteilungen: 1078
  Beitrag No.1, eingetragen 2022-09-05

Teste evtl. mal, ob er floor(x) = x -frac(x) verdaut.


   Profil
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Beitrag No.2, vom Themenstarter, eingetragen 2022-09-06

danke Wario für den Tipp. Leider kommt da die "gleiche" Fehlermeldung: unable to convert log(x)/log(2) - frac(log(x)/log(2)) to an integer ich finde es so komisch, da die funktion ja funktioniert und mir auch Werte ausgibt für den Bereich in dem ich sie plotten möchte...


   Profil
wessi90
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.09.2011
Mitteilungen: 2123
  Beitrag No.3, eingetragen 2022-09-06

Hallo, Könntest du den Code bitte nicht als Bild einfügen sondern in eine Code Umgebung kopieren? Das geht unten per Click auf Source code. Dann kann jeder das ganze leicht kopieren und ist bestimmt gewillter zu helfen ;) Am besten du postest den kompletten Code also inklusive aller geladener Pakete etc. Beispiel: \sourceon Sage def f(x): return x**2 \sourceoff


   Profil
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Beitrag No.4, vom Themenstarter, eingetragen 2022-09-06

\quoteon(2022-09-06 14:32 - wessi90 in Beitrag No. 3) Hallo, Könntest du den Code bitte nicht als Bild einfügen sondern in eine Code Umgebung kopieren? Das geht unten per Click auf Source code. Dann kann jeder das ganze leicht kopieren und ist bestimmt gewillter zu helfen ;) Am besten du postest den kompletten Code also inklusive aller geladener Pakete etc. Beispiel: \sourceon Python def f(x): return x**2 \sourceoff \quoteoff Heuy danke für den Hinweis!!! Das mache ich gerne Hier die Funktionen die ich benutze um mir eine Liste der Nullstellen der Ruiemannschen Zetafunktion geben zu lassen. (alles komplexe Zahlen) Wahrscheinlich weniger interessant, aber wird benöttigt. \sourceon Sage def Rho(n,k): #gibt eine Liste der ersten n Nullstellen der Riem-Zetafunktion und deren komplex konjugierten. Ermittlung durch k-maliges Intervallhalbierungsverfahren. a=[] b=NS(n,k) for l in range(n): a.append(1/2+I*b[l]) a.append(1/2-I*b[l]) return a #Funktionen die dafür benötigt werden def NS(n,k): #Ermittelt die n Nullstellen(Realteil>0) durch k malige Intervallhalbierung v=[] t=1 while len(v)


   Profil
wessi90
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.09.2011
Mitteilungen: 2123
  Beitrag No.5, eingetragen 2022-09-06

Eventuell solltest du Python noch durch Sage ersetzen, das sieht zwar sehr ähnlich aus, aber vielleicht ist die Darstellung dann doch schöner.


   Profil
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Beitrag No.6, vom Themenstarter, eingetragen 2022-09-06

\quoteon(2022-09-06 16:07 - wessi90 in Beitrag No. 5) Eventuell solltest du Python noch durch Sage ersetzen, das sieht zwar sehr ähnlich aus, aber vielleicht ist die Darstellung dann doch schöner. \quoteoff Oh danke, dachte das wär egal, einen moment ^^


   Profil
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 1923
  Beitrag No.7, eingetragen 2022-09-06

Hallo KurtFre7, Du hast eine sehr umständliche Berechnung angegeben, die zwar mit einzelnen Funktionswerten funktioniert, die ABER den Plot-Befehl durcheinander bringt: dieser arbeitet nur mit Variable x und das x wird symbolisch weiterverarbeitet (statt Zahlenwert). Dann auch noch komplexe Zwischenergebnisse... Umgehen kann man das z.B. mit list_plot, wo man andere Variablen eintragen kann: \sourceon SAGE def Rho(n,k): #gibt eine Liste der ersten n Nullstellen der Riem-Zetafunktion und deren komplex konjugierten. Ermittlung durch k-maliges Intervallhalbierungsverfahren. a=[] b=NS(n,k) for l in range(n): a.append(1/2+I*b[l]) a.append(1/2-I*b[l]) return a #Funktionen die dafür benötigt werden def NS(n,k): #Ermittelt die n Nullstellen(Realteil>0) durch k malige Intervallhalbierung v=[] t=1 while len(v)


   Profil
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Beitrag No.8, vom Themenstarter, eingetragen 2022-09-06

Hallo Gerd, erst einmal vielen Dank, dass du dir meine Frage so genau angesehen und eine freundliche Antwort formuliert hast. Zum Punkt dass meine Funktion extrem langsam ist: einiges an Rechenaufwand konnte ich schonmal verringern indem ich die Berechnung der Liste Rho einmalig durchgeführt habe und durch die Funktion rho mir einfach den Teil der Liste ausgeben lasse, welchen ich gerade in die Funktion PI einspeisen will. \sourceon Sage def Rho(n,k): a=[] b=NS(n,k) for l in range(n): a.append(1/2+I*b[l]) a.append(1/2-I*b[l]) return a a=Rho(500,100) def rho(n,b): c=b[0:2*n] return c #z.B.: rho(2,a) [0.500000000000000 + 14.1347251417347*I, 0.500000000000000 - 14.1347251417347*I, 0.500000000000000 + 21.0220396387716*I, 0.500000000000000 - 21.0220396387716*I] #oder in PI PI(4,rho(100,a)) 2.16528431019580 + 1.33226762955019e-15*I #das mit dem Imaginärteil der eigentlich ganz verschwinden sollte funktioniert doch noch nicht so gut :D \sourceoff Für die Stückweise definierte Funktion "Inte" kenne ich zwei Alternativen: entweder stückelt man sie nur auf zwei Intervalle und zwar \sourceon Sage Inte = piecewise([([2,10], arctan((0.45*x)/ln(x))/(x**2.7)), ((10,oo),0)], var=x) \sourceoff mit den vielen Fallunterscheidungen war ich zugegebenermaßen etwas kleinlich... Falls das einen merkbaren unterschied macht würde ich auch nur zwei Intervalle nutzen. (Du hast hier das letzte Intervall "nur" bis 10 hoch 10 gehen lassen, bringt das einen Vorteil für den Rechenaufwand?) oder man benutzt stattdessen folgendes Integral int(1/(t*(t^2-1)*ln(t)),t,x,\inf) Ich habe es aber, vor allem wegen seiner oberen Grenze, nicht geschafft es zu benutzen. Zum Plotten: das mit list_plot hat jetzt auch bei mir funktioniert, danke für den Tipp! Hast du auch eine Idee wie man ein Integral erstellen kann in welchem die Funktion PI vorkommt. Ich wollte nämlich durch das Integral int(abs(\pi(t)-PI(t,list)),t,a,b) quantifizieren wie gut PI die Primzahlzählfunktion pi annähert. Der Fehler war allerdings der gleiche wie beim Plotversuch \sourceon Sage def Differenz(x,n): return prime_pi(x)-PI(x,rho(n,a)) integral(abs(real(Differenz(x,5))),x,a,b) ... ValueError: cannot convert floor(log(x)/log(2)) to int \sourceoff Noch eine Frage zum Abschluss. Was meinst du noch mit bekannteren Funktionen? Dass man beispielsweise moebius oder Ei noch durch etwas ersetzen könnte? So! Nochmal ein feundliches Danke und beste Grüße Simon


   Profil
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 1923
  Beitrag No.9, eingetragen 2022-09-06

zu "cannot convert floor(log(x)/log(2)) to int" ist der gleiche Fehler wie oben: SAGE und/oder Deine Funktionen davor haben ein Problem bei der Behandlung von Übergabeparametern! Funktionen wie plot und integral scheinen zwingend das x zu verlangen, was aus Sicht einer universellen Programmiersprache unverständlich ist: \sourceon SAGE # Versuche mit anderen Argumentennamen schlagen eigenartigerweise fehl: plot(...,(xx,4,10)) Err: xx unbekannt #oder t statt x: plot(t*2,(t,5.1,6.2), plot_points=9) Error -> total unlogisch! #oder integral(abs(real(Differenz(t,5))),t,4.0,4.5) Err: t unbekannt \sourceoff Dieses x schleppt die Sprache als Symbol {Object oder String} mit sich herum (was beim symbolischen Integrieren ja durchaus sinnvoll ist). Jedoch beim numerischen Rechnen müssen Übergabeparametern als Zahlenwert (double) behandelt werden. Da die Funktionen plot und integral zwingend das x verlangen, kannst Du ja mal probieren, Dein x in den Hilfsfunktionen zuvor durch andere Variablen {k oder t ...} zu ersetzen. Schritt für Schritt müssen so die Übergabeparameter (Argumente) universell gemacht werden, denn ein symbolisches x {Typ Objekt oder String} kann nicht wie double-Zahlen später in eine Ganzzahl ( int32 oder int64) gewandelt werden. Mit "bekannteren Funktionen" meine ich: - prime_pi(x) - https://functions.wolfram.com/NumberTheoryFunctions/PrimePi/


   Profil
KurtFre7
Junior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.08.2022
Mitteilungen: 11
  Beitrag No.10, vom Themenstarter, eingetragen 2022-09-07

Ah ja, so etwas in die Richtung dachte ich mir auch schon. Ich tüftle weiter herum! Und jetzt weiß ich was du mit bekannteren Funktionen meinst, danke für den Hinweis. Leider ist es gerade Teil meiner Aufgabe diese nicht zu verwenden :D Dann schließe ich das Thema erstmal :)


   Profil
KurtFre7 hat die Antworten auf ihre/seine Frage gesehen.
KurtFre7 hat selbst das Ok-Häkchen gesetzt.
KurtFre7 wird per Mail über neue Antworten informiert.

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-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. 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]