kleine Mathe-Spielereien

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

klicke mal auf den Link und schau dir an, wie das aussehen soll.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dennis89: der Link funktioniert nicht.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Zum editieren war ich zu langsam, hier der neue Link:
https://www.dropbox.com/s/dpwhcgzk9t2b3 ... 8.png?dl=0

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Danke für den link. heruntergeladen und gedruckt.
Alles soll jetzt gut werden und müsste jetzt klappen.
Anbei ein Beispiel aus meinen Anfängen in Python.
Wer immer strebend sich bemüht, den können wir erlösen. F II Goethe
Gute Zeit OSWALD

Code: Alles auswählen

[/

import math

a = ((3 + 5) / 2 + 3) * (2 + 1)**2
print ("Klammern:", a)
b = math.sqrt(a)
print ("Wurzel:",b)
c = math.fsum([ 1.5, 2.3, 1.9, -3.0, 2.8])
print ("Summe exakt:", c)
c1 = sum([ 1.5, 2.3, 1.9, -3.0, 2.8])
print ("Summe:", c1)
d = math.exp(-c)
print ("Exp.:", d)


code]
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Code muß zwischen die Tags und nicht zwischen [/ und code]
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Und das Leerzeichen zwischen print und ( ist überflüssig.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

05.08.22

Probieren geht über studieren.na dann mal los
OSWALD

code


import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * np.exp(-b * x) + c
Definieren Sie die Daten, die mit etwas Rauschen angepasst werden sollen:

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
rng = np.random.default_rng()
y_noise = 0.2 * rng.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')
Fit für die Parameter a, b, c der Funktion func :

popt, pcov = curve_fit(func, xdata, ydata)
popt
array([2.56274217, 1.37268521, 0.47427475])
plt.plot(xdata, func(xdata, *popt), 'r-',
label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
Beschränken Sie die Optimierung auf den Bereich von , und :0 <= a <= 30 <= b <= 10 <= c <= 0.5

popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5]))
popt
array([2.43736712, 1. , 0.34463856])
plt.plot(xdata, func(xdata, *popt), 'g--',
label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()


code
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst Code Tags benutzen.

[code*]

[/code*]

Die müssen vor und hinter deinem Code stehen. Und der Stern * muss weggelassen werden (sonst zeigt der das ja hier nicht an).

Du kannst das üben mir der Vorschau Funktion, bis es Sitzt.
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hier sieht man, wie der Beitrag richtig aussehen würde.
Oben steht Fließtext, dann ein Codeblock, der nur den ausführbaren Python-Quelltext enthält:

Code: Alles auswählen

import math

a = ((3 + 5) / 2 + 3) * (2 + 1)**2
print ("Klammern:", a)
b = math.sqrt(a)
print ("Wurzel:",b)
c = math.fsum([ 1.5, 2.3, 1.9, -3.0, 2.8])
print ("Summe exakt:", c)
c1 = sum([ 1.5, 2.3, 1.9, -3.0, 2.8])
print ("Summe:", c1)
d = math.exp(-c)
print ("Exp.:", d)
Zuletzt kann auch noch Fließtext folgen, oder ein weiterer Codeblock, oder noch ganz andere Dinge.. :mrgreen:
Man kann übrigens auch bei fremden Beiträgen auf den "Zitat"-Knopf (das Anführungszeichen) klicken, um zu studieren, wie dort die Tags benutzt wurden.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Hallo ich werde jetzt die gleichen Z;eichen setzen , die ch eben
über einen Ziatatknopf gesehen haben.

Code: Alles auswählen


 import scipy
import numpy as np
import matplotlib.pyplot as plt 
from scipy.stats import norm
 
[code]

das müsste jetzt stimmen
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, das stimmt immer noch nicht. Du hast das schliessende Code-Tag falsch gemacht, da muss ein Slash (/) rein. Und wie gesagt, mit der Vorschau-Funktion kannst du sowas auch selber pruefen, statt nur zu hoffen.
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

6.8.2022
*Man fliegt schneller hier raus, als man schreiben kann.Soeben passiert*
Ein neues Spiel, ein neuer Spass.
Heute Thema : plynome 3.Grades mit scipy und matplotlib plotten.
Beginn mit dem einfachsten Code.
Zuletzt endlich die tags richtig einsetzen.

Code: Alles auswählen


import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x, y)
F = 3 + 3*x + 6*X*Y + 5*X**4
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)
plt.show()


