#include #include /* for veriaty of formations of xi */ /* normalization to x1 */ normalization_x1(xhong,nxhong,ndata,x,nx) double *xhong,**x; int *nxhong,*nx,*ndata; { double xtemp; int i,k; double *vector(); printf("in normalizationx1: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in normalizationx1: i=%d, k=%d\n",i,k); printf("in normalizationx1: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(xhong+i*(*nxhong)+k)); } } if(*nxhong == 2) { *nx=1; *x = vector(*nx*(*ndata)); for(i=0;i<(*ndata);i++) { xtemp=*((xhong)+i*(*nxhong)); *((*x)+i*(*nx))=*((xhong)+i*(*nxhong)+1)/xtemp; printf("x[%d]=%10.4f\n",i,*(*x+i*(*nx))); } } if(*nxhong == 3) { *nx=2; *x = vector(*nx*(*ndata)); for (i=0;i<*ndata;i++) { xtemp=*((xhong)+i*(*nxhong)); *((*x)+i*(*nx))=*((xhong)+i*(*nxhong)+1)/xtemp; *((*x)+i*(*nx)+1)=*((xhong)+i*(*nxhong)+2)/xtemp; printf("x[%d]=%10.4f, x[%d]=%10.4f\n",i*(*nx),*(*x+i*(*nx)), i*(*nx)+1,*(*x+i*(*nx)+1)); } } } /* normalization to x2 */ normalization_x2(xhong,nxhong,ndata,x,nx) double **xhong,**x; int *nxhong,*nx,*ndata; { double xtemp; int i,k; double *vector(); printf("in normalizationx1: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in normalizationx1: i=%d, k=%d\n",i,k); printf("in normalizationx1: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(*xhong+i*(*nxhong)+k)); } } if(*nxhong == 2) { *nx=1; *x = vector(*nx*(*ndata)); for(i=0;i<(*ndata);i++) { xtemp=*((*xhong)+i*(*nxhong)+1); *((*x)+i*(*nx))=*((*xhong)+i*(*nxhong))/xtemp; printf("x[%d]=%10.4f\n",i,*(*x+i*(*nx))); } } if(*nxhong == 3) { *nx=2; *x = vector(*nx*(*ndata)); for (i=0;i<*ndata;i++) { xtemp=*((*xhong)+i*(*nxhong)+1); *((*x)+i*(*nx))=*((*xhong)+i*(*nxhong))/xtemp; *((*x)+i*(*nx)+1)=*((*xhong)+i*(*nxhong)+2)/xtemp; printf("x[%d]=%10.4f, x[%d]=%10.4f\n",i*(*nx),*(*x+i*(*nx)), i*(*nx)+1,*(*x+i*(*nx)+1)); } } } /* NDVI form */ ndvi(xhong,nxhong,ndata,x,nx) double **xhong,**x; int *nxhong,*nx,*ndata; { double xtemp1,xtemp2; int i,k; double *vector(); /* check input existance printf("in ndvi: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in ndvi: i=%d, k=%d\n",i,k); printf("in ndvi: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(*xhong+i*(*nxhong)+k)); } } */ *nx=1; *x = vector(*nx*(*ndata)); if(*nxhong == 2) { for(i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+1); xtemp2= *((*xhong)+i*(*nxhong)); *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } if(*nxhong == 3) { for (i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+2); xtemp2= *((*xhong)+i*(*nxhong)) +(*((*xhong)+i*(*nxhong)+1)); *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } } /* intensity NDVI form */ ndvi_intensity(xhong,nxhong,ndata,x,nx) double **xhong,**x; int *nxhong,*nx,*ndata; { double xtemp1,xtemp2; int i,k; double *vector(); /* check input existance printf("in ndvi: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in ndvi: i=%d, k=%d\n",i,k); printf("in ndvi: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(*xhong+i*(*nxhong)+k)); } } */ *nx=1; *x = vector(*nx*(*ndata)); if(*nxhong == 2) { for(i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+1); xtemp1 = xtemp1/0.1; xtemp2= *((*xhong)+i*(*nxhong)); xtemp2=xtemp2/0.07; *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } if(*nxhong == 3) { for (i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+2); xtemp1 = xtemp1/0.1; xtemp2= *((*xhong)+i*(*nxhong)) +(*((*xhong)+i*(*nxhong)+1)); xtemp2=xtemp2/0.16; *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } } /* reflectance NDVI form */ ndvi_reflectance(xhong,nxhong,ndata,x,nx) double **xhong,**x; int *nxhong,*nx,*ndata; { double xtemp1,xtemp2; int i,k; double *vector(); /* check input existance printf("in ndvi: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in ndvi: i=%d, k=%d\n",i,k); printf("in ndvi: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(*xhong+i*(*nxhong)+k)); } } */ *nx=1; *x = vector(*nx*(*ndata)); if(*nxhong == 2) { for(i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+1); xtemp1=xtemp1/331.0; xtemp2= *((*xhong)+i*(*nxhong)); xtemp2=xtemp2/502.0; *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } if(*nxhong == 3) { for (i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+2); xtemp1 /= 331.0; xtemp2= *((*xhong)+i*(*nxhong)) +(*((*xhong)+i*(*nxhong)+1)); xtemp2 /= 1089.0; *((*x)+i)=(xtemp1-xtemp2) /(xtemp1+ xtemp2); printf("x[%d]=%10.4f\n",i,*(*x+i)); } } } /* relaxation vegetation index form */ rvi(xhong,nxhong,ndata,x,nx) double **xhong,**x; int *nxhong,*nx,*ndata; { double xtemp1,xtemp2; int i,k; double *vector(); /* check input existance */ printf("in rvi: ndata=%d,nxhong=%d\n",*ndata,*nxhong); for(i=0;i<(*ndata);i++) { for(k=0;k<*nxhong;k++) { printf("in rvi: i=%d, k=%d\n",i,k); printf("in rvi: xhong[%d]=%10.4f\n",i*(*nxhong)+k, *(*xhong+i*(*nxhong)+k)); } } *nx=2; *x = vector(*nx*(*ndata)); if(*nxhong == 2) { for(i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+1); xtemp2= *((*xhong)+i*(*nxhong)); *((*x)+i*2)=xtemp2 /(xtemp1+ xtemp2); *((*x)+i*2+1)=xtemp1 /(xtemp1+ xtemp2); printf("x[%d]=%10.4f,x[%d]=%10.4f\n", i*2,*(*x+i*2),i*2+1,*(*x+i*2+1)); } } if(*nxhong == 3) { for (i=0;i<*ndata;i++) { xtemp1= *((*xhong)+i*(*nxhong)+2); xtemp2= *((*xhong)+i*(*nxhong)) +(*((*xhong)+i*(*nxhong)+1)); *((*x)+i*2)=xtemp2 /(xtemp1+ xtemp2); *((*x)+i*2+1)=xtemp1 /(xtemp1+ xtemp2); printf("x[%d]=%10.4f,x[%d]=%10.4f\n", i*2,*(*x+i*2),i*2+1,*(*x+i*2+1)); } } } /* linearization method for non_linear problem */ nonlinear_linearization(xhong,nxhong,ndata,y,a, lina,table1) double **xhong,**y,**a,**lina; int *nxhong,*ndata; struct table *table1; { FILE *curve_residual_x1; FILE *curve_residual_x2; FILE *curve_residual_x3; FILE *curve_residual_y; FILE *y_y; double p,q,q2,*newa,*linx,*liny,*sigma,*ta,*da; double ssresid,ym,*epsilon,ff,sigma1,*y2,ssto,rr2,rrr,*residuals; double *x,test,eps1,eps2,standard_residual,standard_variance; double standard_residual_old,r,t; int i,nx,na,ka,ma,ndatalin,j,k; double datan; double **u,**v,*w; void function(); double **matrix(); double *vector(); curve_residual_x1 = fopen ("non.residual_x1", "w"); curve_residual_x2 = fopen ("non.residual_x2", "w"); curve_residual_x3 = fopen ("non.residual_x3", "w"); curve_residual_y = fopen ("non.residual_y", "w"); y_y = fopen ("non.y_y", "w"); nx=(*nxhong)*2; na=nx+1; ndatalin=*ndata; linx=vector(nx*ndatalin); liny=vector(ndatalin); *lina=vector(na); ta=vector(na); da=vector(na); newa=vector(na); u=matrix(ndatalin,na); v=matrix(na,na); w=vector(na); y2=vector(ndatalin); epsilon=vector(ndatalin); residuals=vector(ndatalin); printf("input a:%6.2f, %6.2f, %6.2f, %6.2f, %6.2f, %6.2f, %6.2f\n", *(*a+0),*(*a+1),*(*a+2),*(*a+3),*(*a+4),*(*a+5),*(*a+6)); for(i=0;i standard_residual_old) for(i=0;i standard_residual_old) for(i=0;i