Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| analogrechner:vektorlaenge [2018-01-31 15:59] – inverse methode nach vorne, als beste angesehen rainer | analogrechner:vektorlaenge [2021-12-11 14:01] (aktuell) – rainer | ||
|---|---|---|---|
| Zeile 106: | Zeile 106: | ||
| Wird anstelle der integrierten Schaltung eine Schaltung aus vorhandenen Elementen verwendet, so ergibt sich die Schaltung zu: | Wird anstelle der integrierten Schaltung eine Schaltung aus vorhandenen Elementen verwendet, so ergibt sich die Schaltung zu: | ||
| + | `v=x + y^2 / (v+x) | ||
| + | |||
| [svg: | [svg: | ||
| Zeile 111: | Zeile 113: | ||
| Wegen `v ge |x|` ist auch für `x<0` die Summe `v+x ge 0`, so dass hier | Wegen `v ge |x|` ist auch für `x<0` die Summe `v+x ge 0`, so dass hier | ||
| der Divisor nicht negativ ist. | der Divisor nicht negativ ist. | ||
| + | Auch hier kann allerdings `v+x > 1 ` werden, so dass -- nicht gezeigt -- skaliert werden muss. | ||
| Die in der vorigen und dem folgenden Schema gezeigten Addierer sind | Die in der vorigen und dem folgenden Schema gezeigten Addierer sind | ||
| **nicht** invertierend, | **nicht** invertierend, | ||
| - | Änderungen notwendig sind, da einige Dividierer | + | Änderungen notwendig sind, da einige Dividierer invertierte |
| Ergebnisse liefern, u.s.w. | Ergebnisse liefern, u.s.w. | ||
| Zeile 122: | Zeile 125: | ||
| Eine bessere Aussteuerung wird erreicht, wenn anstelle des Quadrierers | Eine bessere Aussteuerung wird erreicht, wenn anstelle des Quadrierers | ||
| ein Multplizierer verwendet wird und die Faktoren vertauscht werden: | ein Multplizierer verwendet wird und die Faktoren vertauscht werden: | ||
| + | |||
| + | `v=x + y * (y / (v+x)) | ||
| + | |||
| [svg: | [svg: | ||
| Zeile 148: | Zeile 154: | ||
| nicht ausreichend groß. | nicht ausreichend groß. | ||
| + | Polynom-Approximation | ||
| + | -------------------- | ||
| + | |||
| + | Wegen | ||
| + | `sqrt(x^2+y^2) >= max(x,y) | ||
| + | |||
| + | kann man auch durch einen linearen Ausdruck approxmieren: | ||
| + | `sqrt(x^2 + y^2) ~~ alpha x + beta y | ||
| + | | ||
| + | Hierbei ist für `x > y` der Koeffizient `alpha` ungefähr 1; | ||
| + | dies wird als "Alpha max plus beta min" Verfahren bezeichnet (siehe [https:// | ||
| + | |||
| + | Damit für `y=0` der Funktionswert nicht kleiner als `x` wird, ist `alpha = 1` vorzuziehen. | ||
| + | |||
| + | Dies entspricht einer Approximation | ||
| + | `sqrt(1+x^2) ~~ 1 + 0.38 x if |x| <= 1 | ||
| + | |||
| + | wobei der Wert 0.38 durch Probieren ermittelt wurde. Mit dem Faktor `sqrt(2)-1 ~~ 0.414` wird der Fehler am Bereichsende minimiert. | ||
| + | |||
| + | Besser ist freilich eine Taylorreihe (für `x<=1`) mit | ||
| + | |||
| + | `sqrt(1+x^2) ~~ 1 + 0.41*x^2 if |x| <= 1 | ||
| + | | ||
| + | benötigt aber einen Quadrierer (anstelle von dreien). | ||
| + | | ||
| + | Mit einem zusätzlichen Multiplizierer ist der Fehler unter 1%: | ||
| + | |||
| + | | ||
| + | |||
| + | Die Koeffizienten sind wieder empirisch ermittelt; gegebenenfalls können optimale Koeffizienten über eine | ||
| + | [https:// | ||
| - | \ASCIIMATHML ./ASCIIMathML.js | + | \ASCIIMATHML |
| </ | </ | ||
