Graph - exponentiell durch zwei Punkte

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Hallo :3,
ich bräuchte Hilfe bei meinem Problem. :D Ich hab schon überall nachgeschaut, also Internetseiten und YouTubevideos durch forstet, aber ich habe nichts gefunden. :/
Also ich hab schon einen Graph der exponentiell ist, aber wie kann ich das machen das die Linie durch zwei Punkte geht. Die Koordinaten der Punkte weiß ich.

P1(2.0|1.0) und P2(0.25|8.0)

Code: Alles auswählen

# Graph (exponential) erstellen
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.01, 5.0, 0.01)
y = np.exp(-x)

plt.plot(x, y)
plt.title("Beispiel")
plt.ylabel("Y - Achse")
plt.xlabel("X - Achse")
plt.grid(True)
plt.show()
Ich hoffe ihr könnts mir helfen. Ansonsten muss ich das wohl fallen lassen. :) :/
Zuletzt geändert von Anonymous am Dienstag 7. Februar 2017, 21:54, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: Du mußt halt Deine Exponentialfunktion passend parametrisieren (bei zwei Punkten sind das zwei Parameter) und diese so bestimmen, dass die Funktion durch Deine zwei Punkte geht.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

@Sirius3
Aber genau das ist ja mein Problem. Ich weiß nicht wie ich das machen soll. Kannst du mir nicht ein Beispiel in die richtige Richtung geben?
Es ist blöd wenn du mir schon die Lösung sagst, dann kann ich ja daraus nichts lernen. :)
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: das mußt Du schon selbst wissen. Je nachdem, wie man e^x parametrisiert, bekommt man unterschiedliche Funktionen. Warum willst Du denn, dass die Kurve durch diese zwei Punkte geht?
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

@Sirius3
Warum? Hm... weil ich das für die Schule und für mich selbst mache. :D
Es ist kein muss für die Schule, aber trotzdem interessiert es mich. Ich will meine Wissenslücke hier schließen. Ich denk ich bin noch ein Neuling in Sachen programmieren mit Python. Ich hab in den Weihnachtsferien angefangen mit Python. :D

Ich will ein Volumen-Druck-Diagramm machen, also ein V-p-Diagramm. :3

Ich hab jetzt meine Exponentialfunktion aufgestellt. Jetzt muss ich nur noch wissen wie ich das einsetze. :K :D
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: wenn Du das Gesetz von Boyle und Mariotte visualisieren willst, dann verwendest Du die falsche Formel. Der Rest ist Mathematik. Gleichung aufstellen, x und y der Punkte einsetzen, nach Umbekannter auflösen, fertig.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

@Sirius3
Ich muss doch nur noch irgendwie irgendwo meine Drücke einsetzten und dann bin ich fertig, oder nicht?
Ich hab ja p1 und p2 noch nicht eingesetzt.
Ich weiß aber nicht weiter.

Code: Alles auswählen

# Druck (p2) berechnen
#p1 = float(input("Druck p1 in bar = "))
#V1 = float(input("Volumen V1 in l = "))
#V2 = float(input("Volumen V2 in l = "))

p1 = 1.0
V1 = 2.0
V2 = 0.25

p2 = (p1 * V1) / V2

print("Druck p2 in bar = %f" % float(p2))

# Graph (exponential) erstellen
import matplotlib.pyplot as plt
import numpy as np

V = np.arange(V2, V1, 0.01)
P = np.exp(-V)

plt.plot(V, P)
plt.title("V-p-Zustandsdiagramm")
plt.ylabel("Druck p in e5 N/m²")
plt.xlabel("Volumen V in e-3 m³")
plt.grid(True)
plt.show()
Zuletzt geändert von Anonymous am Mittwoch 8. Februar 2017, 23:15, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Jetzt habe ich einen anderen Weg gefunden eher durchs probieren einen Graph den ich fast wollte.
Wenn niemand mir die richtige Lösung sagt, dann muss ich halt mit der ungenauen hier auskommen.
Den Graph den ich wollte wäre ohne das "m" und ohne scipy, aber ohne Hilfe gehts halt nur so.
Wenn jemand eine bessere Lösung hat, dann kann er/sie/es mir gern sagen.

[codebox=python file=Unbenannt.txt]# Druck (p2) berechnen
p1 = float(input("Druck p1 in bar = "))
V1 = float(input("Volumen V1 in l = "))
V2 = float(input("Volumen V2 in l = "))
p2 = (p1 * V1) / V2
print("Druck p2 in bar = %f" % float(p2))

