在C语言中,迭代法通常通过循环结构来实现,用于逐步接近问题的解。下面是一个使用迭代法求解线性方程组的简单示例,采用了雅可比迭代法:
```c
include include // 定义矩阵和向量的结构体 typedef struct { double data; int rows; int cols; } Matrix; typedef struct { double *data; int size; } Vector; // 函数声明 Matrix* createMatrix(int rows, int cols); Vector* createVector(int size); void freeMatrix(Matrix *matrix); void freeVector(Vector *vector); void jacobiIteration(Matrix *A, Vector *b, Vector *x, int iterations); int main() { // 示例:使用雅可比迭代法求解线性方程组 int n = 3; // 方程组的维数 Matrix *A = createMatrix(n, n); Vector *b = createVector(n); Vector *x = createVector(n); // 初始化矩阵A和向量b // ... // 设置迭代次数 int iterations = 1000; // 执行雅可比迭代 jacobiIteration(A, b, x, iterations); // 输出结果 printf("Solution after %d iterations:\n", iterations); for (int i = 0; i < n; i++) { printf("x[%d] = %f\n", i, x->data[i]); } // 释放内存 freeMatrix(A); freeVector(b); freeVector(x); return 0; } // 创建矩阵 Matrix* createMatrix(int rows, int cols) { Matrix *matrix = (Matrix*)malloc(sizeof(Matrix)); matrix->rows = rows; matrix->cols = cols; matrix->data = (double)malloc(rows * sizeof(double*)); for (int i = 0; i < rows; i++) { matrix->data[i] = (double*)malloc(cols * sizeof(double)); } return matrix; } // 创建向量 Vector* createVector(int size) { Vector *vector = (Vector*)malloc(sizeof(Vector)); vector->data = (double*)malloc(size * sizeof(double)); vector->size = size; return vector; } // 释放矩阵内存 void freeMatrix(Matrix *matrix) { for (int i = 0; i < matrix->rows; i++) { free(matrix->data[i]); } free(matrix->data); free(matrix); } // 释放向量内存 void freeVector(Vector *vector) { free(vector->data); free(vector); } // 雅可比迭代函数 void jacobiIteration(Matrix *A, Vector *b, Vector *x, int iterations) { Vector *x_new = createVector(x->size); for (int iter = 0; iter < iterations; iter++) { for (int i = 0; i < x->size; i++) { double sum = 0.0; for (int j = 0; j < x->size; j++) { if (i != j) { sum += A->data[i][j] * x_new->data[j]; } } x_new->data[i] = (b->data[i] - sum) / A->data[i][i]; } // 交换x和x_new Vector *temp = x; x = x_new; x_new = temp; } // 将结果复制回x for (int i = 0; i < x->size; i++) { x->data[i] = x_new->data[i]; } freeVector(x_new); } ``` 在这个示例中,我们首先定义了矩阵和向量的结构体,然后实现了创建矩阵和向量的函数。`jacobiIteration`函数实现了雅可比迭代法,它通过循环不断更新解向量`x`,直到达到指定的迭代次数。最后,我们在`main`函数中创建了一个示例矩阵和向量,并