|
Autor |
Funktion plotten |
|
KurtFre7
Junior  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  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  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  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  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  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  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  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  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  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  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. |
|
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]
|