Шустрый

Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.9.2004
Репутация: нет Всего: нет
|
Я написала програмку на С++, но как ее распараллелить под UNIX не понимаю, если кто знает помогите пожалуйста! Код | #include <stdio.h> #include <time.h> #include <stdlib.h> #include <iostream.h> #include <conio.h> #include <fstream.h> #include <math.h>
void RowMultiplyNumber(double a[],int n,int m,int k,double Number) { register int i; for(i=0;i<m;i++,k+=n) a[k]*=Number; }
void RowInterchange(double a[],int n,int m,int k,int l) { register int i; double save; for(i=0;i<m;i++,k+=n,l+=n) { save = a[k]; a[k]=a[l]; a[l]=save; } }
void ArrayToArray(double x[],double y[],int n) { for(register int i=0;i<n;i++) y[i]=x[i]; }
int SimpleIteration(double a[],double b[],double x[],int n,double Esp,int *Max) { register int i,j; int Iter=0,Code=0,End,i1,m; double *x1,Maximum,Probe,Sign;
for(i=0;i<n-1;i++) { m=i*n+i; i1=i; Maximum=fabs(a[m]); Sign= a[m] >= 0 ? 1 : -1; for(j=i+1;j<n;j++) { Probe = fabs(a[++m]); if(Maximum<Probe) { i1=j; Maximum=Probe; Sign = a[m] >= 0 ? 1 : -1; } } if(Maximum == 0) return -3; if(Sign==-1) { RowMultiplyNumber(a,n,n,i1,Sign); b[i1]*=Sign; } if(i!=i1) { RowInterchange(a,n,n,i,i1); RowInterchange(b,n,n,i,i1); } } if((x1=new double[n])==0) return -1; do { for(i=0;i<n;i++) { x1[i]=0; for(j=0,m=i;j<n;j++,m+=n) x1[i] +=a[m]*x[j]; if(a[i*n+1]==0)a[i*n+1]=0.01; x1[i] = x[i]-(x1[i]-b[i])/a[i*n+i]; } if(++Iter>*Max) { Code=-2; break; } for(i=0,End=0;i<n;i++) if(fabs(x1[i]-x[i])>Esp) { End=1; break; }
ArrayToArray (x1,x,n); }while(End==1); delete [] x1; *Max = Iter-1; return Code; }
int main() { do { double A[5][5]; double B[5][5]; double K[5]; double H[5][5]; double L[9]; int MaxIter=100; int n=4; int i=0,j=0,m=0; clrscr(); srand(time(NULL)); printf("na4al'naia matrix:\n"); for(i=0;i<=n-1;i++)//zapolnenie i vivod na4al'noi matrix { for(j=0;j<=n-1;j++) { H[i][j]=rand()%10; A[i][j]=H[i][j]; printf("%lf\t",H[i][j]); } printf("\n"); } printf("\n"); L[0]=1; L[1]=-A[0][0]-A[1][1]-A[2][2]-A[3][3]; L[2]=-A[2][3]*A[3][2]+A[2][2]*A[0][0]+A[3][3]*A[0][0]-A[3][1]*A[1][3]+A[1][1]*A[2][2]+A[1][1]*A[0][0]+A[2][2]*A[3][3]-A[2][1]*A[1][2]+A[1][1]*A[3][3]-A[1][0]*A[0][1]-A[3][0]*A[0][3]-A[2][0]*A[0][2]; L[3]=-A[1][1]*A[3][3]*A[0][0]+A[1][0]*A[0][1]*A[3][3]-A[1][1]*A[2][2]*A[3][3]-A[3][1]*A[1][2]*A[2][3]-A[2][0]*A[0][3]*A[3][2]-A[2][1]*A[1][3]*A[3][2]+A[1][0]*A[0][1]*A[2][2]+A[2][0]*A[0][2]*A[3][3]-A[1][0]*A[3][1]*A[0][3]+A[2][0]*A[1][1]*A[0][2]+A[3][0]*A[1][1]*A[0][3]+A[2][1]*A[1][2]*A[3][3]-A[1][0]*A[2][1]*A[0][2]+A[2][3]*A[3][2]*A[0][0]+A[2][1]*A[1][2]*A[0][0]-A[2][2]*A[3][3]*A[0][0]+A[3][1]*A[1][3]*A[2][2]-A[2][0]*A[0][1]*A[1][2]+A[3][1]*A[1][3]*A[0][0]-A[1][1]*A[2][2]*A[0][0]-A[3][0]*A[0][2]*A[2][3]+A[3][0]*A[0][3]*A[2][2]-A[3][0]*A[0][1]*A[1][3]+A[1][1]*A[2][3]*A[3][2]; L[4]=A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[0][1]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[1][1]*A[2][3]*A[3][2]*A[0][0]-A[2][1]*A[1][2]*A[3][2]*A[0][0]+A[2][1]*A[1][3]*A[3][2]*A[0][0]+A[3][1]*A[1][2]*A[2][3]*A[0][0]-A[3][1]*A[1][3]*A[2][2]*A[0][0]+A[1][1]*A[2][2]*A[3][3]*A[0][0]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]-A[2][0]*A[3][1]*A[0][3]*A[1][2]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]+A[3][0]*A[1][1]*A[0][2]*A[2][3]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[3][1]*A[1][1]*A[0][2]*A[3][3]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2]; printf("%lf%lf%lf%lf%lf\n",L[0],L[1],L[2],L[3],L[4]); j=0; for(i=-100;i<100;i++) { if((((i-1)*(i-1)*(i-1)*(i-1)*L[0]+L[1]*(i-1)*(i-1)*(i-1)+L[2]*(i-1)*(i-1)+L[3]*(i-1)+L[4]>0) && (i*i*i*i*L[0]+L[1]*i*i*i+L[2]*i*i+L[3]*i+L[4]<0)) || (((i-1)*(i-1)*(i-1)*(i-1)*L[0]+L[1]*(i-1)*(i-1)*(i-1)+L[2]*(i-1)*(i-1)+L[3]*(i-1)+L[4]<0) && (i*i*i*i*L[0]+L[1]*i*i*i+L[2]*i*i+L[3]*i+L[4]>0))) { K[j]=i; j++; if(j==5) break; printf("i%lf\n",i); }
}
for(m=j;m>0;m--) { int p=0; double a[16]; for (j=0;j<4;j++) {for (i=0;i<4;i++) {a[p]=A[i][j]; p++; } } //reshenie sistemi yravnenii! MaxIter=100; double b[]={ 0,0,0,0}, x[]={ 0.1,0.1,0.1,0.1}; printf("return code= %lf",SimpleIteration(a,b,x,n,0.000001,&MaxIter)); printf("\n Maximum of iteration = %lf\n",MaxIter); for(i=0;i<n;i++) printf("%lf\n",x[i]);
} delete []A; delete []B; delete []H; }while(getch()!=27); return 0;
}
|
|