/* nag_wav_dim1_init (c09aac) Example Program. * * Copyright 2025 Numerical Algorithms Group. * * Mark 31.1, 2025. */ /* Pre-processor includes */ #include<math.h> #include<nag.h> #include<stdio.h> #include<string.h> intmain(void){ /* Constants */ Integerlicomm=100; /*Integer scalar and array declarations */ Integerexit_status=0; Integeri,n,nf,nnz,nwc,nwlmax,ny; Integer*dwtlev=0,*icomm=0; NagErrorfail; Nag_Waveletwavnamenum; Nag_WaveletModemodenum; /*Double scalar and array declarations */ double*c=0,*x=0,*y=0; /*Character scalar and array declarations */ charmode[24],wavnam[20]; INIT_FAIL(fail); printf("nag_wav_dim1_init (c09aac) Example Program Results\n\n"); fflush(stdout); /* Skip heading in data file */ scanf("%*[^\n] "); /* Read n - length of input data sequence */ scanf("%"NAG_IFMT"%*[^\n] ",&n); if(!(x=NAG_ALLOC(n,double))||!(y=NAG_ALLOC(n,double))|| !(icomm=NAG_ALLOC(licomm,Integer))){ printf("Allocation failure\n"); exit_status=-1; gotoEND; } /* Read Wavelet name (wavnam) and end mode (mode) */ scanf("%19s%23s%*[^\n] ",wavnam,mode); /* * nag_enum_name_to_value (x04nac). * Converts NAG enum member name to value */ wavnamenum=(Nag_Wavelet)nag_enum_name_to_value(wavnam); modenum=(Nag_WaveletMode)nag_enum_name_to_value(mode); if(n>=2){ printf(" Parameters read from file :: \n"); printf(" Wavelet :%15s\n",wavnam); printf(" End mode :%15s\n",mode); printf(" N :%15"NAG_IFMT"\n\n",n); /* Read data array and write it out */ printf("%s\n"," Input Data X :"); for(i=0;i<n;i++){ scanf("%lf ",&x[i]); printf("%8.3f%s",x[i],(i+1)%8?" ":"\n"); } scanf("%*[^\n] "); printf("\n"); /* * nag_wav_dim1_init (c09aac) * Wavelet filter query */ nag_wav_dim1_init(wavnamenum,Nag_MultiLevel,modenum,n,&nwlmax,&nf, &nwc,icomm,&fail); if(fail.code!=NE_NOERROR){ printf("Error from nag_wav_dim1_init (c09aac).\n%s\n",fail.message); exit_status=1; gotoEND; } if(!(c=NAG_ALLOC(nwc,double))|| !(dwtlev=NAG_ALLOC(nwlmax+1,Integer))){ printf("Allocation failure\n"); exit_status=-1; gotoEND; } /* Perform Discrete Wavelet transform */ /* * nag_wav_dim1_multi_fwd (c09ccc) * one-dimensional multi-level discrete wavelet transform (mldwt) */ nag_wav_dim1_multi_fwd(n,x,nwc,c,nwlmax,dwtlev,icomm,&fail); if(fail.code!=NE_NOERROR){ printf("Error from nag_wav_dim1_multi_fwd (c09ccc).\n%s\n",fail.message); exit_status=1; gotoEND; } printf(" Length of wavelet filter : %10"NAG_IFMT"\n",nf); printf(" Number of Levels : %10"NAG_IFMT"\n", nwlmax); printf(" Number of coefficients in each level : \n"); for(i=0;i<nwlmax+1;i++) printf(" %8"NAG_IFMT"%s",dwtlev[i],(i+1)%8?" ":"\n"); printf("\n"); printf(" Total number of wavelet coefficients :%10"NAG_IFMT"\n",nwc); nnz=0; for(i=0;i<nwlmax+1;i++) nnz=nnz+dwtlev[i]; printf("\n"); printf(" Wavelet coefficients C : \n"); for(i=0;i<nnz;i++) printf("%8.3f%s",c[i],(i+1)%8?" ":"\n"); printf("\n"); /* Reconstruct original data */ ny=n; /* * nag_wav_dim1_multi_inv (c09cdc) * one-dimensional inverse multi-level discrete wavelet transform * (imldwt) */ nag_wav_dim1_multi_inv(nwlmax,nwc,c,n,y,icomm,&fail); if(fail.code!=NE_NOERROR){ printf("Error from nag_wav_dim1_multi_inv (c09cdc).\n%s\n",fail.message); exit_status=1; gotoEND; } printf("\n"); printf(" Reconstruction Y : \n"); for(i=0;i<ny;i++) printf("%8.3f%s",y[i],(i+1)%8?" ":"\n"); } END: NAG_FREE(c); NAG_FREE(dwtlev); NAG_FREE(x); NAG_FREE(y); NAG_FREE(icomm); returnexit_status; }