//constructor //note to self: apparetly you can save functions as a array... public olsf(vector x, vector y, vector dy, Func <double, double>[] f) { int len = x.size; int m = f.Length; vector b = new vector(len); matrix A = new matrix(len, m); for (int n = 0; n < len; n++) { b[n] = y[n] / dy[n]; for (int n1 = 0; n1 < m; n1++) { A[n, n1] = f[n1](x[n]) / dy[n]; } //end for } //end for gram_s gr = new gram_s(A); c = gr.solve(b); //coverient matrix: gram_s gr1 = new gram_s(A.T * A); Sigma = gr1.inverse(); vector dc1 = new vector(m); for (int n1 = 0; n1 < m; n1++) { dc1[n1] = Sqrt(Sigma[n1, n1]); } //end for dc = dc1; } //end constructor...
static int Main() { //generating random matrix: matrix A = randmatrix(4, 4); //fortorize into QR: gram_s a1 = new gram_s(A); //calculate inverse: matrix B = a1.inverse(); //AB: matrix ab = A * B; WriteLine("Part B"); WriteLine("Random matrix A:"); for (int i = 0; i < A.size1; i++) { Write("\n"); for (int j = 0; j < A.size2; j++) { Write($"{A[i,j]} "); } } Write("\n \n"); WriteLine("Factorize A into QR, give Q:"); for (int i = 0; i < a1.Q.size1; i++) { Write("\n"); for (int j = 0; j < a1.Q.size2; j++) { Write($"{a1.Q[i,j]} "); } } Write("\n \n"); WriteLine("and R:"); for (int i = 0; i < a1.R.size1; i++) { Write("\n"); for (int j = 0; j < a1.R.size2; j++) { Write($"{a1.R[i,j]} "); } } Write("\n \n"); WriteLine("The inverse B:"); for (int i = 0; i < B.size1; i++) { Write("\n"); for (int j = 0; j < B.size2; j++) { Write($"{B[i,j]} "); } } Write("\n \n"); WriteLine("AB:"); for (int i = 0; i < ab.size1; i++) { Write("\n"); for (int j = 0; j < ab.size2; j++) { Write($"{ab[i,j]} "); } } Write("\n \n"); return(0); }