Matrisberäkningar med för STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
ahlsten
Inlägg: 659
Blev medlem: 12 november 2005, 00:24:14
Ort: Uppsala

Re: Matrisberäkningar med för STM32?

Inlägg av ahlsten »

Någon verkar ha byggt GMP för stm32 m4f iaf

https://singletonresearch.com/2017/07/1 ... cortex-m4/

Vet inte hur användbart det blir det för dig, med reglerloop...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Sista jag vill göra är att använda Java för reglersystem. Det fungerar utmärkt, men reglersystem ska köras utan "hårddisk" eller vad man ska säga. Inget minneskort eller liknande som kan gå sönder med årens gång.

Så antingen får jag byta upp mig från C till C++ och hitta ett C++ bibliotek som passar linjär algebra. Jag har tittat på många, men dem saknar alltid det viktigaste för mig. GSL är det enda C bibliotek som verkligen har allt.

Jag har tittat på:
* Armadillo: C++ bibliotek som följer MATLAB standard. Ser enkelt och lovande ut. Om det passar ARM vet jag ej.
* Eigen: C++ bibliotek som verkar vara OK. Har hört att den är snabb osv. Saknar dock det jag behöver. Vet inte om Eigen passar ARM.
* Dlib: C++ bibliotek som verkar ha allt + mycket mer. Men den saknar fortfarande det jag behöver.
* GSL: C bibliotek som har allt. Som vi vet så passade denna ARM då det gick att kompilera. Troligtvis har detta med C's portabilitet att göra?
* GNU Octave C++ API: Ett C++ bibliotek som har allt och jag vet att den klarar av mina beräkningar. Om den passar ARM, vet jag inte. Dessutom är dokumentationen fattig.

Vägvalet står mellan Armadillo och GSL. Och jag tror det lutar mot Armadillo med C++ i spetsen.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hawkan
Inlägg: 3415
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Al_Bundy skrev:>> Hur har octave implementerat rutinen som du har problem med?
30 års erfarenhet + massa svett och tårar uppe på sena nätter.

Jag tvivlar nästan på att Java skulle vara ett bra alternativ för matrisberäkninar, om inte C klarar av det med andra ord. Då återstår det bara kommunikation mellan Java och Octave via socket.
Försökte ju lura dej att titta på källkoden till octaves svd för att se hur de gör.
http://octave.org/doxygen/3.8/dd/dd7/sv ... ource.html
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag har talat med utvecklarna för Armadillo och dem säger att om man har Openblas installerat så ska det fungera på STM32. Openblas innehåller även Lapack och Openblas finns för ARM.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Matrisberäkningar med för STM32?

Inlägg av sodjan »

Men, jag har aldrig varit med om en utvecklingsplattform (hårdvara + kompilatorer)
som inte tydligt dokumenterar och specificerar vilka områden de olika flyttals
varianterna täcker in. Det ska aldrig behöva vara en gissning.

> Jag misstänker att vissa värden blir så stora (e+308) och därmed kan C inte hantera dessa.

Dvs att misstankar och gissningar av den typen borde gå att reda ut. Algoritmen i sig
borde gå att analysera för att se om det skapas temporära värden som ligger på
gränsen för vad den valda flyttalstypen klarar. På samma sätt så måste det vara
helt klart vilket totalt intervall som den valda flyttalstypen stöder...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

hawkan skrev:
Al_Bundy skrev:>> Hur har octave implementerat rutinen som du har problem med?
30 års erfarenhet + massa svett och tårar uppe på sena nätter.

Jag tvivlar nästan på att Java skulle vara ett bra alternativ för matrisberäkninar, om inte C klarar av det med andra ord. Då återstår det bara kommunikation mellan Java och Octave via socket.
Försökte ju lura dej att titta på källkoden till octaves svd för att se hur de gör.
http://octave.org/doxygen/3.8/dd/dd7/sv ... ource.html
Men vilket år då ska man vara klar ?
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

sodjan skrev:Men, jag har aldrig varit med om en utvecklingsplattform (hårdvara + kompilatorer)
som inte tydligt dokumenterar och specificerar vilka områden de olika flyttals
varianterna täcker in. Det ska aldrig behöva vara en gissning.

> Jag misstänker att vissa värden blir så stora (e+308) och därmed kan C inte hantera dessa.

Dvs att misstankar och gissningar av den typen borde gå att reda ut. Algoritmen i sig
borde gå att analysera för att se om det skapas temporära värden som ligger på
gränsen för vad den valda flyttalstypen klarar. På samma sätt så måste det vara
helt klart vilket totalt intervall som den valda flyttalstypen stöder...
Jag har lagt ned tankarna om mitt C bibliotek. Den fungerar för enklare linjärakgebraiska beräkningar. Men jag har valt att gå över till Armadillo som är skrivet i C++.

När jag menar enklare så menar jag annan typ av data. Min data kanske gjorde så att det fanns ett behov utav att räkna med komplexa tal. Vem vet. Ytterligare en gissning.

Men det lustiga är att jag har en MATLAB kod i min qr.c fil som beskriver exakt QR-algoritnen. Ändå så fungerar den bara med vissa typer utav data.

Ja, jag jämförde med octave om dem visade samma vid slumpmässig data.
Shimonu
Inlägg: 319
Blev medlem: 21 oktober 2015, 22:44:33

Re: Matrisberäkningar med för STM32?

Inlägg av Shimonu »

Jag har nog missat något. Vad fick du för problem med ditt C bibliotek som gör att du måste gå till C++?

Såg något om stora tal. C har inga problem med double precision flyttal. Din µC däremot stödjer bara single precision i hårdvaran. Men med bibliotek för double så vore det inga problem att hantera större tal iaf.
Användarvisningsbild
Icecap
Inlägg: 26625
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matrisberäkningar med för STM32?

Inlägg av Icecap »

Alltså - C++ kan inget som C inte kan!

I mina projekt kör jag C11 för att få tillgång till 64-bitars tal inkl. double och long long - samt lite andra småsaker.
Kör jag C++11 är det samma sak.

Att dina uträkningar kör med flyttal kan jag acceptera - men MÅSTE de vara flyttal? Du kan verkligen hämta hastighet på att t.ex. kunde byta till int (32 bitars heltal, native till µC'n) eller välja en µC med FPU inbyggd.

Och javisst, din reglerloop behöver uppdateras varje sekund för att det ska räcka till - men vad med andra projekt? Om du kan skapa en välfungerande funktion för detta kan den ju enkelt importeras i andra projekt, vara sig det är C eller C++ och då är det tunga jobbet redan klart.

Jag har själv ett ganska stort antal rutiner i form av .C och .H-filer som jag inkluderar i mina projekt efter behov, det gör att jag har behövt utveckla dom en gång, avlusa dom och sedan är de guld.

Och ja, några enstaka gångar har jag fått anpassa en rutin för att uppfylla ett specifikt ändamål - men då har jag kopierat den fungerande och justerat kopian.

Nu vet jag att struktur och översikt inte är där du har speciell kompetens - men det kan verkligen vara värd att dels planera exakt vilka rutiner som behövs, dels hur man ska göra det modulärt. Det är kanske 150% jobb första gången till allt fungerar - men sedan är återbruket av lösningen 10% jobb därefter.

Allokeringen av minne via alloc() har knappast med valet av µC att göra, det är en ren mjukvaradel.
Om du allokerar 10k först, sedan 5k, använder 10k-delen klart och sedan släpper den är minnet fragmenterat redan där.
Ska du sedan allokera 12k fungerar den lediga 10k inte, alltså måste de 12k tas EFTER 5k-blocket.

I verkligheten har det mycket stor likhet med ett filsystem som ju delar upp en disk i delar som sedan allokeras. Och för att snabba upp en mekanisk hårddisk i en dator som används "hemma" behöver man defragmentera den ibland för att inte tappa allt för mycket hastighet.

Skulle du göra det i en µC med dynamisk minnesallokering behöver du kopiera sektioner av minnet till andra delar, ändra pekare osv. och det vill oundvikligen leda till instabila program och kaos.

Så antingen har dina allokeringar samma fasta storlek - och då är det lika bra att allokera dom direkt i källkoden - eller också får du acceptera att minnet kan ta slut i värsta fall.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Hej!

Kör denna kod.

Kod: Markera allt

#include <stdio.h>
#include <stdlib.h>
#include "LinearAlgebra/declareFunctions.h"

int main() {

	/*
	 * G(s) = 4/(2s^2 + s + 5) - Model
	 */

	float 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};


	float 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
    float 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);



    printMatrix(s);



    /*
    matrix* E = initMatrix(36,36);
    int n = E->row;
    int m = E->column;
    float* e_ptr = E->data;
    float* 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(s);
     */

	return EXIT_SUCCESS;
}

Varför blir S matrisen så här?

I Octave så har vi följande kod:

Kod: Markera allt

