追赶法解线性方程组c++
时间: 2023-10-18 09:24:39 浏览: 53
追赶法,也称为扫描法,是一种用于解三对角线性方程组的数值方法。其基本思想是将原方程组转化为两个二对角线性方程组,然后通过追赶的方式进行求解。
以下是使用C++实现追赶法求解三对角线性方程组的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
vector<double> solve_tridiagonal(vector<double> a, vector<double> b, vector<double> c, vector<double> d) {
int n = a.size();
vector<double> x(n);
vector<double> m(n - 1);
// 初始化
m[0] = c[0] / b[0];
for (int i = 1; i < n - 1; i++) {
m[i] = c[i] / (b[i] - a[i] * m[i - 1]);
}
// 前向追赶
vector<double> y(n);
y[0] = d[0] / b[0];
for (int i = 1; i < n; i++) {
y[i] = (d[i] - a[i] * y[i - 1]) / (b[i] - a[i] * m[i - 1]);
}
// 后向追赶
x[n - 1] = y[n - 1];
for (int i = n - 2; i >= 0; i--) {
x[i] = y[i] - m[i] * x[i + 1];
}
return x;
}
int main() {
// 示例方程组
vector<double> a = {0, -1, -1};
vector<double> b = {4, 4, 4};
vector<double> c = {-1, -1, 0};
vector<double> d = {5, 10, 5};
vector<double> x = solve_tridiagonal(a, b, c, d);
// 输出解向量
for (int i = 0; i < x.size(); i++) {
cout << "x[" << i << "] = " << x[i] << endl;
}
return 0;
}
```
其中,a、b、c、d分别为三对角线性方程组的系数向量和常数向量,solve_tridiagonal函数返回方程组的解向量。