/ *程序来证明高斯<强烈的阶级=高亮>消除< / 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分解,的