📄 sor.txt
字号:
#include<stdio.h>
int address(double a[],int i,int j,int m,int n,int flag)
{
//fetch a[i][j],flag = 1 表示按列优先,flag = 其他 表示按行优先
//m,n表示二唯数组的行数和列数
if( 1 == flag )
{
return j * m + i ;
}
else
{
return i * n + j;
}
}
int sor(double A[],int m,int n,int flag,double X[],double b[],
double x0[],double w,double eps,int MAX)
/*
输入:
A*X=b,
A ---系数矩阵,用一唯数组表示
m ---系数矩阵的行数 要求 m = n
n ---系数矩阵的列数 要求 m = n
flag- 1 表示系数矩阵按列优先存储,其他表示按行优先存储
X ---返回的结果
b ---方程组的右边
x0---初始值,
w ---松弛因子
eps--精度
MAX--最大迭代次数
---------------------------------------------------------
输出:
1---表示成功返回
0---表示不成功,迭代不收敛
*/
{
int i,j,step;
double e,temp;
double *tX = new double[n];
for(i=0;i<n;i++) X[i] = x0[i];
step = 1;
while(step < MAX)
{
e = 0.0;
for(i=0;i<n;i++)
{
temp = tX[i]-X[i];
temp = temp ? -temp : temp > 0;
if( e < temp ) e = temp;
tX[i] = X[i];
}
if(e<eps) break;
for(i=0;i<n;i++)
{
temp = 0.0;
X[i] = tX[i] + w*b[i]/A[ address(A,i,i,m,n,flag) ];
for(j=0 ; j<i ; j++)
{
temp += A[ address(A,i,j,m,n,flag) ] * X[j];
}
for(j=i ; j<n ; j++)
{
temp += A[ address(A,i,j,m,n,flag) ] * tX[j];
}
X[i] = X[i] - temp * w / A[ address(A,i,i,m,n,flag) ];
}
step++;
}
if(e <= eps) return 1;
else return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -