Anzeigen des Gesamtinhalts (oder Logo links anklicken) oder des Impressums.

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
analogrechner:vektorlaenge [2017-03-17 14:53]
rainer created
analogrechner:vektorlaenge [2021-12-11 13:01] (aktuell)
rainer
Zeile 1: Zeile 1:
 <​nimla>​ <​nimla>​
- 
 Berechnung einer Vektorlänge Berechnung einer Vektorlänge
  
-\ASCIIMATHML ./​ASCIIMathML.js+
  
 Zur Berechnung der Vektorlänge Zur Berechnung der Vektorlänge
Zeile 39: 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 ​bilden +--------------- 
-und hat dabei größere Zwischenwerte,​ + 
-da manmit `x=y=0.1`, ​die Subtraktion ​`0.04 - 0.02+Verwendet wird die dritte Binomische Formel: 
-anstelle der Addition ​`0.01+0.01verwendet+ `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 ​benötigt: 
 + 
 +[svg:​analogrechner/​Vektorlaenge2M.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 96: 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:​analogrechner/​VektorlaengeQ.svg:,​] [svg:​analogrechner/​VektorlaengeQ.svg:,​]
Zeile 101: 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,​ weil bei der praktischen Umsetzung ohnehin **nicht** invertierend,​ weil bei der praktischen Umsetzung ohnehin
-Änderungen notwendig sind, da einige Dividierer ​beispielsweise ​invertierte+Änderungen notwendig sind, da einige Dividierer invertierte
 Ergebnisse liefern, u.s.w. Ergebnisse liefern, u.s.w.
  
Zeile 112: 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:​analogrechner/​Vektorlaenge.svg:,​] [svg:​analogrechner/​Vektorlaenge.svg:,​]
Zeile 122: 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 ​[https://en.wikipedia.org/​wiki/​Alpha_max_plus_beta_min_algorithm für Werte von `alpha` und `beta`). 
 + 
 +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| <
 +      
 +Die Koeffizienten sind wieder empirisch ermittelt; gegebenenfalls können optimale Koeffizienten über eine 
 +[https://​rclab.de/​analogrechner/​tschebyscheffapproximation Tschebyscheff-Approximation] bestimmt werden.
  
 +\ASCIIMATHML https://​cdnjs.cloudflare.com/​ajax/​libs/​mathjax/​2.7.4/​latest.js?​config=AM_CHTML
  
  
  
 </​nimla>​ </​nimla>​

Anmelden