- 其实如果你搜到了这个博客
- 基本可以说明,你肯定已经知道什么是追赶法了
- Python Python 就是大一大二的小孩拿来使自我感觉良好的骗子玩具(对低龄儿童和专业人士除外)
- LU分解
- LU分解后,可以轻松得得到每个方程得解
- 哪两个方程呢:
- AX=b
- LUX=b====>LY=b====>Y=d
- UX=d====>X
- C++ 实现
- 其实有个很有趣的事情,...,这玩意不就是顺下来的...
- 啊,对对对
#include <iostream>
#include <vector>
using namespace std;
vector<double> THOMAS(vector<vector<double>>a, vector<double>d)
{
int n = d.size();
vector<double>x(n);
vector<double>alpha(n);
vector<double>gamma(n);
vector<double>beta(n);
vector<double>y(n);
alpha[0] = a[0][0];
beta[0] = a[0][1] / a[0][0]; y[0] = d[0] / a[0][0];
for (int i=1;i<n;i++)
{
gamma[i] = a[i][i-1];
alpha[i] = a[i][i] - gamma[i] * beta[i-1];
if (i<n-1)
{
beta[i] = a[i][i+1]/alpha[i];
}
y[i] = (d[i]-a[i][i-1]*y[i-1])/alpha[i];
}
x[n-1] = y[n-1];
for (int i=n-2;i>=0;i--)
{
x[i] = y[i]-beta[i]*x[i+1];
}
return x;
}
int main()
{
vector<vector<double>>a(4,vector<double>(4));
vector<double>b(4);
vector<double>x(4);
a[0] = {2,1,0,0};
a[1] = {1,2,1,0};
a[2] = {0,1,2,1};
a[3] = {0,0,1,2};
b = {1,1,1,1};
x = THOMAS(a, b);
for (int i=0;i<4;i++)
{
for (int j=0;j<4;j++)
{
cout << a[i][j] << " ";
}
cout << b[i] << endl;
}
cout << "SOLUTION of THOMAS method:" << endl;
for (int i=0;i<4;i++)
{
cout<<"x"<<i+1<<" = " <<x[i] << endl;
}
}
显然,这是我们所不能满意的
我们希望的功能有
1.检验是否可以使用THOMAS方法
2.可以从文件中读取,好,明天更
3.明天cupt 裁判