>> u = linspace(5,5, 72); % Insignal
>> G = tf(4, [2, 1, 5]); % Model
>> t = linspace(0,71, 72); % Tid
>> y = lsim(G, u, t) % utsignal
y =

 Columns 1 through 20:

   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

 Columns 21 through 40:

   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

 Columns 41 through 60:

   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

 Columns 61 through 72:

   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000   4.00000

>> g = y*pinv(triu(toeplitz(u))) % Impulssvar
g =

 Columns 1 through 15:

  -3.9391e-15   6.9429e-01   5.8936e-01  -4.1234e-01  -3.6360e-01   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02

 Columns 16 through 30:

  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04

 Columns 31 through 45:

   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05

 Columns 46 through 60:

   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08

 Columns 61 through 72:

  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07   1.5566e-08   8.8871e-08  -8.1197e-09  -5.4024e-08   4.1215e-09   3.2828e-08  -2.0117e-09

>> function [H] = hank(g, k)
  H = hankel(g)(1:length(g)/2,1+k:length(g)/2+k);
endfunction
>> H0 = hank(g, 1) % Hankel matris
H0 =

 Columns 1 through 15:

   6.9429e-01   5.8936e-01  -4.1234e-01  -3.6360e-01   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02
   5.8936e-01  -4.1234e-01  -3.6360e-01   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02
  -4.1234e-01  -3.6360e-01   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02
  -3.6360e-01   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02
   2.4469e-01   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03
   2.2417e-01  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03
  -1.4508e-01  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03
  -1.3812e-01   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03
   8.5942e-02   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03
   8.5055e-02  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03
  -5.0862e-02  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03
  -5.2345e-02   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03
   3.0071e-02   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04
   3.2196e-02  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03
  -1.7760e-02  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04
  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04
   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04
   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04
  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04
  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04
   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05
   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04
  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05
  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05
   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05
   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05
  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05
  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05
   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06
   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05
  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06
  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05
   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06
   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06
  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06
  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06

 Columns 16 through 30:

  -1.9792e-02   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04
   1.0478e-02   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04
   1.2160e-02  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04
  -6.1742e-03  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04
  -7.4673e-03   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04
   3.6338e-03   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05
   4.5832e-03  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04
  -2.1359e-03  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05
  -2.8116e-03   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05
   1.2537e-03   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05
   1.7240e-03  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05
  -7.3475e-04  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05
  -1.0566e-03   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05
   4.2994e-04   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06
   6.4723e-04  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05
  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06
  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05
   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06
   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06
  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06
  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06
   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06
   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06
  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07
  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06
   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07
   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06
  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07
  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07
   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08
   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07
  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08
  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07
   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08
   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07
  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07   1.5566e-08

 Columns 31 through 36:

  -2.5115e-04  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04
  -3.9630e-04   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05
   1.4644e-04   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05
   2.4255e-04  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05
  -8.5211e-05  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05
  -1.4838e-04   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05
   4.9477e-05   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05
   9.0732e-05  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06
  -2.8660e-05  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05
  -5.5458e-05   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06
   1.6558e-05   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05
   3.3883e-05  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06
  -9.5394e-06  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06
  -2.0693e-05   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06
   5.4782e-06   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06
   1.2632e-05  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06
  -3.1349e-06  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06
  -7.7085e-06   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07
   1.7868e-06   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06
   4.7020e-06  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07
  -1.0138e-06  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06
  -2.8670e-06   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07
   5.7227e-07   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07
   1.7474e-06  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08
  -3.2112e-07  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07
  -1.0646e-06   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08
   1.7894e-07   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07
   6.4840e-07  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08
  -9.8889e-08  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07
  -3.9475e-07   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07   1.5566e-08
   5.4109e-08   2.4023e-07  -2.9247e-08  -1.4614e-07   1.5566e-08   8.8871e-08
   2.4023e-07  -2.9247e-08  -1.4614e-07   1.5566e-08   8.8871e-08  -8.1197e-09
  -2.9247e-08  -1.4614e-07   1.5566e-08   8.8871e-08  -8.1197e-09  -5.4024e-08
  -1.4614e-07   1.5566e-08   8.8871e-08  -8.1197e-09  -5.4024e-08   4.1215e-09
   1.5566e-08   8.8871e-08  -8.1197e-09  -5.4024e-08   4.1215e-09   3.2828e-08
   8.8871e-08  -8.1197e-09  -5.4024e-08   4.1215e-09   3.2828e-08  -2.0117e-09

>> [u,s,v] = svd(H0);
>> s
s =

