Atmega1280 - Lineare Algebra

Gast #2420311
Lesenswert?

Hi!

Für ein Projekt bin ich auf der Suche nach einer Bibliothek für lineare 
Algebra für einen Atmega1280.

Es müsste ein 10x10-generalized-eigenvalue-problem gelöst werden (in 
floating-point-arithmetik). Habt ihr da schonmal was von gehört, obs da 
was für gibt?

Bzw. denkt ihr, dass das der 1280 überhaupt schaffen könnte? Falls es 
gar nichts gibt, könnte ich höchstens noch versuchen, normale PC-Libs zu 
portieren, aber ob die dann dort auch funktionieren, bezweifle ich...

Liebe Grüße, Max
Gast #2420923
Lesenswert?

@Mini float:
ich habe noch nie von einem matrix-compiler gehört, auch google spuckt 
da nichts interessantes aus...
Ich dachte auch evtl. an eine bereits fertige Lib, da eine eigene 
Implementierung sicherlich a) langsamer und b) ungenauer c) aufwändiger 
sein würde, als etwas fertiges.

@Karl-Heinz:
meinst du dazu sowas wie SoftFloat 
(http://www.jhauser.us/arithmetic/SoftFloat.html) ?


Gruß, Max
#2421612
Lesenswert?

etMax schrieb:
> Es müsste ein 10x10-generalized-eigenvalue-problem gelöst werden

Ich hab ein bischen gegoogled, was das bedeuten könnte, aber nur Bahnhof 
verstanden.
Ich kann mir ehrlich gesagt überhaupt nichts darunter vorstellen.
Wofür kann man das denn praktisch auf einem Microcontroller einsetzen?


etMax schrieb:
> Bzw. denkt ihr, dass das der 1280 überhaupt schaffen könnte?

Dazu mußt Du diese Black-Box aufdröseln, also in einen konkreten 
Algorithmus umsetzen.
Und dann abschätzen, welche und wie viele Rechenoperationen man dafür 
benötigt und wieviele Variablen.
Wie schnell muß denn eine solche Berechnung ausgeführt werden?


Peter
Persönliche Seite #2421619
Lesenswert?

etMax schrieb:
> Es müsste ein 10x10-generalized-eigenvalue-problem gelöst werden (in
> floating-point-arithmetik). Habt ihr da schonmal was von gehört, obs da
> was für gibt?
>
> Bzw. denkt ihr, dass das der 1280 überhaupt schaffen könnte?

hast du noch restraints bzgl. timing? Ich nehme doch an, du brauchst die 
Daten auch innerhalb eines gewissen Zeitfensters, oder?
#2421659
Lesenswert?

Peter Dannegger schrieb:
> Ich hab ein bischen gegoogled, was das bedeuten könnte, aber nur Bahnhof
> verstanden.
Mit den Eigenwerten einer Matrix kommt man auf die Eigenvektoren einer 
Matrix.
*Mathematik für Ingenieure II ausgrab, staubwisch, hust, röchel*

sei A die Matrix, Xi ein Eigenvektor dieser Matrix, Li ein 
Eigenwert(ist ein Skalar also eine Zahl), E die Einheitsmatrix, i ist 
eine natürliche Zahl um die Eigenvektoren und Eigenwerte zu 
beziffern/zählen(mehr dazu später).

Es gilt die Charakteristische Gleichung: A * Xi = Li * Xi

Kochrezept zum Finden von Eigenwerten/-Vektoren:
1.Bestimmungsgleichung: det(A - Li * E) = 0
Es gibt nun hoffentlich eine wenn nicht mehrere Lösungen für Li.

2.Die Setzt man in die Charakteristische Gleichung ein und erhält 
generalisierte Ausdrücke, die die Xi bestimmen lassen.

3.Linear voneinander abhängige Koeffizienten(jeweils einem vielfachen 
voneinander entsprechend + evtl. ein "Offset") in Xi kann man 
zusammenfassen und durch Skalare Koeffizienten a,b,c ausdrücken.

IMHO gibt es so viele Eigenvektoren einer Matrix, wie ihr Rang 
ist(stimmt das??).
Mathe II wieder eingrab

etMax schrieb:
> ich habe noch nie von einem matrix-compiler gehört
Ja äh, ich meinte damit, dass du einen Algorithmus implementieren musst, 
der durch inkrementelles Vorgehen deine Lösung(en) findet. Dazu eignet 
sich z.B. das Gaußsche Eliminationsverfahren. Ich frage mich aber 
gerade, ob das auch funktioniert, wenn zwei "Zeilen" linear voneinander 
abhängig sind.
mfg mf
Persönliche Seite #2421675
Lesenswert?

etMax schrieb:

> Es müsste ein 10x10-generalized-eigenvalue-problem gelöst werden (in
> floating-point-arithmetik). Habt ihr da schonmal was von gehört, obs da
> was für gibt?

Was heisst "generatized"?
Ist die Matrix noch nichtmal symmetrisch/positiv definit?


Mini Float schrieb:
> etMax schrieb:
>> ich habe noch nie von einem matrix-compiler gehört
> Ja äh, ich meinte damit, dass du einen Algorithmus implementieren musst,
> der durch inkrementelles Vorgehen deine Lösung(en) findet. Dazu eignet
> sich z.B. das Gaußsche Eliminationsverfahren.

Nein. Das ist absolut ungeeignet wegen schlechter Konditionierung.

> Ich frage mich aber gerade, ob das auch funktioniert,
> wenn zwei "Zeilen" linear voneinander abhängig sind.

Auch dann gibt es Eigenwerte und Eigenvektoren.
#2421687
Lesenswert?

Johann L. schrieb:
> Mini Float schrieb:
>> etMax schrieb:
>>> ich habe noch nie von einem matrix-compiler gehört
>> Ja äh, ich meinte damit, dass du einen Algorithmus implementieren musst,
>> der durch inkrementelles Vorgehen deine Lösung(en) findet. Dazu eignet
>> sich z.B. das Gaußsche Eliminationsverfahren.
>
> Nein. Das ist absolut ungeeignet wegen schlechter Konditionierung.
Das is mal n Argument!
Dann mach nen besseren Vorschlag, das interessiert mich jetzt nämlich 
auch(trotz eines -sich mir noch nicht ganz erschließenden- 
Anwendungsbereiches).
mfg mf
Gast #2421721
Lesenswert?

Für meine Diplom-Arbeit habe ich mal ein Ersatzschaltbild aus 700 
Kondensatoren durchgerechnet. Das habe ich mit Gauß-Verfahren und 
Pivotisierung gemacht. In meiner Not hatte ich das in aller Eile 
übrigens mit BASIC in einen ZX Spectrum Homecomputer gehackt. Ich weiß 
noch, daß das Teil die ganze Nacht durchgerechnet hat...
#2421729
Lesenswert?

Schwingi schrieb:
> ein Ersatzschaltbild aus 700 Kondensatoren

würde ich nicht in einen Atmega quetschen wollen.
Vielleicht erfahren wir ja auch irgendwann, dass der TO eine ganz andere 
Lösung gefunden oder sein Problem auf ein anderes zurückgeführt hat.

Diese beiden Zitate gehören einfach zusammen:

Thomas Klima schrieb:
> restraints bzgl. timing

Schwingi schrieb:
> Ich weiß noch, daß das Teil die ganze Nacht durchgerechnet hat

:D mfg mf
Gast #2421738
Lesenswert?

Naturlich kann man fuer eine 10x10 Matrix die Eigenwerte rechnen. Ich 
erinnere mich an einen iterativen Algorithmus.  Der Speicherbedarf ist 
100 Plaetze zu 8 byte fuer double. Das hat Platz im 1280er. Mein 
Compiler kann zB kein double. Aber machbar sollte es trotzdem sein. 
Allenfalls als Fixedkomma. Dann muss man nur noch zuruecklehnen und 
warten bis der Algorithmus konvergiert.
Persönliche Seite #2421740
Lesenswert?

Mini Float schrieb:
> Johann L. schrieb:
>> Mini Float schrieb:
>>> etMax schrieb:
>>>> ich habe noch nie von einem matrix-compiler gehört
>>> Ja äh, ich meinte damit, dass du einen Algorithmus implementieren musst,
>>> der durch inkrementelles Vorgehen deine Lösung(en) findet. Dazu eignet
>>> sich z.B. das Gaußsche Eliminationsverfahren.
>>
>> Nein. Das ist absolut ungeeignet wegen schlechter Konditionierung.
> Das is mal n Argument!
> Dann mach nen besseren Vorschlag,

Für solch kleine Matrizen etwa QR-Algorithmus.

Oder man suche zB nach Eigenwertproblem oder Säkulargleichung
Gast #2423621
Lesenswert?

Danke für eure Antworten!

also nochmal zum Problem genau:

geg. ist die Matrix A (10x10, nicht-singulär, symmetrisch) und C 
(singulär, symmetrisch). Zu lösen ist das folgende Gleichungssystem:

A*x=l*C*x, dabei sind x die zu bestimmenden Eigenvektoren und l die dazu 
passenden Eigenwerte.  Das ist das generalisierte Eigenwertproblem. Es 
gibt 10x und 10passende l, wovon einige "Inf" sind. Es ist also leider 
nicht einfach Ax=lx zu lösen.
Man könnte A invertieren (allerdings ist diese Matrix fast singulär -> 
instabile Invertierung) und es umformen zu x/l=A^-1*C*x, was ein 
normales Eigenwertproblem ist, aber A^-1*C ist nicht mehr symmetrisch, 
was auch nicht mehr gut ist.


Die Berechnung darf/sollte nicht länger als 20ms dauern. Es geht um die 
Online-Kalibrierung eines Magnetometers und wenn die Berechnung zu lange 
dauert, können andere wichtige Codeteile nicht oft genug ausgeführt 
werden.

Prinzipiell geht es mir aber vorrangig um die Möglichkeit, das überhaupt 
auf einem Atmaga machen zu lassen, da ich gelesen habe, dass die 
algoritmische Umsetzung davon alles andere als simpel ist. Ich suchte 
also eigentlich nach Bibliotheken dafür :)
Gast #2423645
Lesenswert?

etMax schrieb:
> Die Berechnung darf/sollte nicht länger als 20ms dauern.

20ms mit dem 1280 -> Vergiß es! Die Berechnung könnte er schaffen, 
codetechnisch. Aber der Rechenknecht wäre hauptsächlich mit kopieren 
beschäftig.

etMax schrieb:
> geg. ist die Matrix A (10x10, nicht-singulär, symmetrisch) und C

Also, für diesen Anspruch würde ich Dir einen Mikrocontroler mit FPU 
mindestens jedoch ein  32-Bitter. dringend empfehlen.
TC 1796 / 1762 etc. oder Freescale MP5556 oder diverse. Es gibt da 
bestimmt auch was von ARM (Cortex)
Wenn Du abenteuerlustig bist, bestände mit AT32UC3C0512 ein AVR32 zur 
Verfügung der eine hardware Fließkomma-Einheit hat. Die wird jedoch mit 
dem GNU aus C nicht unterstützt (Kenntnisstand 03/2011).

Übrigens nur mal so interessehalber, wie willst Du den die Berechnung 
programmieren? Prozedural in C ? Das wäre sehr fehleranfällig und 
erfordert ein Höchstmass an Disziplin.

Schon über automatische Codegenerierung mit Matlab oder SciLab 
nachgedacht?

Nur so als Tip.
#2423752
Lesenswert?

Eigenwerte lassen sich mit diesem

http://en.wikipedia.org/wiki/Jacobi_eigenvalue_algorithm

Algorithmus berechnen. Der benötigt für einen 'sweep' O(n^3) 
Multiplikationen, also in Deinem Fall etliche Tausend.

Außerdem muß Du das Problem vorher degeneralisieren ( 'Numerical recipes 
in C'), kostet auch nochmal. Um das in 20ms zu schaffen brauchst Du nen 
mittelfetten DSP, mit nem uC gehts vielleicht in nem Stündchen.

Interessantes Thema.
Machs mit nem FPGA, das macht dann auch noch richtig Spaß.

Cheers
Detlef
#2423837
Lesenswert?

> Die Berechnung darf/sollte nicht länger als 20ms dauern.
> Es geht um die Online-Kalibrierung eines Magnetometers und
> wenn die Berechnung zu lange dauert, können andere wichtige
> Codeteile nicht oft genug ausgeführt werden.

Na ja. Das bedeutet ja nicht, dass die Berechnung in Summe nicht länger 
als 20ms dauern darf. Es bedeutet nur, dass du deine Berechnung in 
Happen aufteilen musst, von denen jeder einzelne nicht länger als 20ms 
dauern darf.

Wenn die Kalibrierung 2 Minuten läuft und dabei alle 20ms die Kontrolle 
abgibt, so dass andere lebenswichtige Operationen eine Chance haben, ist 
das sicherlich auch ok.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren