Erst symbolisch partiell Ableiten, danach ausrechnen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
sncl_michi
User
Beiträge: 1
Registriert: Donnerstag 26. April 2018, 11:03

Hallo zusammen,

ich bin blutiger Anfänger was Python betrifft und bin bei meiner Aufgabe auf ein Problem gestoßen zu dem ich bisher keine Lösung gefunden habe obwohl es bestimmt sehr einfach ist.

Aufgabe: Ich möchte eine Messunsicherheitsanalyse nach GUM (Gaußsche Fehlerfortpflanzung) über Python machen. Symbolisch klappt das soweit auch gut, Bsp:

Code: Alles auswählen

from sympy import *
import numpy

#definition der standard Messunsicherheit u_i

ua = Symbol('ua')     		
ub = Symbol('ub')	    
uc = Symbol('uc')	  
ud = Symbol('ud')	    

# Definition des Eingangsschätzwertes des Unsicherheitsbeitrages (Mittelwert der Messgröße) m_i		
	
ma = Symbol('ma')       
mb = Symbol('mb')	 
mc = Symbol('mc')	  	
md = Symbol('md')	    


#Definition Funktionsbeschreibung

F = (ma**2 + mb**3 + mc**2 + md)

# Definition Sensitivitätskoeffizient c_i (partielle Ableitungen)

ca = diff(F, ma)
cb = diff(F, mb)
cc = diff(F, mc)
cd = diff(F, md)

# Kombierte Unsicherheit uc

uc = sqrt((ca**2*ua**2*ma) + (cb**2*ub**2*mb) + (cc**2*uc**2*mc) + (cd**2*ud**2*md))

Somit kann ich Symbolisch die partiellen Ableitungen berechnen und die kombinierte Unsicherheit berechenen und alles funktioniert wunderbar.
Nun möchte ich das ganze aber auch anschließend mit Zahlenwerten lösen. Das heist ich mache erstmal symbolisch die partiellen Ableitungen welche in ca, cb usw. "gespeichert" werden und möchte danach Werte "einsetzten" um die Zahelnwerte der Sensitivitätskoeffizienten und anschließend der kombinierten Unsicherheit zu ermitteln.

Gibt es also die Möglichkeit zuerst ca, cb, cc, cd symbolisch zu berechnen und danach werte für ua, ma usw. zu definieren und den tatsächlichen Zahlenwert von ca, cb usw. auszurechnen?

Vereinfachtes Beispiel wie ich mir das vorstelle:

Code: Alles auswählen

 ma = Symbol('ma')     
 F = (ma**2) 
 ca = diff(F, ma)  

#daraus folgt

ca = 2ma

#dann Werte definieren 
ma = 4

#dann ca ausrechnen 

ca = 2*ma = 2*4 = 8 # aber wie mache ich das?

Viele Grüße und danke
Michael
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@sncl_michi: dafür gibt es `lambdify`:

Code: Alles auswählen

func = lambdify((ua,ub), ua*ub)
print(func(7,3))
Antworten