Diagonal Matrix   - Här kan vi se att s-värderna, de diagonala, är inte helt överens med vad C har genererat.

 Columns 1 through 15:

   1.4958e+00            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0   1.0602e+00            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0   1.4988e-14            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0   1.3716e-14            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0   1.1817e-14            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0   1.1660e-14            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0   8.1286e-15            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0   7.6073e-15            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0   7.2734e-15            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0   6.7542e-15            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0   6.4637e-15            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0   6.3072e-15            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0   5.9647e-15            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0   5.8651e-15            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0   5.6859e-15
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            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 16 through 30:

            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
>>
Dom första s-värderna stämmer riktigt bra med mitt C-bibliotek, men övrigt så stämmer det inte alls. Boven i dramat är qr.c filen. Men den fungerar ändå för andra typer av värden.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
bearing
Inlägg: 11670
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Matrisberäkningar med för STM32?

Inlägg av bearing »

Jag misstänker att vissa värden blir så stora (e+308) och därmed kan C inte hantera dessa.
e+308 är bara ett tecken på att värdet är på väg mot oändligheten. D.v.s ett symptom på att indatan inte är OK. Och om indatan är OK, är det något problem med algoritmen. Division med ett värde nära noll eller liknande.

Har ingenting med datatypen att göra. I princip allt går att göra med 32-bit float, med extremt hög precision.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Icecap skrev:Alltså - C++ kan inget som C inte kan!

I mina projekt kör jag C11 för att få tillgång till 64-bitars tal inkl. double och long long - samt lite andra småsaker.
Kör jag C++11 är det samma sak.

