mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik rechnen mit potenz(Kommazahl)


Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,nachdem mir hier schon sehr gut bei einer anderen Rechnung 
geholfen wurde,habe ich ein neues Problem.
Die Formel lautet:
F= 13,233 * rf * ((10hoch (7,5 * T)/(237 + T)))/(237,16 + T)


Das problem ist folgendes.Bei T = 20 kommt 10 hoch 0,584 raus.
Wie rechne ich den Wert von 10 hoch 0,584 in assembler auf einem mega32
aus?Der Rest der Rechnung hab ich hinbekommen.
Wäre nett,wenn mir jemand das erklären könnte.

gruss
andy

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem verallgemeinerten Hornerschema zur Berechnung von Wurzeln kann 
man auch alle anderen Wurzeln bzw. Potenzen ausrechnen. Daraus ergibt 
siche eine Iteration.

Oder einen Logarithmus zur Basis 2 von 10 berechnen, diesen mit 0,584 
multiplizieren und 2 mit dem Ergebnis potenzieren.

Mit der Basis 2 sind log und Potenz erwas einfacher als mit anderen 
Basen.

Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die antwort.Aber könntest du das vielleicht etwas einfacher 
erklären oder ein Beispiel schreiben,wie das zum beispiel mit
10 hoch 0,584 geht.Ich muss das Prinzip verstehen,da sich T ständig 
ändert.

gruss
andy

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang meint, dass es einfacher ist mit der Basis 2 zu rechnen.

Logarithmus von 10 zur Basis 2: 3,321928095.
Multiplikation von 3,321928095 mit 0,584: 1,940006007.
Endergebnis 2 hoch 1,940006007: 3,837072454.

Warum dies leicher ist? Keine Ahnung.

Wie viele verschiedenen Werte nimmt denn dein T an? Wenn es wenige Werte 
sind: Tabelle. Wenn es viele Werte sind: Iteration nach Newton.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da man ggf. einen Algorithmus für log in Assembler schreiben muss, ist 
es einfacher diesen unter Berücksichtigung der Basis 2 zu schreiben.

W.

Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,danke für die antworten.T steht für gemessene Temperatur,also sehr 
viele unterschiedliche Werte.
Jetzt ist es schon etwas klarer.Aber wie rechne ich 2 hoch 1,94?
Wenn ich 1,94 mit 256 multipliziere bekomme im 496 raus.
2 hoch 496 ist aber ziemlich riesig.Oder gehe ich die Sache jetzt falsch 
an?

gruss

andy

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Möglichkeit wäre 2 hoch 1 x 2 hoch 1/2 x 2 hoch 1/4, ..., usw. zu 
rechnen und jedesmal zu prüfen, ob die Potenz berechnet werden muss und 
sie dann abziehen. Je nach gewünschter Genauigkeit

Die ersten 5 Potenzen von 1,94 sind 1, 1/2, 1/4, 1/8, 1/16.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Logarithmen und Potenzen in Assembler zu schreiben ist etwas länglich. 
Wenns läuft aber recht schnell. Dafür gibts aber auch 
Reihenentwicklungen nach Fourier.


Für 2^1,94 passt jetzt die Fourier-Reihe für 2^x. Die ist dann mit 
elementaren Rechenoperationen (+,-,*,/), die dir ja zur Verfügung 
stehen, auszurechnen.


W.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du schon abgeklärt, ob nicht eine Näherung eine ausreichende 
Genauigkeit bieten würde?

Diese Berechnungen in Assembler zu machen dürfte sich als ziemlich 
unangenehm herausstellen.

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn T die Temperatur ist, stimmt dann 237,16 oder meinst du 273,16.
Hat zwar nichts mit dem potenzieren zu tun ergibt aber trotzdem ein 
falsches Ergebnis.

Autor: Horst Hahn (horha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

andy schrieb:
> Die Formel lautet:
>
>
> F= 13,233 * rf * ((10hoch (7,5 * T)/(237 + T)))/(237,16 + T)
> 

Deine 237 sind der absolute Nullpunkt mit 273.16 ° Celsius.
Wo kommt denn diese Zahlenwertgleichung her?
Müsste es nicht eher:
10hoch ( (7,5 * T)/(273 + T) ) sein oder "beginnt" die Formel bei -40° 
Celsius?

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,

ich habe mich verschrieben.

Ich meine nicht Fourier-Reihe, sondern Taylor-Reihe

W.

Autor: Wolfgang Schmidt (wsm)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Taylorreihe vom Grad 5 für 2^x  habe ich mal angehängt.

für LN(2) kann man natürlich den entsprechenden Zahlenwert benutzen und 
alle auftretenden Potenzen vorher ausrechenen.

Jetzt müsste es auch in Assembler zu machen sein.

W.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal für deinen ganzen Term eine Reihenentwicklung erstellt.

F=rf·(3.006156242·t^5 + 0.8707963411·t^4 + 0.2017955946·t^3 + 
0.03507260965·t^2 + 0.004063808881·t + 0.0002354336441)

Dieser Term beinhaltet deine ganze Rechnung und läßt sich direkt 
elementar programmieren.


Der Term läßt sich noch einfacher schreiben:

F=rf·(((((3.006156242·t + 0.8707963411)·t + 0.2017955946)·t + 
0.03507260965)·t + 0.004063808881)·t + 0.0002354336441)

Somit fallen alle Potenzen weg und die Berechnungszeit ist wesentlich 
kürzer, da nur 6 Multiplikationen auftreten.

W.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In deiner Formel ist wohl doch ein Fehler drin:

Ich habe für die absolute Feuchte gefunden:
AF= 13.233 * rF * ((10 ^ ((7.5 * T) / (237 + T))) / (273.16 + T)) 

Was stimmt nun ?

Zur Kontrolle kann man unter:

http://www.ib-rauch.de/bautens/formel/abs_luftfeucht.html

nachrechnen.


W.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die letzte Formel

F=13.233·rf·(10^(7.5·t/(237 + t))/(273.16 + t))

ist wohl richtig.

Ich habe mal 2 Beispiele durchgerechnet.

Dafür erhält man die Taylorreihe

F=rf·(1.004745136·10^(-10)·t^5 + 1.763389900·10^(-8)·t^4 + 
1.729932431·10^(-6)·t^3 + 0.0001014403429·t^2 + 0.003352613162·t + 
0.04844413563)


W.

Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,da hab ich einen Fehler gemacht,es muss natürlich 273,16 heissen.
Danke für die antworten,ich werde es jetzt mal mit

F=rf·(((((3.006156242·t + 0.8707963411)·t + 0.2017955946)·t +
0.03507260965)·t + 0.004063808881)·t + 0.0002354336441)

versuchen.

gruss

andy

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm mal lieber die Parameter von Wolfgang Schmidt von 14:29.
Die sind mit den 273,16 berechnet. (In deiner zitierten Formel ist noch 
der Fehler drin)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.