矩阵对策模型迭代法 C++代码
时间: 2023-11-01 22:06:48 浏览: 76
对称矩阵特征值Rayleigh 商迭代法
以下是一个简单的矩阵对策模型迭代法的 C++ 代码示例:
```c++
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int N = 10; // 最大迭代次数
const double eps = 1e-6; // 精度
const double alpha = 0.85; // 阻尼因子
// 矩阵对策模型迭代法
void matrixIteration(double **matrix, double *x, int n) {
double *y = new double[n]; // 存储每次迭代后的向量
double norm = 0; // 存储向量的模长
for (int k = 0; k < N; k++) {
for (int i = 0; i < n; i++) {
y[i] = 0;
for (int j = 0; j < n; j++) {
y[i] += alpha * matrix[i][j] * x[j];
}
y[i] += (1 - alpha) / n; // 平衡因子
}
norm = 0;
for (int i = 0; i < n; i++) {
norm += (y[i] - x[i]) * (y[i] - x[i]);
x[i] = y[i];
}
if (sqrt(norm) < eps) { // 达到精度要求,迭代结束
break;
}
}
// 输出结果
cout << "Result:" << endl;
for (int i = 0; i < n; i++) {
cout << "x[" << i << "] = " << fixed << setprecision(6) << x[i] << endl;
}
delete[] y;
}
int main() {
int n; // 矩阵维数
cout << "Input the matrix dimension: ";
cin >> n;
double **matrix = new double *[n];
for (int i = 0; i < n; i++) {
matrix[i] = new double[n];
}
// 输入矩阵
cout << "Input the matrix:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
double *x = new double[n]; // 初始向量
for (int i = 0; i < n; i++) {
x[i] = 1.0 / n; // 初始向量的元素值为 1/n
}
matrixIteration(matrix, x, n);
// 释放内存
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
delete[] x;
return 0;
}
```
注意,这里的矩阵是通过二维数组实现的,而不是使用 `vector` 容器。同时,为了方便起见,这里使用了动态内存分配,需要在程序结束时手动释放内存。
阅读全文