diff --git a/Mex/a21.cpp b/Mex/a21.cpp index 905870c..4f3b314 100644 --- a/Mex/a21.cpp +++ b/Mex/a21.cpp @@ -46,11 +46,12 @@ void mexFunction(int nlhs, mxArray *plhs[], // Output variables x[i] = x[i] - GA[i][j] * x[j]; x[i] = x[i] / GA[i][i]; //now finally divide the rhs by the coefficient of the variable to be calculated } - + nlhs = variables; for(int j=0; j < variables; j++){ plhs[j]=mxCreateDoubleScalar(x[j]); } + for (int i = 0; i <= variables; i++ ){ free(GA[i]); } diff --git a/Mex/a40.cpp b/Mex/a40.cpp new file mode 100644 index 0000000..4a5585d --- /dev/null +++ b/Mex/a40.cpp @@ -0,0 +1,91 @@ +#include "mex.h" +#include "matrix.h" +#include "stdlib.h" + +void mexFunction(int nlhs, mxArray *plhs[], // Output variables + int nrhs, const mxArray *prhs[]) // Input variables +{ + int variables = *mxGetPr(prhs[0]); + + double* x = (double *)mxCalloc(variables+1, sizeof(double)); //create solution array + + double** GA = (double **)mxCalloc(variables+1, sizeof(double*)); //create Gauss Array (GA) + for (int i = 0; i <= variables+1; i++){ + GA[i] = (double *)mxCalloc(variables+1, sizeof(double)); + } + + for(int i = 0; i < variables*(variables+1); i++){ //copy input array into GA + GA[i%variables][i/variables] = mxGetPr(prhs[1])[i]; + } + + + int i, j, k; + for (i = 0; i= 0; i--) //back-substitution + { //x is an array whose values correspond to the values of x,y,z.. + x[i] = GA[i][variables]; //make the variable to be calculated equal to the rhs of the last equation + for (j = i + 1; j