# Graph (exponential) erstellen
import matplotlib.pyplot as plt
import numpy as np

V = np.arange(V2, V1, 0.001)
k = float((1/(((1/8)**(1/1.75))**2))*((1/8)**(1/1.75)))
m = 4.84522
P = m*k*np.exp(-k*V)+p1

plt.plot(V, P)
plt.title("V-p-Zustandsdiagramm")
plt.ylabel("Druck p in e5 N/m²")
plt.xlabel("Volumen V in e-3 m³")
plt.grid(True)
plt.show()[/code]
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: Falls Du ein V-p-Diagramm für ein ideales Gas zeichnen willst, benutzt Du immer noch die falsche Formel. In Deiner jetzigen Formel wird der Druck p1 erst bei unendlichem Volumen erreicht. Solch ein Gas kann nicht existieren.

Wenn Du Hilfe erwartest, solltest Du zumindest sagen, was Du genau machen willst. Du hast zwei Punkte, also zwei Gleichungen, damit kannst Du zwei Unbekannte berechnen. In der ursprünglichen Formel y = e^(-x) gab es null Unbekannte, in der jetzigen Formel y = a * e ^ (-b*x) + c gibt es drei. Du siehst das Problem, das ich mit Deiner Aufgabenstellung habe?
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Zustandsgleichung eines idealen Gas (1.Form):
p1*V1/T1 = p2*V2/T2

Aber da ich eine isotherme Kurve machen will gibt es keine Temperaturänderung.
Also rechne ich mit dieser Formel:
p1*V1 = p2*V2

Habe ich nicht bei meinem ersten Beitrag geschrieben was ich machen will?
Also ich hab zwei Punkte die sind:
1. Punkt (2.0|1.0) und 2. Punkt(0.25|8.0)

Einsetzen in die Formel f(x)=a*b^x
1.) 1.0 = a*b^2.0
2.) 8.0 = a*b^0.25

Bruchstrich zwischen 1.) und 2.): a fällt weg
1/8 = b^1.75 -> b = 1.75 Wurfel aus 1/8

b einsetzen in eine Gleichung und dann a ausrechnen und dann hab ich meine Gleichung.
Das m im code hab ich durchs probieren her bekommen.
BlackJack

Im ersten Beitrag hast Du vorn *irgendeiner* exponentiellen Funktion geschrieben. Ich denke nicht, das Dir da sehr viel geholfen gewesen wäre wenn Dir jemand eine exponentielle Funktion geschrieben hätte die mit Deinen Formeln nichts zu tun gehabt hätte.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Ok.
Da wusste ich auch nicht das ich eine Exponentialfunktion aufstellen muss.
Hätt ich es gewusst hätt ich die Funktion mit angegeben.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: jetzt zauberst Du eine weitere Funktion herbei: f(x) = a * b ** x
Mit der von dem beschriebenen Vorgehen bekommst Du a und b so, dass f(x) durch Deine zwei Punkte geht. Da mußt Du dann auch nichts mehr rumprobieren. Mit der idealen Gasgleichung hat das aber immer noch nichts zu tun.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Lass die ideale Gasgleichung weg.

a*b**x

Ok, jetzt hab ich x ausgerechnet.

x = 2

[codebox=python file=Unbenannt.txt]# Druck (p2) berechnen
#p1 = float(input("Druck p1 in bar = "))
#V1 = float(input("Volumen V1 in l = "))
#V2 = float(input("Volumen V2 in l = "))

p1 = 1.0
V1 = 2.0
V2 = 0.25

p2 = (p1 * V1) / V2
print("Druck p2 in bar = %f" % float(p2))

# Graph (exponential) erstellen
import matplotlib.pyplot as plt
import numpy as np

V = np.arange(V2, V1, 0.001)
#k = float((1/(((1/8)**(1/1.75))**2))*((1/8)**(1/1.75)))
#m = 4.84522
#P = m*k*np.exp(-k*V)

a = float((1/(((1/8)**(1/1.75))**2)))
b = float(((1/8)**(1/1.75)))
x = 2
P = a*b**x

plt.plot(V, P)
plt.title("V-p-Zustandsdiagramm")
plt.ylabel("Druck p in e5 N/m²")
plt.xlabel("Volumen V in e-3 m³")
plt.grid(True)
plt.show()
[/code]



