Matrisberäkningar med för STM32?
Re: Matrisberäkningar med för STM32?
Tips om att återvända, i alla fall från mitt håll, är inte för att undvika någon känd bugg utan mer för att inte få icke-deterministiskt beteende efter att den snurrat i typ tre timmar och malloc börjar få problem pga fragmentering eller nått sånt.
Det här problemet kanske kan bero på någon vektor/matris som borde normaliseras mellan varven? Min erfarenhet av att mangla matriser om och om igen är att om man sparar om någon matris med lite förändringar varje gång så kan små fel växa (ju sämre precision desto fortare går det)...
MATLAB kan väl sätta precision lätt? Hur bra sköter sig MATLAB-koden med typ digits(2)?
Det här problemet kanske kan bero på någon vektor/matris som borde normaliseras mellan varven? Min erfarenhet av att mangla matriser om och om igen är att om man sparar om någon matris med lite förändringar varje gång så kan små fel växa (ju sämre precision desto fortare går det)...
MATLAB kan väl sätta precision lätt? Hur bra sköter sig MATLAB-koden med typ digits(2)?
Senast redigerad av ahlsten 30 januari 2019, 23:03:13, redigerad totalt 1 gång.
Re: Matrisberäkningar med för STM32?
Du menar att det kan vara malloc som bråkar med mig? Trots att jag sitter på en PC?
Hur tror du det skulle vara om jag skapar matriserna bara en gång och sedan återanvänder jag dem? Alltså jag allokerar matriserna som jag har behov utav, bara en gång.
Hur tror du det skulle vara om jag skapar matriserna bara en gång och sedan återanvänder jag dem? Alltså jag allokerar matriserna som jag har behov utav, bara en gång.
Re: Matrisberäkningar med för STM32?
Nej, jag tror inte att du nödvändigtvis har problem pga det utan påpekade det bara för att det kan leda till huvudvärk om man har otur (fel som kan var svåra att felsöka för att de dyker upp sporadiskt, inte allomfattande ofrånkomliga fel på något vis).
Re: Matrisberäkningar med för STM32?
float har ju 7, kanske 7.5 signifikanta siffror, double har 15. Så precisionen borde blivit bättre med double.
Och du är såklart medveten om att octave avrundar talen när den skriver ut dem - annars testa "format long" eller nåt sånt.
Minnesallokering har inget med precisionen att göra. Att återanvända minnet har flera lobbat för tidigare i tråden.
Så det går bra. Men det blir lite andra trix då som att säkerställa att inte två matriser använder samma minne samtidigt.
Och du är såklart medveten om att octave avrundar talen när den skriver ut dem - annars testa "format long" eller nåt sånt.
Minnesallokering har inget med precisionen att göra. Att återanvända minnet har flera lobbat för tidigare i tråden.
Så det går bra. Men det blir lite andra trix då som att säkerställa att inte två matriser använder samma minne samtidigt.
Re: Matrisberäkningar med för STM32?
Okej! Det blev lite bättre!
Här har jag räknat
\(H = USV^T\)
och sedan
\(H - USV^T\)
Floats Double Notera att Octave får e-18 i precision och Octave har andra algoritmer för att lösa SVD. Jag löser SVD igenom QR-faktorisering. Det är en seg metod, men den är enkel och pedagogisk.
Här har jag räknat
\(H = USV^T\)
och sedan
\(H - USV^T\)
Floats Double Notera att Octave får e-18 i precision och Octave har andra algoritmer för att lösa SVD. Jag löser SVD igenom QR-faktorisering. Det är en seg metod, men den är enkel och pedagogisk.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Matrisberäkningar med för STM32?
Jag ska testa med Armadillo C++ och jämföra resultaten. STM32 kan ju använda sig av C++, men jag förstår inte varför STM32 har C++ som standard om C++ finns tillgänglig. Orsaken varför C används mest inom inbyggda system har väll med en kostnadsfråga, eller hur?
Enligt tillverkarna av Armadillo så använder Armadillo OpenBLAS som matematikberäknare, och OpenBLAS finns för ARM.
Tror ni det skulle vara några problem att kompilera C++ kod för STM32?
Enligt tillverkarna av Armadillo så använder Armadillo OpenBLAS som matematikberäknare, och OpenBLAS finns för ARM.
Tror ni det skulle vara några problem att kompilera C++ kod för STM32?
Re: Matrisberäkningar med för STM32?
Ingen. Jag har bara hört att C används mer inom inbyggda system då kompilatorer finns mer tillgängligt för C än C++. Det är ju ett jobb det också att skapa en kompilator.
Re: Matrisberäkningar med för STM32?
Jag tycker C++ har fått ett rykte om sig att vara olämpligt för inbäddade system men jag skulle nog säga att de som håller med ryktet har missat designfilosofin i C++: "you pay for what you use".
Mao man måste ha koll på vilka språkfinesser som kan skapa onödiga objekt eller oväntade kopieringar av objekt mm, samt förstå att vissa funktioner i standardbiblioteket kan dra med en massa annat som gör att koden blir onödigt stor osv.
Själv har jag testat att skriva samma funktionalitet i C och C++ (med klasser, virtuella funktioner mm) på Arduino Atmega328p och i de fallen har storleksskillnaden, både i flash och ram, varit obetydlig. Att göra tvärtom, dvs skriva objektorienterat i C går också men är mycket mer plågsamt och pratigt. Många structar och funktionspekare blir det.
Mao man måste ha koll på vilka språkfinesser som kan skapa onödiga objekt eller oväntade kopieringar av objekt mm, samt förstå att vissa funktioner i standardbiblioteket kan dra med en massa annat som gör att koden blir onödigt stor osv.
Själv har jag testat att skriva samma funktionalitet i C och C++ (med klasser, virtuella funktioner mm) på Arduino Atmega328p och i de fallen har storleksskillnaden, både i flash och ram, varit obetydlig. Att göra tvärtom, dvs skriva objektorienterat i C går också men är mycket mer plågsamt och pratigt. Många structar och funktionspekare blir det.
Re: Matrisberäkningar med för STM32?
Jag har också hört detta rykte, men jag har aldrig hört någon motivering. Det kanske var så förut, att C++ var olämpligt för inbyggda system?
Re: Matrisberäkningar med för STM32?
Jag tror det är just risken att råka skapa lite objekt dynamiskt lite här och där som gjort att C++ inte är så poppis bland uC folket, ungefär av samma anledning som att malloc inte är så poppis.
Och en hel del, så här har vi alltid gjort
Om jag tolkar IAR hemsida rätt klarar deras kompilatorer både C och C++ , och de supportar en hel hög plattformar.. (Allt man kan tänka sig utom PIC typ)
https://www.iar.com/iar-embedded-workbench/ klicka på "choose an architecture"
Och en hel del, så här har vi alltid gjort

