首页 > 代码库 > 解方程与高斯消元

解方程与高斯消元

解决多元一次方程组:

n个方程n个未知数
高斯消元法:
思路:
1.把方程未知数的系数写成一个矩阵
2.消去x1,用除第一行以外的其他行减去第一行,写在原位上
3.同理第二步,消去第三行的x2
4.原来的矩阵会变成一个上三角矩阵
5.最后直接解方程
*如果当前方程需要消元的位置系数是0,就把当前方程和下面第一个非0的方程换一下位置
反正也不影响答案

代码实现:

void gauss()
{
    juzhen:m
    for(int i=1;i<=n;++i)
    {
        if(m[i][i]==0)
        {
            for(int j=i+1;j<=n;++j)
            {
                if(m[j][i])//如果找不到,那么可以随便取值,无所谓
                {    
                    swap(m[i],m[j]);
                    break;
                }
            }
        }
        for(int j=i+1;j<=n;++j)
        {
            ratio=m[j][i]/m[i][i];
            for(int k=1;k<=n+1;++k)//k也可以从i开始
                m[j][k]-=m[i][k]*ratio;
        }
    }
    for(int i=n;i>=1;--i)
    {
        solution[i]=m[i][n+1];
        for(int j=i+1;j<=n;++j)
            solution[i]-=m[i][j]*solution[j];
        solution[i]/=m[i][i];
    }
}

还没编译过,不知道对不对。。

解决多元多次方程组

e.g.
f(x)=ax^5+bx^4+cx^3+dx^2+ex+f
解法:令x=1,2,3,4,5,带入方程,可得六个一次方程,然后用高斯消元
那么如果不一定是5次呢
用高斯消元造一个自动找规律机/滑稽,打表

解方程与高斯消元