Lass ich es genauso, dann bekomm ich ein Fehler. Ich weiß nicht was mir der Fehler sagen soll.

Traceback (most recent call last):
File "C:/Users/Atta/Desktop/Programmierung/Python Privat/Graph - exponential.py", line 22, in <module>
plt.plot(V, P)
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\pyplot.py", line 3318, in plot
ret = ax.plot(*args, **kwargs)
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\__init__.py", line 1892, in inner
return func(ax, *args, **kwargs)
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\axes\_axes.py", line 1406, in plot
for line in self._get_lines(*args, **kwargs):
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\axes\_base.py", line 407, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\axes\_base.py", line 385, in _plot_args
x, y = self._xy_from_xy(x, y)
File "C:\Users\Atta\AppData\Roaming\Python\Python35\site-packages\matplotlib\axes\_base.py", line 244, in _xy_from_xy
"have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have shapes (1750,) and (1,)

Process finished with exit code 1
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: der Fehler sagt Dir, dass Du für Plot gleich viele x- und y-Werte brauchst. Du hast 1750 x-Werte (V) aber nur einen y-Wert (P). Im letzten Post hast Du doch schön gezeigt, wie man a und b aus V1, p1 und V2, p2 ausrechnen kann. Warum nimmst Du jetzt feste Werte an?
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Also wenn ich dich richtig verstanden hab, dann heißt es das ich für V ein Bereich hab aber für P nur einen Wert habe.

Jetzt denk ich aber wiederum das ich das x gar nicht brauche, weil mein x eigentlich V ist.
Aber wenn ich V für x einsetze, dann ist die V Achse im Diagramm richtig aber mein P nicht.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: Genau, x ist V, aber was meinst Du damit, dass die V-Achse richtig ist, aber P nicht?
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Also die P Achse stimmt nicht.
Normalerweise ist P2 bei (0.25|8.0) aber jetzt ist der Punkt P2 im Graph bei (0.25|1).
Und P1 sollte bei (2.0|1) sein, aber jetzt ist es bei (1.95|0.13).

Also ich hab noch getestet ob die Exponentialfunktion richtig ist indem ich es in meinem Taschenrechner eingegeben hab und da geht sie auch die zwei Punkte. Also a und b ist richtig, aber mein hoch x ist nicht richtig

[codebox=pycon file=Unbenannt.txt]p1 = 1.0
V1 = 2.0
V2 = 0.25

p2 = (p1 * V1) / V2
print("Druck p2 in bar = %f" % float(p2))

# Graph (exponential) erstellen
import matplotlib.pyplot as plt
import numpy as np

V = np.arange(V2, V1, 0.1)
#k = float((1/(((1/8)**(1/1.75))**2))*((1/8)**(1/1.75)))
#m = 4.84522
#P = m*k*np.exp(-k*V)

a = float((p1/(((p1/p2)**(p1/1.75))**V2)))
b = float(((p1/p2)**(p1/1.75)))
#x = 2
P = a*b**V

plt.plot(V, P)
plt.title("V-p-Zustandsdiagramm")
plt.ylabel("Druck p in e5 N/m²")
plt.xlabel("Volumen V in e-3 m³")
plt.grid(True)
plt.show()[/code]

Wär toll zu wissen ob ich hier Bilder einfügen kann, dann kannst du es nämlich sehen was ich mein.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@SkrixlerAnon: offensichtlich sind a und b nicht richtig.
[codebox=text file=Unbenannt.txt]
p1 = a * b ** V1
p2 = a * b ** V2

==> p1 / p2 = b ** (V1 - V2)
==> ln(p1 / p2) = ln(b) * (V1 - V2)
[/code]
Ich komm jedenfalls auf etwas anderes.
SkrixlerAnon
User
Beiträge: 30
Registriert: Dienstag 7. Februar 2017, 20:05
Wohnort: Bayern
Kontaktdaten:

Also meine Funktion lautet:

f(x) = 1/(((1/8)**1/1.75)**2)*(((1/8)**1/1.75)**x)

Genau so hab ich die Funktion in meinem Taschenrechner eingegeben und mein Taschenrechner zeigt mir die richtigen Werte an:

X | Y
0.25 | 8
2 | 1

Ich hab mir Geogebra heruntergeladen und dort schaut die Funktion richtig aus.
Antworten