Därför tror jag att C++ och Armadillo passar STM32 och kan lösa dessa typer av problem. Men då är det ett annat problem jag måste tackla och det är att Armadillo håller också på med minnesallokering. Så om det vore riktigt dåligt att använda minnesallokering på uC, vilket många har påpekat här. Då finns det inget annat alternativ för mig än att köra Java.
Kod: Markera allt
void qr(matrix* a, matrix* q, matrix* r) {
	// Get info about matrix a
	int n = a->row;
	int m = a->column;
	float* ptr = a->data;
	// Get data
	float* ptr_q = q->data;
	float* ptr_r = r->data;
	matrix* c1;
	matrix* c2;
	for(int k = 0; k < m; k++){
		// Insert vector
		for(int j = 0; j < n; j++)
			*((ptr_q + j*n) + k) = *((ptr + j*n) + k);
		// Do the dot product
		for(int i = 0; i < k; i++){
			c1 = cut(q, 0, n-1, i, i);
			c2 = cut(q, 0, n-1, k,k);
			*((ptr_r + i*n)+k) = dot(c1, c2);
			freeMatrix(c1);
			freeMatrix(c2);
			// Insert vector again
			for(int j = 0; j < n; j++)
				*((ptr_q + j*n) + k) = *((ptr_q + j*n) + k) - *((ptr_r + i*n)+k)*(*((ptr_q + j*n) +i));
		}
		c1 = cut(q, 0, n-1, k, k);
		*((ptr_r+k*n)+k) = -norm(c1); // Important with negative
		freeMatrix(c1);
		// Insert vector again
		for(int j = 0; j < n; j++){
			if(*((ptr_r + k*n) + k) ==  0){
				*((ptr_r + k*n) + k) = pow(2.2204, -16); // Same as eps command in MATLAB
			}
			*((ptr_q + j*n) + k) = (*((ptr_q + j*n) + k)) / (*((ptr_r + k*n) + k));
		}
	}
}
/* MATLAB CODE
 * 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(:,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
 */
				