资源简介
雅可比迭代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
- 上一篇:传智播客c++视频
- 下一篇:C# 键盘鼠标全局钩子拦截键盘鼠标所有操作全局HOOK
相关资源
- windows下C++实现的HTTP web 服务器
- OpenGL 真实感图形编程C++实现
- 《数据结构——C++实现》第二版课本
- 八数码的深度优先算法c++实现
- C++实现灰度图像的边缘检测、提取及
- c++实现最简单的COM
- C++实现音频录音wav格式
- c++写的平衡树数据结构
- 车牌识别C++实现
- 校园导航c++实现
- BP神经网络VC++实现
- C++实现通用链表
- 光线追踪算法C++实现
- 基于C++实现DFT和IDFT——数字信号处理
- C++实现图书馆管理系统
- C++实现LZW压缩和解压
- 图像拼接使用VC++实现完成两幅又重叠
- 基础PageRank 算法 C++实现
- 哈希检索算法的C++实现源代码
- 角度的单位转换,从度到度分秒,C
- 局部线性回归c++实现
- 步态识别C++实现
- CYK算法的C++实现
- 多边形耳切法三角化C++实现
- minisql 用C++实现
- 删除文件恢复C++实现
- 矩阵运算C++实现.doc
- viterbi译码算法c++实现以及程序所对应
- C++实现Apriori算法
- c++实现的读写csv文件
评论
共有 条评论