高斯消元N×M的矩阵矩阵、高斯

2023-09-11 03:37:42 作者:我没心,不疼

  / *程序来证明高斯<强烈的阶级=高亮>消除< / STRONG>
   在一组线性方程组的
 * /

#包括<的iostream>
#包括< CMATH>
#包括<载体>

使用名字空间std;

常量双EPS = 1.E-15;

/ * preliminary旋转策略
  旋转功能
 * /
双枢轴(矢量<矢量<双>>&功放;一,矢量<双>和b,int i)以
 {
     INT N = a.size();
     INT J =;
     双吨= 0;

     为(中间体K = 1; K&n种; K + = 1)
     {
         双AKI =晶圆厂(一个[k]的[I]);
         如果(AKI> T)
         {
             T = AKI;
             J = K表;
         }
     }
     如果(J>ⅰ)
     {
         双模拟;
         为(中间体L = 0; l n种; L + = 1)
         {
             假= A [1] [1];
             A [1] [1] = A [J] [L]
             一个[J] [L] =假;
         }
         双温度= B [J]。
         B〔I] = B [J]。
         B〔J] =温度;
     }
     返回[I] [I];
 }



/ *转发<强烈的阶级=高亮>消除< / STRONG> * /
无效triang(矢量<矢量<双>>&功放;一,矢量<双>和b)
{
    INT N = a.size();
    对(INT I = 0; I&n种-1; I + = 1)
    {
        双DIAG =枢轴(A,B,I);
        如果(晶圆厂(诊断)< EPS)
        {
            COUT<<零DET<< ENDL;
            返回;
        }
        为(诠释J = i + 1的; J&n种; J + = 1)
        {
            双MULT = A [J] [我] /诊断;
            为(中间体K = 1 + 1; K&n种; K + = 1)
            {
                一个[J] [K]  -  = MULT * A [1] [K]
            }
            B〔J]  -  = MULT * B [I]
        }
    }
}

/ *
积两个向量
* /
双dotProd(矢量<双>&安培; U,矢量<双>&安培; V,INT K1,K2 INT)
{
  双总和= 0;
  的for(int i = K1; I< = K2;我+ = 1)
  {
     总和+ = U [I] * V [I]
  }
  返回总和;
}

/ *
回代步骤
* /
无效backSubst(矢量<矢量<双>>&功放;一,矢量<双>和B,矢量<双>&安培; X)
{
    INT N = a.size();
  的for(int i = N-1; I> = 0;我 -  = 1)
  {
    X [I] =(二[I]  -  dotProd(A [1]中,x,i + 1的,N-1))/ A [1] [I];
  }
}
/ *
精炼高斯<强烈的阶级=高亮>消除< / STRONG>程序
* /
无效高斯(矢量<矢量<双>>&功放;一,矢量<双>和B,矢量<双>&安培; X)
{
   triang(A,B);
   backSubst(A,B,x)的;
}

//例主体计划
诠释的main()
{
    INT N;
    CIN>> N;
    矢量<矢量<双> >一个;
    矢量<双> X;
    矢量<双> B:
    的for(int i = 0;我n种;我++){
        矢量<双>温度;
        为(诠释J = 0; J&n种; J ++){
            int无;
            CIN>>没有;
            temp.push_back(无);
        }
        a.push_back(临时);
        b.push_back(0);
        x.push_back(0);
    }
    / *
    的for(int i = 0;我n种;我++){
        int无;
        CIN>>没有;
        b.push_back(无);
        x.push_back(0);
    }
    * /

  高斯(A,B,x)的;
  用于(为size_t I = 0; I< x.size();我++){
      COUT<< ×〔1]  - ;&其中; ENDL;
  }
   返回0;
}
 

以上高斯eleimination算法正常工作的N×N的矩阵。但我需要它的工作在N×M的矩阵。谁能帮我做到这一点?我不是很擅长数学。我得到了一些网站本code,我坚持它。

解决方案 (可选)了解这个。请在纸上的一些例子。 的不要写$ C $下高斯消自己的。如果没有一定的照顾,天真高斯旋转不稳定。你有规模的线,并采取以最大的元素旋转的护理,出发点是有。请注意,这个建议仍然持有大部分线性代数算法。 如果您想解决方程组, LU分解,的