analogrechner:vektorlaenge
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
analogrechner:vektorlaenge [2017-03-17 15:54] – rainer | analogrechner:vektorlaenge [2021-12-11 14:01] (aktuell) – rainer | ||
---|---|---|---|
Zeile 38: | Zeile 38: | ||
Dies kann jedoch leicht zu Instabilitäten führen. | Dies kann jedoch leicht zu Instabilitäten führen. | ||
- | Alternative Quadratsumme | + | Zudem werden drei multiplikative Elemente verwendet, die meist knapp sind. |
- | -------------------- | + | |
- | Wegen | ||
- | `x^2+y^2 = (x+y)^2 - 2 x y | ||
- | kann man die Quadratsumme auch mit einem zusätzlichen Addierer, | + | Inverse Methode |
- | einem Quadrierer und einem Multiplizierer | + | --------------- |
- | und hat dabei größere Zwischenwerte, | + | |
- | da man, mit `x=y=0.1`, | + | Verwendet wird die dritte Binomische Formel: |
- | anstelle der Addition | + | `v^2 - x^2 = (v+x)*(v-x) = y^2 |
- | Dieser Vorteil ist aber für einen weiteren Addierer | + | |
- | nicht ausreichend groß. | + | und `v` durch einen einzigen offenen Verstärker bestimmt. |
+ | |||
+ | Hierbei wird, zusätzlich zu zwei Addierern und einem offenen Vestärker, lediglich ein Quadrierer und ein Multiplizierer | ||
+ | |||
+ | [svg: | ||
+ | |||
+ | Als Beispiel sei `x=y=0.1`, | ||
+ | dann sind `y^2 = 0.01, v=0.141, v+x=0.241, v-x = 0.041, (v+x)*(v-x)=0.0099 | ||
+ | |||
+ | Der offene Verstärker muss zwei Werte mit 1% vom Rechenbereich vergleichen (also 100mV bei 10V). | ||
+ | |||
+ | Für `y=0` oder `x=0` sind keine Stabilitätsprobleme ersichtlich. | ||
+ | |||
+ | Es werden nur zwei multiplikative Elemente verwendet; zwar wird gegenüber den folgenden Lösungen mit Division zusätzlich ein offener Verstärker benötigt; dafür entfallen die Instabilitäten bei der Division mit Null. | ||
Zeile 95: | 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 100: | 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 111: | 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 121: | Zeile 138: | ||
gebildet wird. | gebildet wird. | ||
- | Inverse Methode | ||
- | --------------- | ||
- | Man kann auch die zweite Binomische Formel verwenden | ||
- | und durch einen einzigen offenen Verstärker `v` bestimmen: | ||
- | `y^2 = v^2 - x^2 = (v+x)*(v-x) | ||
- | Hierbei wird ein Quadrierer und ein Multiplizierer benötigt: | + | Alternative Quadratsumme |
+ | -------------------- | ||
- | [svg:analogrechner/Vektorlaenge2M.svg:,] | + | Wegen |
+ | `x^2+y^2 = (x+y)^2 - 2 x y | ||
+ | |||
+ | kann man die Quadratsumme auch mit einem zusätzlichen Addierer, | ||
+ | einem Quadrierer und einem Multiplizierer bilden | ||
+ | und hat dabei größere Zwischenwerte, | ||
+ | da man, mit `x=y=0.1`, die Subtraktion `0.04 - 0.02` | ||
+ | anstelle der Addition `0.01+0.01` verwendet. | ||
+ | Dieser Vorteil ist aber für einen weiteren Addierer | ||
+ | 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 | ||
+ | |||
+ | 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%: | ||
- | Als Beispiel sei `x=y=0.1`, dann ist `v=0.14, v+x=0.24, v-x = 0.04`. | + | `sqrt(1+x^2) ~~ 1 + (0.47 - 0.06x)*x^2 if |x| <= 1 |
+ | |||
+ | Die Koeffizienten sind wieder empirisch ermittelt; gegebenenfalls können optimale Koeffizienten über eine | ||
+ | [https:// | ||
- | \ASCIIMATHML ./ASCIIMathML.js | + | \ASCIIMATHML |
</ | </ |
analogrechner/vektorlaenge.1489762477.txt.gz · Zuletzt geändert: 2017-03-17 15:54 von rainer