- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
直接法解线性方程组报告
全选主元算法:
输入方程组维数n,矩阵a,右端项b和控制精度eps;
初始化用于标记方程组解顺序的数组flag,flag[i]:=i(i=0:N-1)
对于r=0:n-2
|a(p,q)|=max|a(x,y)|(r=xn,y=rn) %全选主元
如果|a(p,q)|eps则停止 %控制小主元
如果p=r,则转(4),否则
a(p,r:n-1) a (r,r:n-1) ; b(p) b(r) %换行
如果q=r,则转(5),否则
a(r:n-1,r) a(r:n-1,q) ;flag(q) flag(r) %换列
a(r+1:n-1,r+1:n-1):=a(r+1:n-1,r+1:n-1)-a(r+1:n-1,r)*a(r,r+1:n-1)/a(r,r)
b(r+1:n-1)=b(r+1:n-1)-a(r+1:n-1,r)*b?/a(r,r) %按行消元
如果|a(n-1,n-1)|=eps则停止 %无解
b(n-1):=b(n-1)/a(n-1,n-1),
对于i=n-2:-1:1,b(i):=[b(i)-a(i,i+1:n-1)*b(i+1:n-1)]/a(i,i) %回带求解
5.输出解b(0:n-1)
Gauss全选主元解方程组的源程序及运行结果
#include iostream
#include stdlib.h
#include math.h
using namespace std;
class Matrix
{
public:
Matrix();
~Matrix();
void SetMatrix(const int n,const double esp1);//构造线性方程组相应的矩阵,n为方程的未知数数目,esp1为要求的精度
void Max(const int r);//全选主元
void ChangeRC(const int r);//根据主元变换矩阵的行或列
void Eliminate(const int r);//处理消元工作
void Result()const;//计算方程的解
void Calculate();
int GetRank()const;//返回矩阵的行数
double GetX(const i)const;//确定方程组的第i个解(1=i=N)
private:
//指针a和b分别用于存储方程组的未知数系数和方程=右边的常数,esp存//储精度
double *a,*b,esp;
//指针flag用于记录方程组解的顺序
int *flag;
//以下的结构体用于在全选主元中记录最大主元的位置
struct coordinate
{
int row,column;
}location;
int N;//方程组未知数的数目
};
int main()
{
int n;
double esp1;
Matrix matrix;
do{
cout请输入方阵的阶数:;
cinn;
if(n0) n=0;//如何控制非法字符的输入??????????
}while(n==0);
do
{
cout请输入计算精度:;
cinesp1;
if(esp10) esp1=0;//输入不合法的精度就把精度置0
}while(esp1==0);
cout输入线性方程组的增广矩阵:\n;
matrix.SetMatrix(n,esp1);//设置矩阵内的数据
matrix.Calculate();//计算方程组的解
//输出方程组的解
cout\n\n方程组的解如下:\n;
for(int i=1;i=matrix.GetRank();++i)
coutX[i]:matrix.GetX(i)endl;
return 0;
}
Matrix::Matrix()
{ //将Matrix类的数据成员初始化
a=NULL;
b=NULL;
flag=NULL;
location.row=0;
location.column=0;
esp=0;
N=0;
}
Matrix::~Matrix()
{ //释放指针a、b和flag指向的内存空间
delete[]a;
delete[]b;
delete[]flag;
}
void Matrix::SetMatrix(const int n,const double esp1)
{
N=n;
esp=esp1;
a=new double[N*N];
b=new double[N];
flag=new int[N];
//判断是否成功分
您可能关注的文档
最近下载
- 大学生《工程电磁场导论》期末考试复习资料.pdf VIP
- 思政版新视野大学英语读写教程1课件PPT;Unit-1-.pptx VIP
- 核电站海水淡化工程关键技术与经济性评价.docx VIP
- 毕业设计(论文)-Φ1000立轴锤击式破碎机(全套图纸).doc VIP
- 商用车产品适用格离合器.ppt VIP
- 如何运营抖音?抖音运营专业方案.ppt VIP
- 肿瘤专科护士进修学习汇报.pptx VIP
- GA∕T 383-2014- 法庭科学DNA实验室检验规范.pdf.pptx VIP
- 2025新高一英语开学第一课及高中英语学法指导.pptx
- 毕业设计(论文)-Φ1000立轴锤击式破碎机(全套图纸).pdf VIP
文档评论(0)