Att dina uträkningar kör med flyttal kan jag acceptera - men MÅSTE de vara flyttal? Du kan verkligen hämta hastighet på att t.ex. kunde byta till int (32 bitars heltal, native till µC'n) eller välja en µC med FPU inbyggd.

Och javisst, din reglerloop behöver uppdateras varje sekund för att det ska räcka till - men vad med andra projekt? Om du kan skapa en välfungerande funktion för detta kan den ju enkelt importeras i andra projekt, vara sig det är C eller C++ och då är det tunga jobbet redan klart.

Jag har själv ett ganska stort antal rutiner i form av .C och .H-filer som jag inkluderar i mina projekt efter behov, det gör att jag har behövt utveckla dom en gång, avlusa dom och sedan är de guld.

Och ja, några enstaka gångar har jag fått anpassa en rutin för att uppfylla ett specifikt ändamål - men då har jag kopierat den fungerande och justerat kopian.

Nu vet jag att struktur och översikt inte är där du har speciell kompetens - men det kan verkligen vara värd att dels planera exakt vilka rutiner som behövs, dels hur man ska göra det modulärt. Det är kanske 150% jobb första gången till allt fungerar - men sedan är återbruket av lösningen 10% jobb därefter.

Allokeringen av minne via alloc() har knappast med valet av µC att göra, det är en ren mjukvaradel.
Om du allokerar 10k först, sedan 5k, använder 10k-delen klart och sedan släpper den är minnet fragmenterat redan där.
Ska du sedan allokera 12k fungerar den lediga 10k inte, alltså måste de 12k tas EFTER 5k-blocket.

I verkligheten har det mycket stor likhet med ett filsystem som ju delar upp en disk i delar som sedan allokeras. Och för att snabba upp en mekanisk hårddisk i en dator som används "hemma" behöver man defragmentera den ibland för att inte tappa allt för mycket hastighet.

Skulle du göra det i en µC med dynamisk minnesallokering behöver du kopiera sektioner av minnet till andra delar, ändra pekare osv. och det vill oundvikligen leda till instabila program och kaos.

Så antingen har dina allokeringar samma fasta storlek - och då är det lika bra att allokera dom direkt i källkoden - eller också får du acceptera att minnet kan ta slut i värsta fall.
Men brukar man inte köra Valgrind för att verifiera om det finns minnesläkage?

Så allokering av minne på uC/datorer = instabilt?
Senast redigerad av Al_Bundy 30 januari 2019, 11:43:29, redigerad totalt 1 gång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

bearing skrev:
Jag misstänker att vissa värden blir så stora (e+308) och därmed kan C inte hantera dessa.
e+308 är bara ett tecken på att värdet är på väg mot oändligheten. D.v.s ett symptom på att indatan inte är OK. Och om indatan är OK, är det något problem med algoritmen. Division med ett värde nära noll eller liknande.

Har ingenting med datatypen att göra. I princip allt går att göra med 32-bit float, med extremt hög precision.
QR algoritmen brukar normalt få väldigt höga värden. Så höga att C inte klarar av det. Ja, man delar nära med noll, dvs e-16 typ. Dock inte alla värden.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Lite tillägg!

Här kör jag QR-faktorisering på hankelmatrisen.

Kod: Markera allt

>> function [Q,R] =  mgs(X)
    % Modified Gram-Schmidt.  [Q,R] = mgs(X);
    % G. W. Stewart, "Matrix Algorithms, Volume 1", SIAM, 1998.
    [n,p] = size(X);
    Q = zeros(n,p);
    R = zeros(p,p);
    for k = 1:p
        Q(:,k) = X(:,k);
        for i = 1:k-1
            R(i,k) = Q(:,i)'*Q(:,k);
            Q(:,k) = Q(:,k) - R(i,k)*Q(:,i);
        end
        R(k,k) = -norm(Q(:,k))';
        Q(:,k) = Q(:,k)/R(k,k)
    end
end
>> % Nu ska vi kolla vad Q(:,k) = Q(:,k)/R(k,k) ger för något
>> [q,r] = mgs(H0)
Q =

 Columns 1 through 20:

  -0.60779   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.51594   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.36097   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.31830   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.21421   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.19624   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.12701   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.12092   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.07524   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.07446   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.04453   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.04582   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.02632   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.02818   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.01555   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.01733   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00917   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.01065   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00541   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00654   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00318   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00401   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00187   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00246   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00110   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00151   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00064   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00092   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00038   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00057   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00022   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00035   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00013   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00021   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00007   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00013   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000

 Columns 21 through 36:

   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
warning: broken pipe
>> r % vi kollar r-matrisen
r =

 Columns 1 through 20:

  -1.14231  -0.22964   0.68943   0.14954  -0.41594  -0.09688   0.25084   0.06249  -0.15121  -0.04015   0.09112   0.02571  -0.05488  -0.01641   0.03304   0.01044  -0.01989  -0.00663   0.01196   0.00420
   0.00000  -0.87755  -0.01305   0.53207   0.01583  -0.32248  -0.01439   0.19538   0.01164  -0.11833  -0.00882   0.07164   0.00641  -0.04336  -0.00453   0.02623   0.00314  -0.01586  -0.00214   0.00959
   0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000  -0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000

 Columns 21 through 36:

  -0.00719  -0.00265   0.00432   0.00167  -0.00260  -0.00105   0.00156   0.00066  -0.00094  -0.00042   0.00056   0.00026  -0.00034  -0.00016   0.00020   0.00010
   0.00144  -0.00579  -0.00096   0.00350   0.00063  -0.00211  -0.00042   0.00128   0.00027  -0.00077  -0.00018   0.00046   0.00011  -0.00028  -0.00007   0.00017
   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000   0.00000
  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000  -0.00000  -0.00000  -0.00000   0.00000   0.00000
   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000
  -0.00000   0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000
   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000
  -0.00000   0.00000  -0.00000   0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000
  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000
   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000   0.00000
   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000  -0.00000
  -0.00000   0.00000   0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000   0.00000  -0.00000  -0.00000  -0.00000   0.00000  -0.00000   0.00000  -0.00000
>>
Nu kör jag QR-faktorisering i själva C-koden för mitt bibliotek.

Kod: Markera allt

 // 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);
    qr(H0_half, u, s);
    freeMatrix(H0_half);

    printMatrix(u); // Detta är Q
Resultat för matris u, vilket ska representera q i Octave.
Markering_041.png

Matris s som ska representera matris r i Octave.
Markering_040.png
Som vi ser så bråkar qr.c med mig. Men det lustiga är att om jag väljer helt andra värden att stoppa in, så fungerar det utmärkt! :?: :?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Al_Bundy 30 januari 2019, 12:01:24, redigerad totalt 1 gång.
bearing
Inlägg: 11670
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Matrisberäkningar med för STM32?

Inlägg av bearing »

Om den dividerar med e-16 borde väl resultatet vara ungefär e+16?

Eller är det någon variabel som ökar och ökar i värde för varje varv i loopen? Så att den till slut är nära e+300 och sedan divideras igen med e-16, och passerar max?
(Det var därför jag tidigare föreslog att du skulle stega dig igenom loopen, och titta på hur värdena utvecklar sig. Men det ville du inte såklart.)

Det här är väldigt vanliga problem, att variabler "sticker iväg" mot oändligheten när rekursiva algoritmer körs. Och till slut hamnar på "NaN". Man brukar lösa det delvis genom att sätta ett tak på hur höga värden variabeln kan få, eller hur nära noll en division får ske, ifall värdena börjar "sticka iväg". Och delvis genom att justera några parametrar så att algoritmen inte är lika känslig för att "sticka iväg".
Skriv svar