Seite 30 von 36
Re: kleine Mathe-Spielereien
Verfasst: Dienstag 24. Dezember 2024, 15:41
von OSWALD
24.12.2024
Man kann hier beliebig viele Funktionen,
eintragen. Interessant.
'Echte Mathe-Spielerein
Schönes Fest OSWALD
Code: Alles auswählen
#gaussnormal F(x), f(x)
import numpy as np
from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(-3, 3,100)
###########
plt.plot(x, special.erf(x)) , plt.plot(x, special.erf(1/x)),plt.plot(x, special.erf(np.sin(x**2)))
##############
plt.xlabel('$x oder 1/x $')
plt.ylabel('$erf(x,1/x)$')
plt.title(" x und 1/x ")
plt.grid(True)
plt.show()
Re: kleine Mathe-Spielereien
Verfasst: Dienstag 24. Dezember 2024, 16:38
von OSWALD
2q4.12.2024
Mit sympy verläuft die -unbestimmte Integration problemlos.
ein Beispiel
OSWALD
Code: Alles auswählen
from sympy import *
x = symbols('x')
f= 1/2*x
print("f(x) =", f)
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print(log(x) )
f = 1+1/x
print("f(x) =", f)
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print(log(x) )
f= 3/x
print("f(x) =", f)
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print(log(x) )
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 25. Dezember 2024, 10:19
von OSWALD
25.12.2024
Mit sympy kann PYTHON 'fast' alles integrieren.
Nicht integrierbar sind z.B. viele Funktionen von
Gauß (s.Normalverteilung) und sicher ach andere Funktionen
Auch die Funktion 1/x ist eine 'besondere Funktion'.
Hier einige Beispiele mit 'exotischen' Funktionen',
wieder zu verstehen als "'kleine Mathe-Spielereien."
Gute Zeit OSWALD
Code: Alles auswählen
# "Exotische Funktionen" werden
# 1. integriert
# 2. abgeleitet
# "Exotische Funktionen" werden
# 1. integriert
# 2. abgeleitet
from sympy import *
import numpy as np
x = symbols('x')
f = 1/x
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
f= 3*np.e **cos(x**2) -( np.pi**(- 2*x) + np.pi + sin(x))
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
from sympy import *
import numpy as np
x = symbols('x')
f = 1/x
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
f= 3*np.e **cos(x**2) -( np.pi**(- 2*x) + np.pi + sin(x))
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 25. Dezember 2024, 10:51
von OSWALD
24.12.
Ich bitte umEndschuldigung.
Da ist technisch etwas schief gelaufen
OSWALD
Code: Alles auswählen
#
# "Exotische Funktionen" werden
# 1. integriert
# 2. abgeleitet
from sympy import *
import numpy as np
x = symbols('x')
f = 1/x
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
f= (x**2 + 3*np.sin(np.e**2) / (3*x + np.e**cos(np.pi)))
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
print()
f= 3*np.e **cos(x**2) -( np.pi**(- 2*x) + np.pi + sin(x))
print("Stammfunktion: F(x) =", integrate(f, x))
print("Ableitung: f'(x) =", diff(f, x))
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 26. Dezember 2024, 16:54
von OSWALD
26.12.2024
Die Implementierung der Bibliothek 'Plotly' kann für Python-Anwender
durchaus Schwierigkeiten machen .
Die mit pip empfohlenen Maßnahmen funktionieren bei mir nicht.
Anbei ein Code, mit dem es klappen müsste.
Viel Erfolg
Gute Zeit OSWALD
Code: Alles auswählen
# Zum Einstieg in PLotly diesen Code ausführen
import plotly.express as px
# Creating the Figure instance
fig = px.line(x=[1,2, 3], y=[1, 2, 3])
# printing the figure instance
print(fig)
#Jetzt steht PLOTLY offen für Python-Anwender
#gleich ein Beispiel
import plotly.express as px
# Data to be plotted
df = px.data.iris()
# Plotting the figure
fig = px.scatter_3d(df, x = 'sepal_width',
y = 'sepal_length',
z = 'petal_width',
color = 'species')
fig.show()
Re: kleine Mathe-Spielereien
Verfasst: Freitag 27. Dezember 2024, 16:01
von OSWALD
24.12.2024
Die OpenSource-API von Plotly ist frei zugänglich und äußerst umfangreich.
Die zahlreichen Finktionen, z.B imshow() , kompakt und mächtig.
Zusammen mit Python hervorragend geeignet speziell für Profis.
OSWALD
Code: Alles auswählen
import plotly.express as px
z = [[ .1 , .3 , .5 , .7 , .9 ],
[ 1 , .8 , .6 , .4 , .2 ],
[ .2 , 0 , .5 , .7 , .9 ],
[ .9 , .8 , .4 , .2 , 0 ],
[ .3 , .4 , .5 , .7 , 1 ]]
fig = px.imshow ( z , text_auto = True )
fig.show()
Re: kleine Mathe-Spielereien
Verfasst: Dienstag 31. Dezember 2024, 17:16
von OSWALD
31.12.2024
Das schwingende Pendel.
Bin gerade wieder einmal mit dem Thema odeint und DGL
beschäftigt. Dabei bin ich auch auf das Thema Pendel
gestossen. 2025 nähert sich unaufhaltsam.
Gutes 2025
OSWALD
Code: Alles auswählen
mport numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import scipy.integrate as integrate
#Schritt 2: Wir definieren die Parameter.
g = 9.81 # [m/s^2]
l = 0.5 # [m]
gamma = 0. # [1/s] damping coefficient
omega0 = np.sqrt(g/l)
#Schritt 3: Wir definieren die Anfangsbedingungen, d. h.
# Anfangswerte für Winkel thetaund Winkelgeschwindigkeit omega.
theta= 45 # [degree] # initial angle
theta = theta*np.pi/180
omega = 0 # initial angular velocity
#Schritt 4: Wir möchten uns ein Bild von der Zeitskala als Funktion des Anfangswinkels machen.
#Dazu berechnen wir die Schwingungsdauer Tperdurch Quadratur. #
#Mit diesem Wert legen wir dann die maximale Zeit Tmaxder Simulation als Vielfaches von fest Tper.
def f(x):
return 1/np.sqrt(np.cos(x)-np.cos(theta))
Tper = integrate.quad(f ,0,theta )
T0 = 2.0*np.sqrt(2.0)*Tper[0]/omega0
Tmax = 8*T0
print('Tmax=',Tmax)
#Schritt 5: Wir definieren grafische und Simulationsparameter.
xmax = 1.05*l
ymax = 1.05*l
Nstep= 3600 # number of time steps / number of frames
dt= Tmax/Nstep # time increment
d=0.05 # size of fixed support
#Schritt 6: Wir legen die Figur, die Achse und das Linienobjekt fest, das wir animieren möchten. Dieses Linienobjekt ist vorerst leer. #
#Wir zeichnen außerdem ein rechteckiges Objekt der Größe 2d x 2d, das am Ursprung zentriert ist.
fig = plt.figure()
ax = plt.axes(xlim=(-xmax, xmax), ylim=(-ymax, ymax))
line, = ax.plot([], [], 'o', ls='-', ms=8, markevery=[0,-1])
xR,yR = -d,-d # lower left corner of rectangle
dx,dy= 2*d, 2*d # dimensions of rectangle
rect = plt.Rectangle((xR,yR), dx,dy, facecolor= 'black', edgecolor= 'black')
ax.add_patch(rect)
plt.axis('off')
ax.set_aspect('equal')
#Schritt 7: Wir definieren eine Funktion, die die Bewegungsgleichungen modelliert
def F(X,t):
[theta, omega] = X
dthetadt = omega
domegadt = -g/l* np.sin(theta) - gamma *omega
return dthetadt, domegadt
#Schritt 8: Wir definieren eine Funktion, um die Initialisierung des Plots jedes Frames einzurichten.
def init():
line.set_data([], [])
return line,
#Schritt 9: Wir definieren die Animationsfunktion. Bei jedem Wert der Ganzzahl iberechnen wir die Pendelposition durch Integration der ODE von Zeit timeIn = i*dtzu Zeit timeOut= (i+1)*dt. Dazu rufen wir scipyden ODE-Integrator auf odeint. Sobald wir neue Werte der Variablen thetaund haben omega, können wir die neuen kartesischen Koordinaten des Pendels berechnen und das Linienobjekt aktualisieren.
def animate(i):
global theta, omega
timeIn= i*dt
timeOut= (i+1)*dt
Xinit = [theta, omega]
odeout = integrate.odeint(F, Xinit, [timeIn, timeOut])[1]
theta = odeout[0]
omega = odeout[1]
theta = (theta + np.pi) % (2*np.pi) - np.pi # bring theta back to [-pi, pi]
x,y = l*np.sin(theta), -l*np.cos(theta)
line.set_data([0, x], [0,y]) # modify the pendulum's position
return line,
#Schritt 10: Wir können nun den Animator mit der blitauf gesetzten Variable aufrufen True. Dadurch wird das animObjekt berechnet. Anschließend speichern wir das Video in einer MP4-Datei. Dieses Video können wir in unserem Browser ansehen.
anim = animation.FuncAnimation(fig, animate, init_func=init,frames=Nstep, interval=20, blit=True)
plt.show()
Re: kleine Mathe-Spielereien
Verfasst: Freitag 3. Januar 2025, 11:28
von OSWALD
3.1.2025
Großartiges Python
und ich freue mich, dass ich den Code
inzwischen weitgehend nachvollziehen kann.
Gute Zeit OSWALD
Code: Alles auswählen
Projektilbewegung
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
#Schritt 2: Wir definieren die notwendigen Parameter, wie
#Wir erhöhen die Zeit mit einer Schrittweite dtentsprechend Nstep.
#Nstepdefiniert auch die Anzahl der Frames der Animation.
v0 = 50 # [m/s]
g = 9.81 # [m/s^2]
alpha= 50 # [deg]
D= 220 # [m]
d= 10 # [m]
alpha = alpha*np.pi/180 # Winkel
Tmax = D/(v0*np.cos(alpha)) # Dauer Flugbahn
xmax = D+2*d # 2d
ymax = 0.55*(v0*np.sin(alpha))**2 /g
Nstep= 400 # Anzahl Zeitschritte /number of frames
dt= Tmax/Nstep
h= D*np.tan(alpha)-0.5*g*(D/v0/np.cos(alpha))**2 # height of rectangular object
#Schritt 3: Wir richten die Figur, die Achse und das zu animierende Plot-Element ein.
#Dieses Element ist ein leeres Linienobjekt mit den gewünschten Attributen
#Das Linienobjekt wird während der Simulation zu einem späteren Zeitpunkt aktualisiert (Schritt 6).
#Wir fügen dem Plot auch das statische rechteckige Objekt hinzu.
fig = plt.figure()
ax = plt.axes(xlim=(0, xmax), ylim=(0, ymax))
plt.xlabel('x(m): horizontal distance')
plt.ylabel('y(m): height')
line, = ax.plot([], [], 'o', ls='--', ms=8, markevery=[0,-1])
xR,yR = D-d,0. # lower left corner of rectangle
dx,dy= 2*d, h # dimensions of rectangle
rect = plt.Rectangle((xR,yR), dx,dy, facecolor= 'red', edgecolor= 'red')
ax.add_patch(rect)
#Schritt 4: Wir definieren eine Initialisierungsfunktion, um den Hintergrund jedes Frames zu plotten.
#Diese Funktion setzt das Linienobjekt mit leeren Daten. #
#Durch die Rückgabe des Linienobjekts weiß der Animator nun,
#welches Plotobjekt während der Animation aktualisiert werden muss.
def init():
line.set_data([], [])
return line,
#Schritt 5: Wir definieren die Animationsfunktion, die das Linienobjekt mit der Zeit aktualisiert.
#Sie hat ein einziges Argument: die Ganzzahl i, die die Frame-Nummer definiert.
#Die Zeit wird anhand dieser Ganzzahl definiert i, gemäß einer bestimmten Skala.
#bIn unserem Fall wird das Linienobjekt durch 2 Arrays definiert
#und parametrisiert mit der Zeit gemäß den Gleichungen (1-2)
# Diese Funktion wird vom Animator sequenziell aufgerufen.
def animate(i):
t = np.linspace(0, i*dt, 2*i)
x = v0*np.cos(alpha)*t
y = v0*np.sin(alpha)*t -0.5*g*t**2
line.set_data(x, y)
return line,
#Schritt 6: Jetzt rufen wir den Animator auf FuncAnimation.
#Das resultierende Objekt muss einer Variablen zugewiesen werden, hier anim.
#Wir definieren die Animation durch die Anzahl der Frames Nstep #mit einer Verzögerung von 20 ms zwischen den Frames. Das blitSchlüsselwort ist wichtig: Es weist den Animator an, nur die Teile der Handlung neu zu zeichnen, die sich geändert haben. Durch die Einstellung blit=Truewerden die Animationen viel schneller angezeigt und die resultierende Videodatei wird kleiner. Der optionale saveBefehl speichert die Daten in einer MP4-Videodatei. Der showBefehl zeigt das Endergebnis an.
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=Nstep, interval=20, blit=True)
plt.grid()
plt.title("Bahn des Projektils zum Zielbereich")
plt.show()
Re: kleine Mathe-Spielereien
Verfasst: Sonntag 5. Januar 2025, 17:30
von OSWALD
5.1.2025
Als Anfänger entdecke ich im unergründlichen Orkus von Python
jeden Tag b etwas Neues und erkenne, dass Datum und generell Zeit
wichtige Themen sind, auch schwierig und deshalb umgeht man
sie gerne. Irgendwann aber kommt man daran nicht mehr vorbei.
Hier nun ein Vergleich zwischen beiden Formaten.
Kann man das Format --datetime- in der deutschen Version darstellen
wie oben geteigt ??
Gute Zeit OSWALD
Code: Alles auswählen
print("Das aktuelle Datum ")
import time
print(time.strftime("%d.%m.%Y %H:%M:%S")) ##### tt,mm,jj,sec
now = time.localtime() ##### tt,m,JJ
print( now.tm_mday,".",now.tm_mon,".", now.tm_year )
import datetime
from datetime import timedelta
now = datetime.datetime.now()
now
print("Ausgangsdatum, also heute: " ,now)
print()
print("Nach 7 Tagen:",now + timedelta(days=7))
print(now + timedelta(days=7))
print()
print("Vor 12 Tagen:",now - timedelta(days=12))
print(now - timedelta(days=12))
print()
print("Vor 712 Tagen:",now - timedelta(days=12))
print(now - timedelta(days= 712))
Re: kleine Mathe-Spielereien
Verfasst: Montag 6. Januar 2025, 17:27
von OSWALD
6.1.2025
Hiermit ist die Umwandlung von US-Format auf Dt.Format gelungen.
bei -- Datetimed.delta -- geht das offenbar nicht
Bei - time - finde ich kein 'Differenz-Modul ' oder Ähnliches
Gute Zeit OSWALD
Code: Alles auswählen
import datetime
Zeit = datetime.datetime.now()
print(Zeit)
Datum = Zeit.strftime('%d.%m.%Y') # US Format
print(Datum)
Uhrzeit = Zeit.strftime('%H:%M:%S') # Dt.Format
print(Uhrzeit)
Genau = Zeit.strftime('%d:%m.%Y:%H:%M:%S') #Dt.Format
print(Genau)
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 8. Januar 2025, 16:27
von OSWALD
8.1.2025
Manche Darstellungen im WEB zum Thema 'Datetime'
tragen eher zur Verwirrung aks zur Aufklärung bei.
Optimal finde ich Python Tutorial zum Thema.
Daraus eine erste Einführung daraus, die ich sehr klar finde.
Code: Alles auswählen
print("Das heutige Datum - zunächst US-Format")
from datetime import date
today = date.today()
print(today)
print()
print("Nach Konvertierung in EU/Dt - Format ")
print(" 1. Tag Monat Jahr")
d1 = today.strftime("%d/%m/%Y")
print("d1 zeigt =", d1)
print()
print(" 2. Monat Tag Jahr")
# Textual month, day and year
d2 = today.strftime("%B %d, %Y")
print("d2 =", d2)
print()
print(" 3. Monat Tag Jahr")
d3 = today.strftime("%m/%d/%y")
print("d3 =", d3)
print()
print("(abgekürzt) 4. Monat Tag Jahr")
# Month abbreviation, day and year
d4 = today.strftime("%b-%d-%Y")
print("d4 =", d4)
]
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 8. Januar 2025, 16:36
von OSWALD
8.1.2025
die folgende Tabelle ist beim Arbeiten
mit Datetime sehr hilfreich.
Gute Zeit OSWALD
Code: Alles auswählen
Folgende Tabelle enthält sind alle Formatcodes aufgeführt, die man verwenden kann.
Richtlinie Bedeutung Beispiel
%a Abgekürzter Wochentagsname. So, Mo, ...
%A Vollständiger Wochentagsname. Sonntag, Montag, ...
%w Wochentag als Dezimalzahl. 0, 1, ..., 6
%d Tag des Monats als mit Nullen aufgefüllte Dezimalzahl. 01, 02, ..., 31
%-d Tag des Monats als Dezimalzahl. 1, 2, ..., 30
%b Abgekürzter Monatsname. Jan., Feb., ..., Dez.
%B Vollständiger Monatsname. Januar, Februar, ...
%m Monat als mit Nullen aufgefüllte Dezimalzahl. 01, 02, ..., 12
%-m Monat als Dezimalzahl. 1, 2, ..., 12
%y Jahr ohne Jahrhundert als mit Nullen aufgefüllte Dezimalzahl. 00, 01, ..., 99
%-y Jahr ohne Jahrhundert als Dezimalzahl. 0, 1, ..., 99
%Y Jahr mit Jahrhundert als Dezimalzahl. 2013, 2019 usw.
%H Stunde (24-Stunden-Uhr) als mit Nullen aufgefüllte Dezimalzahl. 00, 01, ..., 23
%-H Stunde (24-Stunden-Uhr) als Dezimalzahl. 0, 1, ..., 23
%I Stunde (12-Stunden-Uhr) als mit Nullen aufgefüllte Dezimalzahl. 01, 02, ..., 12
%-I Stunde (12-Stunden-Uhr) als Dezimalzahl. 1, 2, ... 12
%p Ortsangabe: AM oder PM. Vormittags, nachmittags
%M Minute als mit Nullen aufgefüllte Dezimalzahl. 00, 01, ..., 59
%-M Minute als Dezimalzahl. 0, 1, ..., 59
%S Sekunde als mit Nullen aufgefüllte Dezimalzahl. 00, 01, ..., 59
%-S Sekunde als Dezimalzahl. 0, 1, ..., 59
%f Mikrosekunde als Dezimalzahl, links mit Nullen aufgefüllt. 000000 - 999999
%z UTC-Offset im Format +HHMM oder -HHMM.
%Z Name der Zeitzone.
%j Tag des Jahres als mit Nullen aufgefüllte Dezimalzahl. 001, 002, ..., 366
%-j Tag des Jahres als Dezimalzahl. 1, 2, ..., 366
%U Wochennummer des Jahres (Sonntag als erster Tag der Woche). Alle Tage im neuen Jahr vor dem ersten Sonntag werden als Woche 0 betrachtet. 00, 01, ..., 53
%W Wochennummer des Jahres (Montag als erster Tag der Woche). Alle Tage im neuen Jahr vor dem ersten Montag werden als Woche 0 betrachtet. 00, 01, ..., 53
%c Entsprechende Datums- und Zeitdarstellung des Gebietsschemas. Montag, 30. September 2013, 07:06:05 Uhr
%x Entsprechende Datumsdarstellung des Gebietsschemas. 30.09.13
%X Entsprechende Zeitdarstellung des Gebietsschemas. 07:06:05
%% Ein wörtliches „%“-Zeichen. % usw.
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 9. Januar 2025, 10:23
von OSWALD
9.1.2025
Recht praktisch für Programmierer ist dieses
kleine Tool .
GutenZeit OSWALD
Code: Alles auswählen
import datetime
current_date = datetime.datetime.now()
current_day = current_date.strftime("%A")
print("Today is", current_day)
current_date = datetime.datetime.now()
current_day = current_date.strftime("%Y")
print("Today is", current_day)
current_date = datetime.datetime.now()
current_day = current_date.strftime("%d.%m.%Y")
print("Today is", current_day)
current_date = datetime.datetime.now()
current_day = current_date.strftime("%H.%Y")
print("Today is", current_day)
Re: kleine Mathe-Spielereien
Verfasst: Freitag 10. Januar 2025, 17:48
von OSWALD
100.1.2025
Wer als Anfänger versucht , in das Thema Textanalyse einzusteigen,
wird in der Regel ganz schnell auf große Schwierigkeiten stossen.
Das Angebot an Textanalysen imm Netz ist riesig und meist im KI-Bereikch angesiedelt.
Ich habe aber ein Programm gesucht, das ich verstehen und nachvollzihen kann.
Hier ist es.
Ein einfaches Orogramm, das alle Wörter eines Textes zeigt und zählt.
Die notwendige Textdatei.py muss im gleichen Ordner sein.
Gute Zeit OSWALD
Code: Alles auswählen
A.#Programm sucht und findet Wörter und zählt diese
#Die ausgewählte - datei.py - muss im gleichen Ordner oder per Pfad erreichbar sein.
# z.B. den oben gezeigten Text Schiller.py eingeben
def suchen_finden():
"""words_suchen_finden() - zählt alle Wörter."""
file_name = input("Namen der Datei eingeben: ")
# Datei öffnen und in Liste speichern
with open(file_name, "r") as f:
word_list = f.read().split()
# Anzeige des Inhaltes der Python-Datei
suchen_finden_dict = {}
for word in word_list:
# Vorkommen auszählen
suchen_finden_dict[word] = suchen_finden_dict.get(word, 0) + 1
# Ergebnisse
print(
f"File {file_name} has {len(word_list)} words, "
f"{len(suchen_finden_dict)} are unique:"
)
print(suchen_finden_dict)
if __name__ == "__main__":
suchen_finden()
Re: kleine Mathe-Spielereien
Verfasst: Freitag 10. Januar 2025, 17:56
von OSWALD
10.1.2025
hier die Textdatei, von mir Schiller.py genannt
Code: Alles auswählen
Programm zählt alle Wörter
Friedrich Schiller: Der Handschuh
Vor seinem Löwengarten
Das Kampfspiel zu erwarten
Saß König Franz
Und um ihn die Großen der Krone
Und rings auf hohem Balkone
Die Damen in schönem Kranz
Und wie er winkt mit dem Finger
Auftut sich der weite Zwinger
Und hinein mit bedächtigem Schritt
Ein Löwe tritt
Und sieht sich stumm
Rings um
Mit langem Gähnen,
Und schüttelt die Mähnen
Und streckt die Glieder
Und legt sich nieder.
Re: kleine Mathe-Spielereien
Verfasst: Samstag 18. Januar 2025, 11:54
von OSWALD
18.1.2025
Simulationen und KI
Was bedeutet Simulation? Eine Simulation ist ein Modell,
das die Funktionsweise eines bestehenden oder geplanten Systems nachahmt,
verschiedene Szenarien oder Prozessänderungen testet und damit
Entscheidungsgrundlagen liefern kann
Auch in der KI wird die Datensimulation eingesetzt.
Simulationsdaten werden aus früheren Simulationen abgerufen
und basierend auf dem Untersuchungsbereich ins KI-System eingespeist.n grundlegendes Beispiel
Wenn die KI z.B. über integrierte Schaltkreise lernt,
könnte der Benutzer die Leistungsergebnisse von Leiterplatten in die Software laden.
Sinnvoll genutzt können Simulationen sehr viel Energie auch bei iKI sparen.
Simulation ist also immer noch ein wichtiges Thema in Python.
Hier ein erstes Beispiel
Gute Zeit OSWALD
Code: Alles auswählen
Simulation einer Integration
# am Beispiel von sin(x)
# Ergebnis Genauigkeit
import scipy
import random
import numpy as np
# Grenze der Integration
a = 0
b = np.pi # Grenzen 0 bis = Pi
#Einzelschritte
N = 1000 # mit unterschiedlichem N Ergebnis vergleichen
# array of zeros of length N
ar = np.zeros(N)
# Iteration über N #Grenzen a un b
for i in range (len(ar)):
ar[i] = random.uniform(a,b)
# variable to store sum of the functions of
# different values of x
integral = 0.0
# function to calculate the sin of a particular
# value of x
def f(x):
return np.sin(x)
# iterates and sums up values of different functions
# of x
for i in ar:
integral += f(i)
# we get the answer by the formula derived adobe
ans = (b-a)/float(N)*integral
# prints the solution
print ("Wert mit Simulation berechnet : {}." .format(ans))
print ("mit Integration : ", 2.000000000)
print("Genauigkeit steigt mit N")
Re: kleine Mathe-Spielereien
Verfasst: Samstag 18. Januar 2025, 15:30
von OSWALD
18.12025
Hier noch ein weiteres einfaches Beispiel, mit dem das
Prinzip der Simulation demonstriert werden kann.
Simulation ist jedoch wesentlich komplizierter
und außerordentlich vielfältig.
In diese Materie versuche ich mich jetzt
- weit unterhalb der KI-Ebene -
einzuarbeiten. Mal sehen,
Gute Zeit OSWALD
Code: Alles auswählen
# Monte-Carlo-Simulationen (aus der Stochastik )
# Das Roulette Rad hat
# 18 rote,
# 18 schwarze Fächer
# 1 grünes Fach,
# also insgesamt 37 Fächer
# Wenn wir beim Roulette immer Black wählen, wie oft würden wir gewinnen?“
import random
def play_roulette():
total_slots = 37
red_probability = (18 / total_slots) * 100
black_probability = (18 / total_slots) * 100
green_probability = (1 / total_slots) * 100
possible_outcomes = ["red", "black", "green"]
probabilities = [red_probability, black_probability, green_probability]
outcome = random.choices(
possible_outcomes,
weights=probabilities,
k=1
)[0]
return outcome
#HIer begInnt die Simulation
def perform_simulation(n_times=1, choice="black"):
results = { "red": 0, "black": 0, "green": 0 }
for i in range(n_times):
outcome = play_roulette()
results[outcome] += 1
win_percentage = results[choice] / n_times
return results, win_percentage
if __name__ == "__main__":
results, win_percentage = perform_simulation(n_times=1000, choice="black")
print(results)
print(" In Prozent :",win_percentage)
Re: kleine Mathe-Spielereien
Verfasst: Sonntag 19. Januar 2025, 15:32
von OSWALD
19...1.2025
Meine Suche im Net nach 'Tools für Simulationen'
ergab eine Fülle von hochprofessionellen
Angeboten für Industrie, Handel und Forschung.
Gleichzeitig fand ich unter Python
auch einen Hinweis auf die
Anwendung von Differenzialgleichungen
für die Durchführung von Simulationen.
Mit Sicherheit spielen DGL auch im Proflbereich eine Rolle.
Hier stelle ich eine DGL aus meinem Archiv vor.
Die dreivorhandenen Abhängigkeiten (Funktionen) können
ohne weiteres auf andere Objekte übertragen werden.
Ich habe nochweitere DGLs untersucht und für geeignet
gefunden,
Gute Zeit OSWALD
Code: Alles auswählen
# SIMULATION mit DGL als 'Tool'
import numpy as np
from scipy.integrate import odeint
#Patienten,Infektionen, Geheilte
import matplotlib.pyplot as plt
#Die Anfangsbedingungen werden zuerst gesetzt:
S0, I0, R0 = 500,1, 1
#und ebenso die Modellparameter alpha und beta:
alpha, beta = 0.001, 0.01
#Die rechten Seiten der Differentialgleichungen
# werden als eine vektor-wertige Funktion geschrieben:
def deriv(u, t, alpha, beta):
S, I, R = u
dSdt = -alpha * S * I
dIdt = alpha * S * I - beta * I
dRdt = beta * I
return dSdt, dIdt, dRdt
#dann setzen wir auch die Anfangsbedingungen als Vektor der Werte S0, I0 und R0:
y0 = S0, I0, R0
#wir möchten die Lösung zu diskreten Zeitschritten bestimmen und
#legen dafür ein Zeitintervall und Zeitschritte fest:
T = np.linspace(0, 100, 200)
#Anschließend lösen wir das S-I-R Modells zu den diskreten Zeitpunkten:
ret = odeint(deriv, y0, T, args=(alpha, beta))
S, I, R = ret.T
# Jetzt wird die Anzahl für jeden Zeitpunkt bestimmt
##Mit Hilfe der matplotlib Erweiterung können wir das Ergebnis visualisieren:
plots = plt.plot(T, S, 'b', alpha=0.5, lw=2, label='Probanden') \
+ plt.plot(T, I, 'r', alpha=0.5, lw=2, label='infiziert') \
+ plt.plot(T, R, 'g', alpha=0.5, lw=2, label='geheilt,immun')
plt.xlabel('Zeit [Tage]')
plt.ylabel('Probanten')
plt.legend(handles=plots)
plt.grid()
plt.title("Ist DGL als 'Tool für Simulation' geeignet ? JA")
plt.show()
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 23. Januar 2025, 15:57
von OSWALD
23.1.2025
Für Ballistik-Simulationen sind DGLs hochaktuell und
hervorragend geeignet.
Gute Zeit OSWALD
Code: Alles auswählen
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
# das Differentialgleichungssystem mit dem Vektor U=(u1, u2)
# die Funktion gibt einen Vektor mit den Ableitungen zurück.
def DGLSystem(U, y):
u1, u2 = U
mu = 5.0
dpdx = -200.0
du1dy = u2
du2dy = dpdx / mu
return [du1dy, du2dy]
# Randwerte (gegeben)
u1_0 = 0.0
u1_H = 0.0
H = 0.1
# Randwert (geschätzt)
u2_0 = 2.0
# diskrete y-Werte (hier 50 über die Spalthöhe)
yi = np.linspace(0, H, num=50)
# Lösen des DGL-Systems mit scipy odeint
U = odeint(DGLSystem, [u1_0, u2_0], yi)
# Verlauf von u_1 darstellen
plt.figure(figsize=(6, 8))
plt.plot(U[:,0], yi)
plt.plot([u1_H], [H], 'ro')
plt.xlabel('$u_1$')
plt.ylabel('$y$')
plt.grid()
plt.title("Roter Punkt == Zielpunkt")
plt.show();
#Die Schätzung des Randwerts $u_2(0)$ lässt sich natürlich auch automatisieren.
#Eine sehr einfache Möglichkeit ist die Anpassung des Randwertes in Abhängigkeit
#von der berechneten Abweichung:
# Vorgegebene Toleranz
tol = 0.0001
faktor = 1.0
iterationen = 0
# Randwerte (gegeben)
u1_0 = 0.0
u1_H = 0.0
H = 0.1
# Randwert probieren: 1 , 2 oder 3
u2_0 = 3
# Lösen des gewöhnlichen DGL-Systems
# mit (SciPy odeint
fehler = 2 * tol
plt.figure(figsize=(6, 8))
while abs(fehler) > tol and iterationen < 100:
U = odeint(DGLSystem, [u1_0, u2_0], yi)
plt.plot(U[:,0], yi)
fehler = (u1_H - U[-1,0])
print(fehler)
u2_0 = u2_0 + fehler * faktor
iterationen += 1
print ("Bis zum Ziel wurden ", iterationen, " Iterationen benötigt.")
plt.title("Erste Annäherung an das Ziel")
# Verlauf von u_1 darstellen
plt.plot(U[:,0], yi)
plt.plot([u1_H], [H], 'ro')
plt.xlabel('$u_1$')
plt.ylabel('$y$')
plt.grid()
plt.title("Der rote Punkt ist das Ziel")
plt.show()
Re: kleine Mathe-Spielereien
Verfasst: Freitag 24. Januar 2025, 16:28
von OSWALD
24.1.2025
Und zum guten Schluss mit dem Thema Simulation
noch quasi ein 'Klassiker' aus der Mechanik,der sich mit
zahlreichen Paramtern beliebig weiter ausbauen lässt.
Gute Zeit OSWALD
Code: Alles auswählen
# Simulation Freier Fall
g = 9.81 # m/s² (Fallbeschleunigung Erde)
## Anfangsbedingungen:
s_0 = 200 # m (Anfangshöhe)
print("Fallhöhe in Meter :",s_0)
v_0 = 0 # m/s (Anfangsgeschwindigkeit)
## Genauigkeit:
dt = 0.1 # s (Zeitschritt)
## Simulation:
a = -g
s = s_0
v = v_0
t = 0
while s > 0:
s += v * dt # neues s aus dem alten Wert von v berechnen
v += a * dt # neues v aus dem alten Wert von a berechnen
t += dt
## Textausgabe:
print("Falldauer: ", round(t,1), " s")
print("Endgeschwindigkeit: ", round(v,), "m/s")
## Simulation:
list_t = []
list_s = []
a = -g
s = s_0
v = v_0
t = 0
while s > 0:
list_t.append(t)
list_s.append(s)
s += v * dt
v += a * dt
t += dt
## Diagramm:
import matplotlib.pyplot as plt
plt.plot(list_t, list_s, 'b.')
plt.ylabel('Höhe (m)')
plt.xlabel('Zeit (s)')
plt.title('Simulation: Freier Fall aus '+str(s_0)+'m')
plt.grid()
plt.show()