- 简单迭代法
就是将一个线性方程组Ax=b等价变形为x=Bx+g,由此建立迭代公式$x^{(k+1)}=Bx^{(k)}+g$,取初始向量$x^0$,进行迭代。编写程序需要写几个函数:矩阵乘向量,向量相加。以下程序打印矩阵B和向量g,并打印迭代过程中每一步的x值。
void printMatrix(double *matrix, int row, int column) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("%6.2lf ", *(matrix + i * column + j));
}
printf("\n");
}
}
void printVector(double *matrix, int len) {
for (int i = 0; i < len; i++) {
printf("%6.2lf ", *(matrix + i));
}
printf("\n");
}
double* MatrixMultiVector(double* matrix, int row, int column, double* vector) {
double* result = new double[row];
for (int i = 0; i < row; i++) {
*(result + i) = 0;
for (int j = 0; j < column; j++) {
*(result + i) -= *(matrix + i * row + j) * (*(vector + j));
}
}
return result;
}
void vectorAdd(double* vector1, double* vector2, int len) {
for (int i = 0; i < len; i++) {
*(vector1 + i) += *(vector2 + i);
}
}
void simpleIterativeMethod(double *matrix, double* vector, double* X0, int order) {
double* X;
double temp;
for (int i = 0; i < order;i++) {
temp = *(matrix + i * order + i);
for (int j = 0; j < order; j++) {
if (i == j) {
continue;
}
*(matrix + i * order + j) /= temp;
}
*(matrix + i * order + i) = 0;
*(vector + i) /= temp;
}
printMatrix(matrix, order, order);
printVector(vector, 3);
int MAX_ITER = 10;
int ind = 1;
X = MatrixMultiVector(matrix, order, order, X0);
vectorAdd(X, vector, order);
printf("----迭代----\n");
printVector(X, order);
while (ind < MAX_ITER) {
X0 = X;
X = MatrixMultiVector(matrix, order, order, X0);
printVector(X, 3);
vectorAdd(X , vector, order);
printf("iter %d: ", ind);
printVector(X, order);
ind++;
}
if (X) {
delete[] X;
}
}
int main() {
double matrix[] = {
10, -2,-1,
-2,10,-1,
-1,-2,5
};
double vector[] = { 3,15,10 };
double X0[] = { 0,0,0 };
simpleIterativeMethod(matrix, vector, X0, 3);
return 0;
}
原文链接: https://www.cnblogs.com/zhaoke271828/p/14073773.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/205658
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!