Om jag tolkar IAR hemsida rätt klarar deras kompilatorer både C och C++ , och de supportar en hel hög plattformar.. (Allt man kan tänka sig utom PIC typ)
https://www.iar.com/iar-embedded-workbench/ klicka på "choose an architecture"
-
- Inlägg: 1407
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Matrisberäkningar med för STM32?
Visst är det så. Det är en liten del att folk skriver c++ som att det är ett desktop-system och kommer till slutsatsen att c++ inte fungerar för embedded, och en jättestor del "ja men (random namn) sa ju att det är dåligt.."AndLi skrev:Jag tror det är just risken att råka skapa lite objekt dynamiskt lite här och där som gjort att C++ inte är så poppis bland uC folket, ungefär av samma anledning som att malloc inte är så poppis.
Och en hel del, så här har vi alltid gjort
Jag gick för några år sen en kurs om embedded-programmering. Jag frågade om vi fick använda c++ istället för c. Läraren skrattade bara och sa "Ja om du tror att det går så gör det. Du ändrar dig nog ganska snabbt."
När jag lämnat in några uppgifter sa han "ja det var ju kul att du försökte men c++ används inte i industrin för den kompilerade koden blir minst 2x större"
Jag skrev en rapport där jag visade att olika c++ vs c-saker kompilerade till exakt samma instruktioner. Hans enda svar var "nej experterna håller inte med". När jag försökte få honom att klargöra vilka dessa "experterna" var blev det knäpptyst.
@Al
Jag ser inga problem som gör att armadillo inte skulle fungera, förutsatt att det finns de funktioner du behöver. Just det har jag ingen aning om.
Re: Matrisberäkningar med för STM32?
Även C++ klarade inte ens att få det samma som GNU Octave.
Armadillo med C++
Resultatet blev:
Armadillo med C++
Kod: Markera allt
#include <iostream>
#include <armadillo>
#include "hankel.h"
using namespace std;
using namespace arma;
int main() {
/*
* Declare vector and matrix
*/
mat u(1, 72);
mat y(1, 72);
mat toe(72, 72);
mat triup(72, 72);
mat inverse(72, 72);
mat g(1, 72); // markov parameters
vec g_v; // Impulse vector
mat H1(72, 72); // Hankel 1 of markov parameters
mat H2(72, 72); // Hankel 2 of markov parameters
mat H1_half(36,36);
/*
* G(s) = 4/(2s^2 + s + 5) - Model
*/
double input[72] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
double output[72] = { 0.00000, 3.47145, 6.41826, 4.35654, 2.53855, 3.76202,
4.88287, 4.15747, 3.46685, 3.89656, 4.32183,
4.06753, 3.80580, 3.95616, 4.11713, 4.02833, 3.92938, 3.98176,
4.04256, 4.01169, 3.97436, 3.99253,
4.01544, 4.00476, 3.99070, 3.99697, 4.00559, 4.00192, 3.99664,
3.99879, 4.00202, 4.00077, 3.99878,
3.99952, 4.00073, 4.00030, 3.99956, 3.99981, 4.00026, 4.00012,
3.99984, 3.99993, 4.00009, 4.00005,
3.99994, 3.99997, 4.00003, 4.00002, 3.99998, 3.99999, 4.00001,
4.00001, 3.99999, 4.00000, 4.00000,
4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000,
4.00000, 4.00000, 4.00000, 4.00000,
4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000 };
// Insert
for (int i = 0; i < 72; i++) {
u(0, i) = input[i];
y(0, i) = output[i];
}
// Toeplitz
toe = toeplitz(u);
// Triangular upper
triup = trimatu(toe);
// inverse
inverse = inv(triup);
// impulse
g = y * inverse;
// Turn it to a vector
g_v = trans(g);
// hankel
H1 = hankel(g_v, 1);
H2 = hankel(g_v, 2);
// cut
H1_half = H1( span(0,35), span(0,35) );
mat U;
vec s;
mat V;
svd(U,s,V,H1);
s.print("s: ");
return 0;
}
Mitt C-bibliotek:s:
1.4958e+00
1.0602e+00
2.1347e-05
1.3254e-05
1.2733e-05
1.2129e-05
1.0989e-05
7.4545e-06
6.7454e-06
6.3479e-06
5.8772e-06
5.8022e-06
5.5698e-06
5.4533e-06
5.0749e-06
4.2402e-06
4.1427e-06
4.0063e-06
3.9360e-06
3.7566e-06
3.7451e-06
3.6993e-06
3.5652e-06
3.4892e-06
3.4648e-06
3.4544e-06
2.6481e-06
2.5976e-06
2.2883e-06
1.8049e-06
1.7767e-06
1.6989e-06
1.4169e-06
1.2371e-06
1.1915e-06
1.1413e-06
9.0625e-07
8.3946e-07
7.3417e-07
7.0425e-07
5.9058e-07
5.7882e-07
4.7199e-07
4.3554e-07
2.4071e-07
9.7150e-08
7.4907e-08
5.6327e-08
5.6258e-08
3.2675e-08
2.9747e-08
3.5307e-10
3.0517e-10
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
1.1414e-16
Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
#include "LinearAlgebra/declareFunctions.h"
int main() {
/*
* G(s) = 4/(2s^2 + s + 5) - Model
*/
double input[72] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
double output[72] = {0.00000, 3.47145, 6.41826, 4.35654, 2.53855, 3.76202, 4.88287, 4.15747, 3.46685, 3.89656, 4.32183,
4.06753, 3.80580, 3.95616, 4.11713, 4.02833, 3.92938, 3.98176, 4.04256, 4.01169, 3.97436, 3.99253,
4.01544, 4.00476, 3.99070, 3.99697, 4.00559, 4.00192, 3.99664, 3.99879, 4.00202, 4.00077, 3.99878,
3.99952, 4.00073, 4.00030, 3.99956, 3.99981, 4.00026, 4.00012, 3.99984, 3.99993, 4.00009, 4.00005,
3.99994, 3.99997, 4.00003, 4.00002, 3.99998, 3.99999, 4.00001, 4.00001, 3.99999, 4.00000, 4.00000,
4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000,
4.00000, 4.00000, 4.00000, 4.00000, 4.00000, 4.00000};
// Create toeplitz matrix
matrix* toe = toeplitz(input, 72);
// Create upper triangular matrix of the toeplitz matrix
matrix* tru = triu(toe, 0);
// Find the inverse of tru
matrix* iv = inv(tru);
// Create vector the horizon - Important! Else, we cannot find the markov-parameters g
matrix* Y = create(output, 1, 72);
// Multiply Y with the iv matrix - Find the markov-parameters g
matrix* G = mul(Y, iv, false);
// Detete some mats
freeMatrix(toe);
freeMatrix(tru);
freeMatrix(iv);
freeMatrix(Y);
/*--------------------------------------*/
// turn vector G into a normal vector because the function hankel only want 1D vector
double g[72];
for(int i = 0; i < 72; i++)
g[i] = *(G->data + i);
// Delete G
freeMatrix(G);
// Create hankel matrix H0 and H1
matrix* H0 = hankel(g, 72, 1);
matrix* H1 = hankel(g, 72, 2);
// Cut H1 and H2 to the half - Remember indexing from zero here!
matrix* H0_half = cut(H0, 0, 35, 0, 35); // 36x36 from 72x72
// Remove H0
freeMatrix(H0);
// Measure the size
/*
int n;
int m;
size(H0_half, &n, &m);
printf("The H0_half have the size %dx%d\n\n,", n, m);
*/
// Do SVD on
matrix* u = initMatrix(36,36); // We know the size from the size() command above
matrix* s = initMatrix(36,36);
matrix* v = initMatrix(36,36);
svd(H0_half, u, s, v);
//freeMatrix(H0_half);
matrix* p = mul(s, tran(v), false);
matrix* o = mul(u, p, false);
//printMatrix(sub(H0_half, o));
printMatrix(s);
matrix* E = initMatrix(36,36);
int n = E->row;
int m = E->column;
double* e_ptr = E->data;
double* s_ptr = s->data;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(j == i){
*((e_ptr + i*n + j)) = 1/sqrt(*(s_ptr + i*n + j));
}
}
}
//printMatrix(u);
return EXIT_SUCCESS;
}
Kod: Markera allt
1.495784917789025004 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 1.060244148475468995 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000019400761171795 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000011552529611520 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000011392477463621 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000009352345453395 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000007272746558755 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000006357671418403 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000005818190973607 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000005489075329517 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000004932159190776 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000004886374883577 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000004313931603235 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000004306302153600 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003840821399643 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003728868524627 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003585514083560 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003529845886977 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003466027087633 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003192936832562 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000003057194448596 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000002666912744386 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000002635144423442 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000002441116481867 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000002331233014617 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000002243085195337 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000001359374862849 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000867825790150 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000796750618645 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000709803530064 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000624556496871 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000499296385836 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000403271341945 0.000000000000000000 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000301750776794 0.000000000000000000 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000095266142240 0.000000000000000000
0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000000000000000 0.000000049205780117
Re: Matrisberäkningar med för STM32?
Och GNU Octave
Det blir samma värden när jag gör min SVD-algoritm i GNU Octave också, dvs SVD som grundar sig på QR-faktorisering.
Så vad kan man dra för slutsats om detta då?
Mina slutsatser är att:
1. Jag behöver inte använda Armadillo.
2. Jag kan använda mitt C bibliotek
3. GNU Octave är bättre på beräkningen
4. Armadillo's SVD och min QR-faktoriserade SVD i C ger samma resultat, men Armadillos SVD är något snabbare och kräver mindre iterationer.
5. Float verkar inte heller göra någon större skillnad i beräkningen heller.
Då kommer jag skriva om min C-kod så att man initialiserar matriserna bara en gång under körningen.
Kod: Markera allt
u = linspace(5,5, 72);
t = linspace(0, 71, 72);
G = tf(4, [2, 1, 5]);
y = lsim(G, u, t); close all;
g = y*inv(triu(toeplitz(u)));
% Create the hankel matrix
k = 1
H = hankel(g)(1:length(g)/2,1+k:length(g)/2+k);
[u,s,v] = svdsim(H);
s
Kod: Markera allt
s =
Diagonal Matrix
Columns 1 through 8:
1.49578691063427e+00 0 0 0 0 0 0 0
0 1.06024607224369e+00 0 0 0 0 0 0
0 0 1.33255591690263e-15 0 0 0 0 0
0 0 0 1.31787315854601e-15 0 0 0 0
0 0 0 0 1.06167277714223e-15 0 0 0
0 0 0 0 0 1.01367984757753e-15 0 0
0 0 0 0 0 0 9.72307420314964e-16 0
0 0 0 0 0 0 0 8.40989444285943e-16
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Columns 9 through 16:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
7.84581382552389e-16 0 0 0 0 0 0 0
0 7.19899882445797e-16 0 0 0 0 0 0
0 0 6.84337943063624e-16 0 0 0 0 0
0 0 0 6.52662380533485e-16 0 0 0 0
0 0 0 0 5.90031018652976e-16 0 0 0
0 0 0 0 0 5.11850577956612e-16 0 0
0 0 0 0 0 0 4.99214531415125e-16 0
0 0 0 0 0 0 0 4.15463203077949e-16
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Columns 17 through 24:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
3.94340220158252e-16 0 0 0 0 0 0 0
0 3.39904540767023e-16 0 0 0 0 0 0
0 0 2.91838627478874e-16 0 0 0 0 0
0 0 0 2.64709866341420e-16 0 0 0 0
0 0 0 0 2.60750002495710e-16 0 0 0
0 0 0 0 0 2.42707397956568e-16 0 0
0 0 0 0 0 0 2.33268965183877e-16 0
0 0 0 0 0 0 0 2.26449937896559e-16
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Columns 25 through 32:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1.91419958178306e-16 0 0 0 0 0 0 0
0 1.74228527086487e-16 0 0 0 0 0 0
0 0 1.52749816861709e-16 0 0 0 0 0
0 0 0 1.37245616001238e-16 0 0 0 0
0 0 0 0 1.28865570171581e-16 0 0 0
0 0 0 0 0 7.50766891119711e-17 0 0
0 0 0 0 0 0 6.94131769376700e-17 0
0 0 0 0 0 0 0 6.42272417019620e-17
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Columns 33 through 36:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
4.84239988362713e-17 0 0 0
0 2.39198845321293e-17 0 0
0 0 2.02231370859494e-17 0
0 0 0 6.68357906467677e-18
>>
Så vad kan man dra för slutsats om detta då?
Mina slutsatser är att:
1. Jag behöver inte använda Armadillo.
2. Jag kan använda mitt C bibliotek
3. GNU Octave är bättre på beräkningen
4. Armadillo's SVD och min QR-faktoriserade SVD i C ger samma resultat, men Armadillos SVD är något snabbare och kräver mindre iterationer.
5. Float verkar inte heller göra någon större skillnad i beräkningen heller.
Då kommer jag skriva om min C-kod så att man initialiserar matriserna bara en gång under körningen.