November 13, 2014
Convert norm Matlab Function to C
When use Matlab, I have use “norm” function. I have created a simple C code to convert this norm Matlab function. Please look code below :
#include #include #define ABS(a) (((a) < (0)) ? (-a) : (a)) double norm(double *x, int nx, char *p) { double xout; double tmp1; double dp; int btype, i; if (strcmp(p, "inf") == 0) { dp = 0.0; btype = -1; xout = ABS(x[0]); } else if (strcmp(p, "-inf") == 0) { dp = 0.0; btype = -2; xout = ABS(x[0]); } else if (strcmp(p, "fro") == 0) { dp = 2.0; btype = 1; xout = 0.0; } else { sscanf(p, "%lf", &dp); btype = 2; xout = 0.0; } for (i=0; i<nx; i++) { tmp1 = ABS(x[i]); if(btype==-1) //inf type { if (xout < tmp1) xout = tmp1; } else if(btype==-2) //-inf type { if (xout > tmp1) xout = tmp1; } else //double input p xout = xout + pow(tmp1, dp); } if(dp>0) xout = pow(xout, 1.0 / dp); return(xout); } int main(int argc, char **argv) { double A[] = {5, 6, 1, 5, 4, 6}; int nA = 6; //size of vector ABS double b1 = norm(A, nA, "2"); double b2 = norm(A, nA, "10"); double b3 = norm(A, nA, "inf"); double b4 = norm(A, nA, "fro"); printf("norm(A,2) = %lf \n", b1); printf("norm(A,10) = %lf \n", b2); printf("norm(A,'inf') = %lf \n", b3); printf("norm(A,'fro') = %lf \n", b4); return(0); }
Save code C norm code above with name norm.c. Please compile C norm code with command :
gcc norm.c -o norm
Below is testing C norm code result :
C:\temp>norm.exe norm(A,2) = 11.789826 norm(A,10) = 6.532499 norm(A,'inf') = 6.000000 norm(A,'fro') = 11.789826
If you check using Matlab, you will get same result from my C Norm code.