www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik funktionsberechnung 3. ordnung???


Autor: schlunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten moin,

habe nicht viel ahnung vom programmieren, deshalb folgendes problem:
ich nehme über einen ad-wandler einen wert x auf. (das klappt) nun
möchte ich damit ein wenig rechnen.
und zwar:

der wert von x soll in der formel (siehe unten) eingesetzt werden.
diese funktion soll in der endlosscheleife solange mit sich selbst
addiert werden, bis der wert von y > 1 ist. wie kann ich das am besten
realisieren? besonders die potenzen von x machen mir zu schaffen.
meine paar code-fragmente sehen so aus:
x ist global definiert. in x steht immer der aktuell gemessene wert.

main()
{
double y=0;
for(;;)
  {
  y += 3E-09*(x*x*x) - 2E-03*(x*x) + 4E-04*(x) + 1E-07;
  if (y>1){...}
  }
}

kann das so funktionieren?
brauch ich ne neue header-datei?
gibt es evtl. ne stilistisch schönere variante?  :-)

besten dank schon einmal im voraus

Autor: chriss chd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welchen µC verwendest du den? bei einem 8bitter wirds mit double lustig
;)

Autor: schlunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne ist nen 16bittiger von freescale

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also x*x kanst du doch shconmal rausziehn udn brauchst das nur einmal zu
berechnen:
for(;;)
  {
  z = x*x
  y += 3E-09*(z*x) - 2E-03*(z) + 4E-04*(x) + 1E-07;
  if (y>1){...}
  }
}

wenn sich x innerhalb der For Schleife nie ändert kannst du das sogar
komplett VOR die schleife ziehen, und nur immer eine konstante auf y
addieren.

Autor: schlunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jau stimmt. ist wohl wirklich einfacher, das x rauszuholen.
danke schön :-)
aber, wenn noch wer eine gute idee hat... immer her damit!!!

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch egal, schreib die Fnnktion in C und gut is. Die Berechnung
dauert bei Double zwar lange aber wenn Zeit kein Problem darstellt, ist
doch alles bestens.

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
y=0;

while (y<=1)
  y += 3E-09*(z*x) - 2E-03*(z) + 4E-04*(x) + 1E-07;

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann auch bestimmt noch ausklammern/Vereinfachen... aber das sit
eher ein Fall für die MAthematisch bewanderten Tüftler :)

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausklammerungen

y += 3E-09*(x*x*x) - 2E-03*(x*x) + 4E-04*(x) + 1E-07;
Das Orginal enthält 6 Multiplikationen

  z = x*x
  y += 3E-09*(z*x) - 2E-03*(z) + 4E-04*(x) + 1E-07;
Die verbesserte Variante 5 Multiplikationen:

Notwendig sind aber nur 3 Multiplikationen:
y += ((3E-09*x) - 2E-03)*x + 4E-04)*x + 1E-07;

Man muß die Berechnung doch nicht unnötig kompliziert machen ;-)

Ansonsten gilt die erste Regel der Optimierung:
 * es wird nicht optimiert

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ansonsten gilt die erste Regel der Optimierung:
> * es wird nicht optimiert

Dann gibts noch:

* Optimierungen, die man durch stundenlanges Finetuning einbaut,
  haben keinen nennenswerten Effekt außer einer Verschlechterung
  der Lesbarkeit.

* Dinge, die man nicht für optimierenswert hält, enthalten
  meist gewaltiges Optimierungspotenzial.

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deshalb noch eine Optimierungsregel:
  * ohne Performance-Messung wird nicht optimiert

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.