18 for (i=1;i<=(m-1)/2;i++){
19 respns->
co[n+1-i]=respns->
co[m+1-i];
21 for (i=(m+3)/2;i<=n-(m-1)/2;i++){
24 twofft(data,respns,fft,ans,n);
26 for (i=2;i<=n+2;i+=2) {
28 ans->
co[i-1]=(fft->
co[i-1]*(dum=ans->
co[i-1])-fft->
co[i]*ans->
co[i])/no2*delta_time;
29 ans->
co[i]=(fft->
co[i]*dum+fft->
co[i-1]*ans->
co[i])/no2*delta_time;
30 }
else if (isign == -1) {
31 if ((mag2=
SQR(ans->
co[i-1])+
SQR(ans->
co[i])) == 0.0)
32 t_error(
"Deconvolving at response zero in convlv");
33 ans->
co[i-1]=(fft->
co[i-1]*(dum=ans->
co[i-1])+fft->
co[i]*ans->
co[i])/mag2/no2;
34 ans->
co[i]=(fft->
co[i]*dum-fft->
co[i-1]*ans->
co[i])/mag2/no2;
35 }
else t_error(
"No meaning for isign in convlv");
37 ans->
co[2]=ans->
co[n+1];
41 ans->
co[i]=ans->
co[i];
51 unsigned long n,mmax,m,j,istep,i;
52 float wtemp,wr,wpr,wpi,wi,theta;
63 while (m >= 2 && j > m) {
72 theta=isign*(6.28318530717959/mmax);
74 wpr = -2.0*wtemp*wtemp;
78 for (m=1;m<mmax;m+=2) {
79 for (i=m;i<=n;i+=istep) {
81 tempr=wr*data->
co[j]-wi*data->
co[j+1];
82 tempi=wr*data->
co[j+1]+wi*data->
co[j];
83 data->
co[j]=data->
co[i]-tempr;
84 data->
co[j+1]=data->
co[i+1]-tempi;
86 data->
co[i+1] += tempi;
88 wr=(wtemp=wr)*wpr-wi*wpi+wr;
89 wi=wi*wpr+wtemp*wpi+wi;
102 double aamax,dum,sum;
112 if(fabs(var->
co[i][j])>aamax)aamax=fabs(var->
co[i][j]);
115 printf(
"aamax e' nullo nella riga (%ld)\n",i);
126 sum-=var->
co[i][k]*var->
co[k][j];
134 sum-=var->
co[i][k]*var->
co[k][j];
137 dum=vv->
co[i]*fabs(sum);
145 dum=var->
co[imax][i];
146 var->
co[imax][i]=var->
co[j][i];
149 vv->
co[imax]=vv->
co[j];
152 if(var->
co[j][j]==0){
154 printf(
"var e' nullo\n");
158 dum=1.0/var->
co[j][j];
179 gam->
co[k]=gam->
co[i];
182 for(j=ii;j<=i-1;j++){
183 sum-=var->
co[i][j]*gam->
co[j];
194 sum-=var->
co[i][j]*gam->
co[j];
196 gam->
co[i]=sum/var->
co[i][i];
204 unsigned long i,i1,i2,i3,i4,np3;
205 float c1=0.5,c2,h1r,h1i,h2r,h2i;
206 float wr,wi,wpr,wpi,wtemp,theta;
208 theta=3.141592653589793/(float) (n>>1);
216 wtemp=sin(0.5*theta);
217 wpr = -2.0*wtemp*wtemp;
222 for (i=2;i<=(n>>2);i++) {
223 i4=1+(i3=np3-(i2=1+(i1=i+i-1)));
224 h1r=c1*(data->
co[i1]+data->
co[i3]);
225 h1i=c1*(data->
co[i2]-data->
co[i4]);
226 h2r = -c2*(data->
co[i2]+data->
co[i4]);
227 h2i=c2*(data->
co[i1]-data->
co[i3]);
228 data->
co[i1]=h1r+wr*h2r-wi*h2i;
229 data->
co[i2]=h1i+wr*h2i+wi*h2r;
230 data->
co[i3]=h1r-wr*h2r+wi*h2i;
231 data->
co[i4] = -h1i+wr*h2i+wi*h2r;
232 wr=(wtemp=wr)*wpr-wi*wpi+wr;
233 wi=wi*wpr+wtemp*wpi+wi;
236 data->
co[1] = (h1r=data->
co[1])+data->
co[2];
237 data->
co[2] = h1r-data->
co[2];
239 data->
co[1]=c1*((h1r=data->
co[1])+data->
co[2]);
240 data->
co[2]=c1*(h1r-data->
co[2]);
251 unsigned long nn3,nn2,jj,j;
253 float rep,rem,aip,aim;
259 for (j=1,jj=2;j<=n;j++,jj+=2) {
261 fft1->
co[jj-1]=data1->
co[j];
263 fft1->
co[jj]=data2->
co[j];
269 fft2->
co[1]=fft1->
co[2];
271 fft1->
co[2]=fft2->
co[2]=0.0;
273 for (j=3;j<=n+1;j+=2) {
275 rep=0.5*(fft1->
co[j]+fft1->
co[nn2-j]);
277 rem=0.5*(fft1->
co[j]-fft1->
co[nn2-j]);
279 aip=0.5*(fft1->
co[j+1]+fft1->
co[nn3-j]);
281 aim=0.5*(fft1->
co[j+1]-fft1->
co[nn3-j]);
289 fft1->
co[nn3-j] = -aim;
293 fft2->
co[j+1] = -rem;
378 {
for (j=1; j<=n; j++) A->
co[i][j]=0; }
381 A->
co[n][n-1]=di[n-1];
383 for (i=1; i<=n; i++) A->
co[i][i]=d[i];
384 for (i=2; i<=n-1; i++)
387 A->
co[i][i-1]=di[i-1];
414 void sprsin(
double **a,
int n,
float thresh,
long nmax,
double sa[],
420 for (j=1;j<=n;j++) sa[j]=a[j][j];
425 if (fabs(a[i][j]) > thresh && i != j) {
426 if (++k > nmax)
t_error(
"sprsin: nmax too small");
579 double snrm(
long n,
double sx[],
int itol)
586 for (i=1;i<=n;i++) ans += sx[i]*sx[i];
591 if (fabs(sx[i]) > fabs(sx[isamax])) isamax=i;
593 return fabs(sx[isamax]);
615 void atimes(
long n,
double x[],
double r[],
int itrnsp,
double sa[],
long ija[])
617 void dsprsax(
double sa[],
long ija[],
double x[],
double b[],
619 void dsprstx(
double sa[],
long ija[],
double x[],
double b[],
622 if (itrnsp)
dsprstx(sa,ija,x,r,n);
635 void asolve(
long n,
double b[],
double x[],
double sa[])
639 for(i=1;i<=n;i++) x[i]=(sa[i] != 0.0 ? b[i]/sa[i] : b[i]);
654 void dsprsax(
double sa[],
long ija[],
double x[],
double b[],
long n)
658 if (ija[1] != n+2)
t_error(
"dsprsax: mismatched vector and matrix");
661 for (k=ija[i];k<=ija[i+1]-1;k++) b[i] += sa[k]*x[ija[k]];
677 void dsprstx(
double sa[],
long ija[],
double x[],
double b[],
long n)
680 if (ija[1] != n+2)
t_error(
"mismatched vector and matrix in dsprstx");
681 for (i=1;i<=n;i++) b[i]=sa[i]*x[i];
683 for (k=ija[i];k<=ija[i+1]-1;k++) {
699 float x=0.0,tnm=0.0,sum=0.0,del=0.0;
703 return (s=0.5*(b-a)*(func(a)+func(b)));
705 for (it=1,j=1;j<n-1;j++) {
713 for (sum=0.0,s=0.0,j=1;j<=it;j++,x+=del) {