emitterschaltung Berechnug Bitte um Hilfe

Code-Stücke können hier veröffentlicht werden.
Antworten
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Hallo zusammen,

ich bin noch blutiger anfänger in Python und versuche eine emitterschaltung zu berechnung zu schreiben so weit kommen auch die richtigen ergebnisse aber sie werden na dem komma abgeschitten welchen befehl muss ich ihm geben das er mir das nach dem komma gibt

Code: Alles auswählen

#hallo das ist ein Program um einen Emitterschaltung zu berechnen
print ("Das ist ein Programm zur Berechnung einer Emitterschaltung")
Ic= float (input ("wie groß ist Ic" ))
B = float (input (" wie groß ist B"))
Ube = float (input ("Wie groß ist Ube in V"))
Ub = float (input (" wie groß ist Ub in V"))

Uce = Ube/2
Ib = Ic/B
Iq = Ib*10
Rc = (Ube-Uce)/Ic
R1 = (Ub-Ube)/(Iq+Ib)
R2 = Ub/Iq
Rvw = (Ub-Ube)/Ib

print ("Deine werte Ib", Ib)
print ("Deine werte iq",Iq)
print ("Deine werte Rc", Rc)
print ("Deine werte R1", R1)
print ("Deine werte R2", R2)
print ("Deine werte Rvw", Rvw)
Ergebniss

>>>
Das ist ein Programm zur Berechnung einer Emitterschaltung
wie groß ist B220
Wie groß ist Ube in V12
wie groß ist Ub in V0.6
Deine werte Ib 0.00909090909090909
Deine werte iq 0.09090909090909091
Deine werte Rc 3.0
Deine werte R1 -114.0 #warum - ???
Deine werte R2 6.6
Deine werte Rvw -1254.0 #warum - ???
>>>
Zuletzt geändert von telegraph am Donnerstag 7. November 2013, 10:08, insgesamt 3-mal geändert.
BlackJack

Schauen wir uns mal die ganzen Zwischenergebnisse an die zum Beispiel zu `R1` führen:

Code: Alles auswählen

In [13]: R1
Out[13]: -114.0

In [14]: Ub
Out[14]: 0.6

In [15]: Ube
Out[15]: 12.0

In [16]: Iq
Out[16]: 0.09090909090909091

In [17]: Ib
Out[17]: 0.00909090909090909

In [18]: Ub-Ube
Out[18]: -11.4

In [19]: Iq+Ib
Out[19]: 0.1

In [20]: (Ub-Ube)/(Iq+Ib)
Out[20]: -114.0
Ich denke anhand der Zahlen wird nun klar wie das Ergebnis zustande kommt und wo der „überraschende” Teil liegt. Nämlich bei `Iq` wo die Ziffer 1 am Ende dafür sorgt, dass ``Iq + Ib`` nicht 0.0999999… ist, sondern 0.1. Die Erklärung ist der endliche Speicherplatz der für Gleitkommazahlen zur Verfügung steht. Wenn also irgendetwas mit einer Perdiode bei einer Division heraus kommt, wird das Ergebnis irgendwann nach einer gewissen Anzahl von Stellen abgeschnitten und das verfälscht dann natürlich Ergebnisse die mit so einem Zwischenergebnis weiterrechnen. Allgemein zum Thema Gleitkommazahlen im Rechner und der Frage „Why don’t my numbers add up?”: http://floating-point-gui.de/
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

soweit so gut

Code: Alles auswählen

    #hallo das ist ein Program um einen Emitterschaltung zu berechnen
print ("Das ist ein Programm zur Berechnung einer Emitterschaltung")
Ic= float (input ("wie groß ist Ic" ))
B = float (input (" wie groß ist B"))
Ube = float (input ("Wie groß ist Ube in V"))
Ub = float (input (" wie groß ist Ub in V"))
     
Uce = Ube/2
Ib = round (Ic/B , 5)
Iq = round (Ib*10 , 5)
Rc = round ((Ube-Uce)/Ic , 5)
R1 = round ((Ub-Ube)/(Iq+Ib) , 5)
R2 = round (Ub/Iq , 5)
Rvw = round ( (Ub-Ube)/Ib ,5)
     
print ("Deine werte Ib", Ib)
print ("Deine werte iq",Iq)
print ("Deine werte Rc", Rc)
print ("Deine werte R1", R1)
print ("Deine werte R2", R2)
print ("Deine werte Rvw", Rvw)
ergebniss

>>>
Das ist ein Programm zur Berechnung einer Emitterschaltung
wie groß ist Ic2
wie groß ist B220
Wie groß ist Ube in V12
wie groß ist Ub in V0.6
Deine werte Ib 0.00909
Deine werte iq 0.0909
Deine werte Rc 3.0
Deine werte R1 -114.0114
Deine werte R2 6.60066
Deine werte Rvw -1254.12541
>>>

nur wie kommt er ins -??? die werte sind jetzt alle richtig
Zuletzt geändert von Anonymous am Donnerstag 7. November 2013, 15:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

telegraph hat geschrieben:nur wie kommt er ins -??? die werte sind jetzt alle richtig
Weil bei deinen Eingaben Ube größer ist als Ub. Damit wird Ub-Ube negativ.
Das Leben ist wie ein Tennisball.
BlackJack