'wer immer stetig strebend sich bemüht, den können wir erlösen FII, Goethe
`Gute Zeit OSWALD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

]Dieses Spiel, das "Spass" macht , hat hat aber auch einen handfesten
Hintergrund. Die Mathematik. Getoppt wird die Visualisierung z.B . nur noch
durch den Isomorphismus, den ich nie verstehen werde.
Auch für die Visualisierung spielt Mathematik eine die Rolle schlechthin.
Es sollte sich also lohnen ,mit dem vorliegenden Code alle Funktionen
und Parameter auszuprobieren. Die entstehenden ' Bildchen' sind alle
keine Zufälle, sondern Ergebnisse von der Anwendung mathematische
Funktionen.Erst verstehen, dann neue Parameter hinzufügen. Ein weiter Weg.


[

Code: Alles auswählen


# -*- coding: utf-8 -*-
import scipy  
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-1, 5, 0.25)
y = np.arange(-1, 5, 0.25)
X, Y = np.meshgrid(x, y)

F= np.exp(Y-X)
#F= np.exp(X-Y)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)

plt.show()
   
Gute Zeit OSWALD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Hier sehen wir eine Darstellung von 2 nach unten geöffnete (inverse) Parabeln als
Flächen abgebildet . Ich vermute, dass die Funktion zwei reale Nullstellen hat.

# -*- coding: utf-8 -*-
import scipy
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-1,2,0.25)
y = np.arange(-1,2,0.25)
X, Y = np.meshgrid(x, y)

#F = - 5*X**2 +4*X -12
F = - 5*Y**2 +4*Y -12


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)
plt.show()
Gute Zeit OSWALD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Hier die Darstellung von zwei inversen nach unten offenen Parabeln
als Flächen.

Code: Alles auswählen


# -*- coding: utf-8 -*-
import scipy  
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-1,2,0.25) 
y = np.arange(-1,2,0.25)
X, Y = np.meshgrid(x, y)

#F = - 5*X**2 +4*X  -12
F  = - 5*Y**2 +4*Y  -12 


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)

plt.show()





Gute Teit OSWALD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Abschließend noch der Versuch zwei sattelähnliche Figuren
mit einfachsten Mitteln in 3D zu erzeugen.

Code: Alles auswählen

# -*- coding: utf-8 -*-
import scipy  
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


x = np.arange(-1,2,0.25) 
y = np.arange(-1,2,0.25)
X, Y = np.meshgrid(x-1,y)

F = X*Y 
F = Y**2 - X**2 -1

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)
plt.title("Beide Paraboloide ,sattelähnlich  ")
plt.show()




Gute Zeit OSWALD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

Mein "Universalrechner liegt jetzt in verbesserter Version vor.
Er kann jetzt 'gemischte Terme folgender Form verarbeiten
z.B. Polynome plus 'normale Terme'. : 3*x**3 - sin(3) + Wnat ( 1000,4) -exp(3) + 2x**2 - 25*x
Geben Sie einfach im Programm genannte Zeile als Test ein.
Ein gleiches konnte ich in numpy nicht umsetzen (noch nicht?)
Code läuft aud PYTHON

Code: Alles auswählen



import math
from math import *
x =1
print()
print("")

def W10(Rad, Wp):
          mantisse =(1/Wp)* log10(Rad)
          Ergebnis= round(10 **mantisse,4 )    
          return Ergebnis
def Wnat(R, Wp):
          mantisse =(1/Wp)* log(R)
          Ergebnis= round(2.7183 **mantisse ,6)    
          return Ergebnis
def main():
   print(" Geben Sie bitte einzelne oder gleichzeitig   mehrere  Terme ein:")
   print(" Erlaubt sind alle mathematischen  in Python integrierten Funktionen")
   print(" Eigene Funktionen können  integriert werden (open source code !")
   print(" Terme und Polynome dürfen gemischt werden.  ")
   print(" Beispiel : 3 *x**2 -4*x**2 + cos(2) - exp(0.5) + Wnat(225,5)    ")                                                        
   
   x =1
   p=  input("Bitte   Terme zur Auswertung  hi er eintragen  :" ,   )

   print ()
   print ()
   print("Ergebnis = :", eval(p))
  

if __name__ == '__main__':
    main()

Gute Zeit OSWA LD
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

18.082022 Pardon, da ist was schief gelaufen.

NUMPY Arrays und Matrizen. Ein erster Versuch.
Praktisches Beispiel
" München Leichtathletik-EU-Meisterschaft"
Ralf , Otto, , John und Max haben nach dem Wettkampf Hunger
und kaufen sich Wurst, jeder eine andere Sorte und davon unterschiedliche Mengen.
Ralf kauft 100g der Wurstsorte A
50g B
70 g C
Otto 135 g A
90 g B
120 g C
John 107 g A
73 g B
56 g C
Max 95 g A
107g B
87g C
Preistafel : Sorte A = 1.30 / 100g
B = 1,11
C = 0.99
Was zahlt jeder der Männer für seinen Einkauf ?
(Ergebnis", [2.548 3.942 2.7557 3.284 ]" )

Gute Zeit OSWALD

Code: Alles auswählen

[

import numpy as np


def main(): 

 Wurstmenge = np.array([[100,50,70],[135,90,120],[107,73,56],[95,107,87]])
 Wurstpreis_per_100_g = np.array([1.30,1.11,0.99])
 Preis_in_Cent = np.dot(Wurstmenge,Wurstpreis_per_100_g)
 Preis_in_Euro = Preis_in_Cent / np.array([100,100,100,100])
 print(Preis_in_Euro)
    

if __name__ == '__main__':
    main()     

      






/code]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@OSWALD: `Preis_in_Cent` hätte man auch einfach durch 100 teilen können:

Code: Alles auswählen

In [27]: Preis_in_Cent
Out[27]: array([254.8 , 394.2 , 275.57, 328.4 ])

In [28]: Preis_in_Cent / 100
Out[28]: array([2.548 , 3.942 , 2.7557, 3.284 ])
Und auch wenn `numpy.dot()` hier funktioniert, hätte ich das wahrscheinlich wegen dem Verständnis als Multiplikation und anschliessender Summe ausgedrückt:

Code: Alles auswählen

In [29]: Wurstmenge * Wurstpreis_per_100_g
Out[29]: 
array([[130.  ,  55.5 ,  69.3 ],
       [175.5 ,  99.9 , 118.8 ],
       [139.1 ,  81.03,  55.44],
       [123.5 , 118.77,  86.13]])

In [30]: (Wurstmenge * Wurstpreis_per_100_g).sum(axis=1)
Out[30]: array([254.8 , 394.2 , 275.57, 328.4 ])
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
OSWALD
User
Beiträge: 346
Registriert: Freitag 18. März 2022, 17:32

'Suchet, so werdet Ihr finden'
Hier im Forum habe ich gelesen, dass es Schwierigkeiten
bei NUMPY mit dem Lösen von linearen Gleichungen gibt.
Im neuesten Tutorial von NUMPY wird man fündig.
Hier zwei Beispiele, sogar mit ' Ergebniskontrolle '. Alles
mühelos aus dem Turorial entnommen. Man muss ja nicht jedes Mal
das Rad erfinden. Wäre selbst auch nicht dazu in der Lage.
D ie Bibliotheken sind ja dazu da, um das `'etzte' aus Python heraus zu holen.

Wer immer strebend sich bemüht, den können wir erlösen FII Goethe
Gute Zeit Oswald


Code: Alles auswählen



# creating the array "a"
A = np.array([[3, 4, 5], [1, 2, 3], [2, 4, 5]])
B = np.array([9, 8, 7])
print("Array A : \n", A)
print("Array B  : \n", B)

# Berechnung der Gleichng
ans = np.linalg.solve(A, B)

 
print("Ergebnisse der Gleichung :\n", ans)
###########
print(" Prüfung auf Richtigkeit")
print(np.allclose(np.dot(A, ans), B))
 

##################################  
 
 
A = np.array([[4, 4, 6], [1, 2, 3], [4, 5, 1]])
B = np.array([8, 7, 6])
print("Array A : \n", A)
print("Array B  : \n", B)

# Berechnung der Gleichng
ans = np.linalg.solve(A, B)

 
print("Ergebnisse der Gleichung :\n", ans)
###########
print(" Prüfung auf Richtigkeit")
print(np.allclose(np.dot(A, ans), B))
  
 


[


/code]
Antworten