课题一 解线性方程组的直接解法
实验目标:
2 -3 -1
6 -5 -3
2 -2 -1
给定几个不同的线性方程组,请用适当的直接法求解。
(1) 4
2
8
6
4
3
0 -2
5 -1
-4 2
6
8
7 17
0
2
16 10 -11 9 17 34
4
9
0
0
1
0
0
5
0
0
1
2 -1
3
0
3 -1
9
1
7 -3
3
2
6 -3
2
5
3
0
2 -1
2
0 12
2
8 -3 -24 -8
6
0
0
1
4
3
5
1
2
4
3 -1
1
6 -1
5
3 -4
6 -8
2 -1
6
2 -7 13
0 -1
右端项=
5
12
3
2
3
46
13
38
19
-21
Gauss 消去法:
#include
#include
using namespace std;
int i,j,k;
int Array(double ***Arr, int n){
double **p;
int i;
p=(double **)malloc(n*sizeof(double *));
if(!p)return 0;
for(i=0;i>n;
p[i]=(double *)malloc(n*sizeof(double));
for(i=0;i>matrix[i][j];
}
}
cout<<"请输入右端项:"<>B[i];
}
double *X;
X= new double[n];
for( k = 0; k < n-1 ;k++)
{
for(i = k+1; idouble T = matrix[i][k]/matrix[k][k];
double Temp = 0;
B[i] = B[i] - T * B[k];
for (int j = i+1; j
=0 ; i--)
{
Gauss 列主元消去法:
#include
#include
using namespace std;
int i,j,k;
cout << "线性方程组的解(X1,X2,X3......Xn)
为:"<>n;
if(!Array(&matrix,n))
cout<<"内存分配失败!";
else
cout<<"请输入矩阵"<>matrix[i][j];
}
}
cout<<"请输入右端项:"<>B[i];
}
double *X;
X= new double[n];
{
}
*Arr=p;
return 1;
}
void main(){
double **matrix;
int n;
int index = k;
for(i = k; i< n ;i++)
{
if(matrix[index][k] temp = matrix[index][i];
}
matrix[index][i] = matrix[k][i];
X[n-1] =
B[n-1]/matrix[n-1][n-1];
matrix[k][i] = temp;
for (i = n-2; i >=0 ; i--)
}
temp = B[index];
B[index] = B[k];
B[k] = temp;
for(i = k+1; i
#include
using namespace std;
int i,j,k;
//计数器
int M = 2000;
int Array(double ***Arr, int n){
double **p;
int i;
B = new double[n];
for(i=0;i
>B[i];
p[i]=(double *)malloc(n*sizeof(double));
if (fabs(matrix[i][i]) < eps)
if(!p[i])return 0;
if(!p)return 0;
for(i=0;i>eps;
double **matrix;
int n;
cout<<"矩阵大小为:";
cin>>n;
double *X;
X= new double[n];
double *Y;
Y= new double[n];
double *G;
G= new double[n];
for(i=0;i>matrix[i][j];
}
}
cout<<"请输入右端项:"<for( i = 0; i < n ;i++)
方程组的解(X1,X2,X3......Xn)为:"<
#include
using namespace std;
int i,j,k;
//计数器
int M = 2000;
int Array(double ***Arr, int n){
double **p;
int i;
p=(double **)malloc(n*sizeof(double *));
if(!p)return 0;
for(i=0;i>eps;
double **matrix;
int n;
cout<<"矩阵大小为:";
cin>>n;
double *X;
X= new double[n];
double *Y;
{
}
*Arr=p;
return 1;
}
void main()
p[i]=(double *)malloc(n*sizeof(double));
Y= new double[n];
if(!p[i])return 0;
double *G;
G= new double[n];
for(i=0;i//迭̨¹代䨲
for (i = 0;i < n; i++)
{
}
double temp = 0;
for (j = 0;j>matrix[i][j];
}
}
cout<<"请输入右端项:"<>B[i];
}
for (i = 0 ;i< n;i++)
{
}
{
}
matrix[i][i] = 0;
G[i] = B[i]/T;
int counter = 0;
while (counter < M)
{
SOR 迭代法:
#include
#include
using namespace std;
int i,j,k;
//计数器
int M = 2000;
int Array(double ***Arr, int n){
double **p;
int i;
cin>>n;
double *X;
X= new double[n];
double *Y;
Y= new double[n];
double *G;
G= new double[n];
p=(double **)malloc(n*sizeof(double *));
for(i=0;i>matrix[i][j];
}
}
cout<<"默认最多迭代次数为2000次"<>eps;
double **matrix;
int n;
cout<<"矩阵大小为:";
double *B;
B = new double[n];
for(i=0;i>B[i];
}
for (i = 0 ;i< n;i++)
if (fabs(matrix[i][i]) < eps)
for (i = 0 ;i< n ; i++)
{
}
{
}
cout <<"打印失败"<