2492 0

全主元Gauss-Jordan消元法(Blitz++库) [推广有奖]

  • 0关注
  • 3粉丝

讲师

7%

还不是VIP/贵宾

-

威望
0
论坛币
542 个
通用积分
1.0068
学术水平
20 点
热心指数
24 点
信用等级
9 点
经验
3067 点
帖子
229
精华
0
在线时间
21 小时
注册时间
2010-8-5
最后登录
2012-10-9

楼主
经济初级菜鸟 发表于 2010-11-30 10:38:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Gauss-Jordan消元法是经典的线性方程组A·X=b求解方法,该方法的优点是稳定,而全主元[1]法可能更加稳定,同时,它也存在着弱点——求解速度可能较慢。
Gauss-Jordan消元法主要特点是通过交换任意的行列,把矩阵A约化为单位矩阵,约化完成后,方程组右端项向量b即为解向量。我们知道,选择绝对值最大的元素作为主元是很好的办法,所以,全主元法目的就是在一个大的范围里面寻找主元,以达到比较高的精度。"
下面,我使用Blitz++的Array库,编写全主元Gauss-Jordan消元法。
#include <blitz/array.h>#include <cstdlib>#include <algorithm>

#include <vector>
using namespace blitz;void Gauss_Jordan (Array<double, 2>& A, Array<double, 2>& b)int irow, icol;vector<int> indexcol(n), indexrow(n), piv(n); for (int j=0; j<n; ++j)

piv.at(j) = 0; for (int i=0; i<n; ++i) { double big = 0.0;for (int j=0; j<n; ++j)if (piv.at(j) != 1)

for (int k=0; k<n; ++k) {if (piv.at(k) == 0) {

if (abs(A(j, k)) >= big) {big = abs(A(j, k));irow = j;icol = k;if (irow == icol) break;}$} }
{++piv.at(icol);//进行行交换,把主元放在对角线位置上,列进行假交换//使用向量indexrow和indexcol记录主元位置//这样就可以得到最终次序是正确的解向量。if (irow != icol) {for (int l=0; l<n; ++l) for (int l=0; l<m;swap(b(irow, l), b(icol, l));}indexrow.at(i) = irow;indexcol.at(i) = icol;try {'double pivinv = 1.0 / A(icol, icol);for (int l=0; for (int l=0;for (int ll=0;if (ll != icol) {double dum = A(ll, icol);;for (int l=0; l<n; ++l) ;
A(ll, l) -= A(icol, l)*dum;for (int l=0;b(ll, l) -= b(icol, l)*dum;

catch (...) {

}0}1int main()

{ //测试矩阵Array<double, 2>  b = 3,Gauss_Jordan(A, b);}+Result从代码的过程可以看出,矩阵A的逆在A中逐步构造,最终矩阵A演变成单位矩阵,解向量X也逐步替代右端项向量,且使用同一存储空间。

注释:[1]主元,又叫主元素,指用作除数的元素

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Jordan Blitz GAUSS Jord Aus Blitz

在职研究生报名时间http://tdxl.zzyjs.com

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-28 16:54