Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void Main(){
- float normMatrix(float**A);
- float**A,**A_,**E,*x,*x_,norm,*f,normMatrix_A;
- int m,n=10,k,i,j;
- void show()
- {
- ofstream fout("out.txt",ios::app);
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<n+1;j++)
- fout<<setw(13)<<A[i][j];
- fout<<endl;
- }
- fout<<endl;
- }
- void Set(int k);
- float normMatrix(float**A)
- {
- float sum=0,temp=0;
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- sum+=fabs(A[i][j]);
- if(sum>temp)
- temp=sum;
- sum=0;
- }
- return temp;
- }
- void normVect()
- {
- ofstream fout("out.txt",ios::app);
- float Norm,sum=0;
- for(i=0;i<n;i++)
- sum+=pow(fabs(x_[i]-x[i]),2);
- Norm=sqrt(sum);
- fout<<"Norm="<<Norm<<endl;
- }
- void Conditionality()
- {
- ofstream fout("out.txt",ios::app);
- float c;
- for(i=1;i<n;i++)
- {
- for(j=i;j<n;j++)
- {
- float c=A_[j][i-1]/A_[i-1][i-1];
- for(k=0;k<=n;k++)
- {
- A_[j][k]-=c*A_[i-1][k];
- E[j][k]-=c*E[i-1][k];
- }
- }
- }
- for(i=n-2;i>=0;i--)
- {
- for(j=i;j>=0;j--)
- {
- float c=A_[j][i+1]/A_[i+1][i+1];
- for(k=n-1;k>=0;k--)
- {
- A_[j][k]-=c*A_[i+1][k];
- E[j][k]-=c*E[i+1][k];
- }
- }
- }
- for(i=0;i<n;i++)
- {
- c=1/A_[i][i];
- A_[i][i]*=c;
- E[i][i]*=c;
- for(j=0;j<n;j++)
- {
- if(i!=j)
- {
- A_[i][j]*=c;
- E[i][j]*=c;
- }
- }
- }
- float condit=normMatrix(E)*normMatrix_A;
- fout<<"The number of conditinality of matrix A = "<<condit<<endl;
- }
- void columnsSwap(int t)
- {
- ofstream fout("out.txt",ios::app);
- double temp=0;
- int k;
- for(int i=t;i<n;i++)
- {
- if(fabs(A[i][t])>=fabs(temp))
- {
- temp=A[i][t];
- k=i;
- }
- }
- if(t==0)
- fout<<"Number of leading element = "<<k+1<<endl;
- for(int temp=t;temp<n+1;temp++)
- swap(A[t][temp],A[k][temp]);
- }
- void PivotingSet()
- {
- m=4;
- n=6;
- srand(10);
- A=new float*[n];
- A_=new float*[n];
- E=new float*[n];
- x=new float[n];
- x_=new float[n];
- f=new float[n];
- for(k=0;k<n;k++)
- {
- x[k]=m;
- m++;
- A[k]=new float[n];
- A_[k]=new float[n];
- for(j=0;j<n+1;j++)
- {
- A[k][j]=rand()%200-100;
- }
- }
- for(k=0;k<n;k++)
- {
- f[k]=0;
- for(j=0;j<n;j++)
- {
- if(k!=j)
- E[k][j]=0;
- else E[k][j]=1;
- f[k]+=A[k][j]*x[j];
- A_[k][j]=A[k][j];
- }
- A[k][n]=f[k];
- }
- show();
- }
- void Gauss(bool pivoting)
- {
- ofstream fout("out.txt",ios::app);
- for(i=1;i<n;i++)
- {
- if(pivoting==true)
- if(i!=n-1)
- {
- columnsSwap(i-1);
- }
- for(k=i;k<n;k++)
- {
- float c=A[k][i-1]/A[i-1][i-1];
- for(j=0;j<=n;j++)
- {
- A[k][j]-=c*A[i-1][j];
- }
- }
- }
- fout<<"Matrix after the 1st step\n";
- show();
- float sum=0;
- for(k=n-1;k>=0;k--)
- {
- for(j=k+1;j<n;j++)
- {
- sum+=A[k][j]*x_[j];
- }
- x_[k]=(1/A[k][k])*(A[k][n]-sum);
- sum=0;
- }
- for(i=0;i<n;i++)
- fout<<x_[i]<<endl;
- fout<<endl;
- }
- cout<<"*************************** TASK 1 ***************************\n";
- Set(0);
- Gauss(false);
- normVect();
- Conditionality();
- Set(3);
- Gauss(false);
- normVect();
- Conditionality();
- cout<<"\n\n*************************** TASK 2 ***************************\n";
- PivotingSet();
- Gauss(true);
- normVect();
- PivotingSet();
- Gauss(false);
- normVect();
- void Set(int k)
- {
- ofstream fout("out.txt",ios::app);
- m=4;
- srand(time(NULL));
- A=new float*[n];
- A_=new float*[n];
- E=new float*[n];
- x=new float[n];
- x_=new float[n];
- f=new float[n];
- fout<<"k="<<k<<endl;
- for(i=0;i<n;i++)
- {
- x[i]=m;
- A[i]=new float[n];
- A_[i]=new float[n];
- E[i]=new float[n];
- A[i][i]=0;
- for(j=0;j<n+1;j++)
- {
- if(j!=i)
- {
- A[i][j]=rand()%5-4;
- A[i][i]+=A[i][j];
- E[i][j]=0;
- }
- else E[i][j]=1;
- if(j==n)
- A[i][j]=x[i];
- }
- if(i==0)
- A[i][i]=A[i][i]-pow(10,(float)-k);
- A[i][i]=-A[i][i];
- m++;
- }
- for(i=0;i<n;i++)
- {
- f[i]=0;
- for(j=0;j<n;j++)
- {
- f[i]+=A[i][j]*x[j];
- A_[i][j]=A[i][j];
- }
- A[i][n]=f[i];
- }
- show();
- normMatrix_A=normMatrix(A);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement