Exponent in Dezimalzahl umwandeln;

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Guten Morgen :),

ich hab eine Frage, wie man ein Exponent in Dezimalzahl umwandelt?
Ich habe ein Code entwickelt, der zwei Decibelwerte addiert mit import math und math.log(10).
Jedoch wenn ich die beide addieren, kommt als Ergebnis ein Exponent raus, will es jedoch als Dezimalzahl ausgeben.

Hier ist der Code:

Code: Alles auswählen

import math

def addition(x, y):
    return math.log(10)*((10**x/10)+(10**y/10))

print("Willst du zwei Dezibelwerte addieren?")
print("Y oder N?")

choice=input()

num1=int(input("Gib den ersten Dezibelwert an:"))
num2=int(input("Gib den zweiten Dezibelwert an"))

if choice == 'Y':
    print(num1, "+", num2, "=",addition(num1,num2),"Decibel")
    

elif choice == 'N':
    print("Bis zum nächsten Mal! :)")

else:
    print("Ungültige Eingabe")    
Als Beispiel:

Gib den ersten Dezibelwert an: 50
Gib den zweiten Dezibelwert an: 50
50 + 50 = 4.6051701859880917e+49 Decibel
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@donutdrake: Du könntest das Ergebnis einfach in eine ganze Zahl umwandeln.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

Wenn du die korrekte Formel für die Addition verwenden würdest, hättest du das Problem überhaupt nicht. 50dB+50dB sind sicherlich nicht 4.6e49 dB.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@donutdrake: dass Du die falsche Formel benutzt, wurde doch schon in Deinem anderen Thread diskutiert.
Die Frage, die Du beantworten mußt, ist, was ist die inverse Operation zu 10**x?
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Sirius3 hat geschrieben: Montag 10. Dezember 2018, 11:55 @donutdrake: dass Du die falsche Formel benutzt, wurde doch schon in Deinem anderen Thread diskutiert.
Die Frage, die Du beantworten mußt, ist, was ist die inverse Operation zu 10**x?
Hab jetzt doch den Fehler erkannt, hab den falschen Formel verwendet...
Danke dir, jetzt kommt die als ganze Zahl raus.
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Um den Schallpegel zu berechnen lautet die Formel : L = 10 * log(10**0.1*L1+10**0.1*L2+...+10**0.1*LN)
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

donutdrake hat geschrieben: Montag 10. Dezember 2018, 12:36 Um den Schallpegel zu berechnen lautet die Formel : L = 10 * log(10**0.1*L1+10**0.1*L2+...+10**0.1*LN)
Da fehlen Klammern.
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Ich will ja den Zehnerlogarithmus berechnen und nicht den nätürlichen und kam auf das Ergebnis.

Code: Alles auswählen

 print("Das Ergebnis lautet: ", math.log10(10)*((10**0.1*num1)+(10**0.1*num2)) ,"Db")
 


Ich will nun die Gleichung nach zwei Kommastellen ausgeben, jedoch kommt es zur 'invalid syntax'

Code: Alles auswählen

 print("Das Ergebnis lautet: ", '%.2f',  math.log10(10)*((10**0.1*num1)+(10**0.1*num2)) ,"Db")
 
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann zerleg diesen Monsterausdruck (der auch noch andere Probleme hat) in kleinere Teile, die du verstehst.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@donutdrake: Die gezeigte `print()`-Zeile ist zwar nicht so wirklich sinnvoll, aber sie enthält keinen Syntaxfehler.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@donutdrake: Du hast immer noch eine falsche Formel. Wo hast Du denn die Definition von dB her?
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Sirius3 hat geschrieben: Montag 10. Dezember 2018, 14:45 @donutdrake: Du hast immer noch eine falsche Formel. Wo hast Du denn die Definition von dB her?
@Sirius3: Aus Yotube habe ich es. https://www.youtube.com/watch?v=Fq9t676G8KQ
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

Das hier ist die richtige Formel. Schau dir mal bitte die Unterschiede zu deiner an.

Code: Alles auswählen

def addition(x, y):
    return math.log10(10**(x/10)+10**(y/10))
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

ArtooDetoo hat geschrieben: Montag 10. Dezember 2018, 18:00 Das hier ist die richtige Formel. Schau dir mal bitte die Unterschiede zu deiner an.

Code: Alles auswählen

def addition(x, y):
    return math.log10(10**(x/10)+10**(y/10))
Problem ist, es gibt halt viele Wege um den Schallpegel zu addieren, der Dozent meinte selber es gibt halt viele Wege im Netz.
Jetzt werde ich von vielen Kommentaren verwirrt :lol:
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@donutdrake: wie meinst Du das? Es gibt viele falsche Wege und einen nicht ganz so falschen? Wenn das eine Physikvorlesung ist, sollte die Mathematik dahinter ja irgendwo erklärt worden sein.
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Dann habe ich auch eine andere Formel aus den ganzen Folien die ich bekommen habe.

LB= 10 * log *(I/I0) aus der Folie
oder auch Lp= 20 * log(p/p0) für den Schalldruck

Nein es ist keine Physikvorlesung, sondern Medieninformatik.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Und aus diesen Formeln mußt Du jetzt nur die Additionsregel herleiten. Dazu muß man wissen, dass sich der Schalldruck linear addiert, die Leistung dagegen Quadratisch, was die beiden Formeln mathematisch äquivalent macht.
Steht auch alles bei https://de.wikipedia.org/wiki/Bel_(Einheit).
donutdrake
User
Beiträge: 14
Registriert: Dienstag 20. November 2018, 07:54

Alles klar danke dir, sieht einfach aus.
Antworten