• 大小: 314KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: C++实现  

资源简介

雅可比迭代C++实现,包括雅可比迭代介绍和程序注释

资源截图

代码片段和文件信息

/*
-----------------------------------------------
此方法的局限:
1:n * n 阶方阵 , 程序限制 
2:aii = 0  是充分条件,不知道是不是必要 
3:|A|!=0  说明只有一个解 
 假设有如下方程组:
 Ax=b
 用Jacobi迭代法求解方程组的解

方法:将A分裂为A=D-L-U,等价的迭代方程组为x=Bx+f。

有关算法的详细说明,参看http://www.loujing.com/mywork/c++/project/Jacobi.pdf


-----------------------------------------------
*/

 

#include 
#include 
#include 
using namespace std;

double* allocMem(int ); //分配内存空间函数
void GaussLineMain(double*double*double*int );//采用高斯列主元素消去法求解x的初始向量值
void Jacobi(double*double*double*double*intint);//利用雅可比迭代公式求解x的值


int main()
{
 short matrixNum; //矩阵的行数(列数)
 double *matrixA; //矩阵A,初始系数矩阵
 double *matrixD; //矩阵D为A中的主对角阵
 double *matrixL; //矩阵L为A中的下三角阵
 double *matrixU; //矩阵U为A中的上三角阵
 double *B;   //矩阵B为雅可比方法迭代矩阵
 double *f;   //矩阵f为中间的过渡的矩阵
 double *x;   //x为一维数组,存放结果
 double *xk;   //xk为一维数组,用来在迭代中使用
 double *b;   //b为一维数组,存放方程组右边系数


 int ijk;


 cout<<“<<请输入矩阵的行数(列数与行数一致)>>:“;
 cin>>matrixNum;

 //分别为A、D、L、U、B、f、x、b分配内存空间
 matrixA=allocMem(matrixNum*matrixNum);
 matrixD=allocMem(matrixNum*matrixNum);
 matrixL=allocMem(matrixNum*matrixNum);
 matrixU=allocMem(matrixNum*matrixNum);
 B=allocMem(matrixNum*matrixNum);
 f=allocMem(matrixNum);
 x=allocMem(matrixNum);
 xk=allocMem(matrixNum);
 b=allocMem(matrixNum);


 
 //输入系数矩阵各元素值
 cout<  <>:“< for(i=0;i {
  cout<<“请输入矩阵中第 “<  for(j=0;j   cin>>*(matrixA+i*matrixNum+j);
 }

 //输入方程组右边系数b的各元素值
 cout<  “ 个“<<“>>:“< for(i=0;i  cin>>*(b+i);

 

 /*  下面将A分裂为A=D-L-U */
 
 //首先将D、L、U做初始化工作
 for(i=0;i  for(j=0;j   *(matrixD+i*matrixNum+j)=*(matrixL+i*matrixNum+j)=*(matrixU+i*matrixNum+j)=0;

 //D、L、U分别得到A的主对角线、下三角和上三角;其中D取逆矩阵、L和U各元素取相反数
 for(i=0;i  for(j=0;j   if(i==j&&*(matrixA+i*matrixNum+j)) *(matrixD+i*matrixNum+j)=1/(*(matrixA+i*matrixNum+j));
   else if(i>j) *(matrixL+i*matrixNum+j)=-*(matrixA+i*matrixNum+j);
   else *(matrixU+i*matrixNum+j)=-*(matrixA+i*matrixNum+j);

 //求B矩阵中的元素
 for(i=0;i  for(j=0;j  {
   double temp=0;
   for(k=0;k    temp+=*(matrixD+i*matrixNum+k)*(*(matrixL+k*matrixNum+j)+*(matrixU+k*matrixNum+j));
   *(B+i*matrixNum+j)=temp;
  }

 //求f中的元素
 for(i=0;i {
  double temp=0;
  for(j=0;j   temp+=*(matrixD+i*matrixNum+j)*(*(b+j));
  *(f+i)=temp;
 }

 

 /*  计算x的初始向量值 */
 GaussLineMain(matrixAxbmatrixNum);

 

 /* 利用雅可比迭代公式求解xk的值 */
 int JacobiTime;
 cout<>:“;
 cin>>JacobiTime;
 while(JacobiTime<=0) 
 {
  cout<<“迭代次数必须大于0,请重新输入:“;
  cin>>JacobiTime;
 }
 Jacob

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     204109  2008-04-14 23:11  雅可比(Jacobi)迭代算法的C++实现\Jacobi.pdf

     文件         30  2008-04-14 00:22  雅可比(Jacobi)迭代算法的C++实现\r.txt

     文件        828  2008-04-14 00:13  雅可比(Jacobi)迭代算法的C++实现\Jacobi\Jacobi.dev

     文件     479154  2008-04-14 00:17  雅可比(Jacobi)迭代算法的C++实现\Jacobi\Jacobi.exe

     文件       6296  2008-04-15 00:42  雅可比(Jacobi)迭代算法的C++实现\Jacobi\main.cpp

     文件     479154  2008-04-14 23:52  雅可比(Jacobi)迭代算法的C++实现\Jacobi\main.exe

     文件       7817  2008-04-14 00:17  雅可比(Jacobi)迭代算法的C++实现\Jacobi\main.o

     文件        779  2008-04-14 00:18  雅可比(Jacobi)迭代算法的C++实现\Jacobi\Makefile.win

     目录          0  2009-12-13 20:36  雅可比(Jacobi)迭代算法的C++实现\Jacobi

     目录          0  2009-12-13 20:36  雅可比(Jacobi)迭代算法的C++实现

----------- ---------  ---------- -----  ----

              1178167                    10


评论

共有 条评论