@telegraph: Das was EyDu geschrieben hat + das hättest Du doch ganz einfach selber heraus finden können. Es steht sogar in meinem letzten Beitrag.

Edit: Du solltest das übrigens mal per Hand nachrechnen. Für R1 wäre -114.0 nämlich richtig gewesen. Du hast das Ergebnis nun also verschlechtert statt verbessert. ;-)

Edit2: Und auch die beiden anderen Ergebnisse waren ursprünglich richtig, also 6.6 und -1254.0. :-D
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Danke ich habe es gesehen,

Code: Alles auswählen

print ("Das ist ein Programm zur Berechnung einer Emitterschaltung")
Ic= float (input ("wie groß ist Ic" ))
B = float (input ("wie groß ist B"))
Ube = float (input ("wie groß ist Ube in V"))
Ub = float (input ("wie groß ist Ub in V"))
     
Uce = round (Ube/2 , 5)
Ib = round (Ic/B , 5)
Iq = round (Ib*10 , 5)
Rc = round ((Ube-Uce)/Ic , 5)
R1 = round ((Ub-Ube)/(Iq+Ib) , 5)
R2 = round (Ub/Iq , 5)
Rvw = round ( (Ub-Ube)/Ib ,5)
     
print ("Deine werte Ib", Ib)
print ("Deine werte iq",Iq)
print ("Deine werte Rc", Rc)
print ("Deine werte R1", R1)
print ("Deine werte R2", R2)
print ("Deine werte Rvw", Rvw)
print ('Dein wert Uce', Uce)
ergebniss

>>>
Das ist ein Programm zur Berechnung einer Emitterschaltung
wie groß ist Ic2
wie groß ist B220
wie groß ist Ube in V0.6
wie groß ist Ub in V12
Deine werte Ib 0.00909
Deine werte iq 0.0909
Deine werte Rc 0.15
Deine werte R1 114.0114
Deine werte R2 132.0132
Deine werte Rvw 1254.12541
Dein wert Uce 0.3
>>>

ich musste 40 aufgaben mit dem taschen rechner rechnen und der will uns noch mehr geben :-o
da dachte ich schreib mal was zum rechnen
Zuletzt geändert von Anonymous am Donnerstag 7. November 2013, 16:05, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@telegraph: Könntest Du Deinen Quelltext demnächst bitte selbst hier im Forum in Python-Code-Tags setzen. Spätestens wenn Einrückung drin vorkommt muss man das machen, damit die in der Anzeige erhalten bleibt.

Und wie gesagt: Deine *ersten* Ergebnisse waren, bis auf die Sache mit dem Vorzeichen, *richtig* und *jetzt* sind sie *falsch*! Der grundsätzliche Rechenfehler kommt ja dadurch zustande, dass wenn der Speicher für eine Gleitkommazahl ausgeschöpft ist, eine Periode einfach abgeschnitten wird. Wenn Du das jetzt schon nach 5 Stellen und bei jedem Rechnenschritt machst, kann das Ergebnis doch nur noch ungenauer werden, weil Du potentiell jedes mal beim Runden Informationen verwirfst.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@telegraph: es ist normalerweise eine schlechte Idee, Zwischenergebnisse zu runden, weil mit jedem Zwischenschritt die Genauigkeit abnimmt, also weniger als die 5 beabsichtigten Nachkommastellen. Das nennt sich Fehlerfortpflanzung, falls Du unter Wikipedia nachlesen willst. Um gerundete Ergebnisse auszugeben bietet sich die Stringformatierung über

Code: Alles auswählen

print('Ib={:.5f}'.format(Ib))
an.
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

danke ich bin so froh das mir "geholfen" wurde und nicht um meine fehler um 07:00 geschipft wurde danke
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Code: Alles auswählen

print ("Das ist ein Programm zur Berechnung einer Emitterschaltung")
Ic= float (input ("wie groß ist Ic" ))
B = float (input ("wie groß ist B"))
Ube = float (input ("wie groß ist Ube in V"))
Ub = float (input ("wie groß ist Ub in V"))
         
Uce = round( Ub/2 , 22) 
Ib =  round (Ic/B ,22) 
Iq =  round (Ib*10, 22) 
Rc =  round ((Ub-Uce)/Ic , 22)
R1 =  round ((Ub-Ube)/(Iq+Ib) , 22) 
R2 = round (Ub/Iq , 22) 
Rvw =  round ((Ub-Ube)/Ib  , 22) 
         
print('Ib={:.5f}'.format(Ib))
print('Iq={:.5f}'.format(Iq))
print('Rc={:.5f}'.format(Rc))
print('R1={:.5f}'.format(R1))
print('R2={:.5f}'.format(R2))
print('Rvw={:.5f}'.format(Rvw))
print('Uce={:.5f}'.format(Uce))

print ("Deine werte iq",Iq)
print ("Deine werte Rc", Rc)
print ("Deine werte R1", R1)
print ("Deine werte R2", R2)
print ("Deine werte Rvw", Rvw)
print ('Dein wert Uce', Uce)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Jetzt musst du nur noch die ganzen unnötigen round-Anweisungen entfernen.
Das Leben ist wie ein Tennisball.
Antworten