标题:[原创]GaussJordan消去法(C语言版)
取消只看楼主
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
 问题点数:0 回复次数:2 
[原创]GaussJordan消去法(C语言版)

56sONIAW.rar (226.38 KB) [原创]GaussJordan消去法(C语言版)


这是我今天上午帮同学做的一个小作业,拿出来交流交流。
可以直接下载源代码

搜索更多相关主题的帖子: C语言 GaussJordan 源代码 消去法 
2006-05-29 13:18
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
得分:0 

怎么都是只下载不说话呢?大家可以随便谈谈自己的想法噻

下面这是源代码:

#include "stdafx.h"
#include "iostream.h"
#include "malloc.h"

int Row=0,Col=0;//矩阵总行数,总列数

double * InitMatrix()
{
double * matrix;
cout<<" 请输入矩阵维数(行,列):"<<endl;
cin>>Row>>Col;
matrix = (double*)malloc(Row*Col*sizeof(double));
double * Elem;
Elem = matrix;
cout<<" 请依次输入行列元素值:"<<endl;
for(int i=0;i<Row;i++)
{
for(int j=0;j<Col;j++)
{
cout<<" mat("<<i<<","<<j<<")=";
cin>>*Elem;
Elem++;
}
}
return matrix;
}

double GetElem(double * mat,int m,int n)
{
double *Elem = mat;
int i=0;
while(i<(m*Col+n))
{
Elem++;
i++;
}
return *Elem;
}

void SetElem(double * mat,int m,int n,double v)
{
double *Elem = mat;
int i=0;
while(i<(m*Col+n))
{
Elem++;
i++;
}
*Elem = v;
}

bool GaussJordan(double * mat)
{
if(1 != (Col-Row))
return false;
int i = 0,j = 0,k = 0;//行标,列标,第几轮计算
double L_ik = 1;
double L_kk = 1;//Elem(k,k)的倒数
double matElem = 0;

for(k = 0;k < Row;k++)
{
if(0 == GetElem(mat,k,k))
return false;
L_kk = 1/GetElem(mat,k,k);
for(i = 0;i < Row;i++)
{
if(i == k)
continue;
L_ik = GetElem(mat,i,k)*L_kk;
for(j = k+1;j < Col;j++)
{
matElem = GetElem(mat,i,j) - L_ik * GetElem(mat,k,j);
SetElem(mat,i,j,matElem);
}
}
//计算主行
for(j = k;j < Col;j++)
{
matElem = L_kk * GetElem(mat,k,j);
SetElem(mat,k,j,matElem);
}
}
//构造结果解矩阵
cout<<"计算结果如下:"<<endl;
for(i = 0;i < Row;i++)
{
cout<<"\t"<<GetElem(mat,i,Row);
}
return true;
}

int main(int argc, char* argv[])
{
double * mat = InitMatrix();
if(!GaussJordan(mat))
{
cout<<"错误!"<<endl;
}
cout<<endl;
return 0;
}


『站在风口浪尖紧握住鼠标旋转!』 『不在于选择什么,而在于坚持多久!』
2006-05-29 23:33
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
得分:0 
能者为师,谢谢兄台指点

你说的很有道理,我也清楚自己写的代码很烂
拿出来交流,不也就是想听听高人的指点嘛

当时我确实没想到可以这么做
Elem+=m*Col+n;
真心谢谢兄台的指点
虽然我以前也象你说的那么做过,毕竟认识不够深,你这么一说当然印象更深刻了


『站在风口浪尖紧握住鼠标旋转!』 『不在于选择什么,而在于坚持多久!』
2006-05-30 23:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-68211-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055439 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved