線形線形方程式を解くC ++プログラム

行列のアイデアを使用して方程式を解き、線形線形方程式を拡張行列として記述し、コードを記述して、拡張行列の係数行列を行と行のキャンセルによって上三角行列に変換します。

#include "iostream"
 using namespace std;
#include"ctime"
#include"vector"

class solution                            
{
    
    
public:
	vector<double> solve(int n) {
    
    
		srand((unsigned)time(NULL));
		vector<vector<double>> data(n, vector<double>(n+1));
		for (int i = 0;i < n;i++)
		{
    
    
			for (int k = 0;k < n+1;k++)
			{
    
    

				data[i][k] = rand() % 10;      //填充矩阵
			}
		}
		//矩阵两行之间相消得到上三角阵
		double save1 = 0, save2 = 0;
		for (int k = 0;k < n;k++)
		{
    
    
			for (int j = k + 1;j < n;j++)
			{
    
    
				save1 = data[j][k]; //保存相消所需要的系数1
			    save2 = data[k][k];//保存相消所需要的系数2
				for (int m = 0;m < n+1;m++)
				{
    
    
					data[j][m] -= double(data[k][m] * save1 / save2);   //矩阵两行之间相消
				}

			}
		}
		vector<double>x(n,0);
		//从下往上依次求解
        for (int i = n-1;i >= 0;i--)																																																																																																							
		{
    
    
			double sum = 0;
			for (int k = 0;k < n;k++)
			{
    
    
				if (k == i)continue;
				sum += x[k] * data[i][k];
			}
			x[i] = (data[i][n] - sum) / data[i][i];        //求解
		}
		
		return x;
	}
	

};

おすすめ

転載: blog.csdn.net/CY2333333/article/details/106898512