资源简介
雅可比迭代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
相关资源
- VC++实现CMD命令执行与获得返回信息
- 23种设计模式(C++实现版本
- c++实现的文件上传服务器
- 一个C++实现的源代码行数统计工具
- 纯C++实现的截屏
- C++实现21点游戏
- tiny+编译器C++实现
- 数值分析算法程序设计 C++实现
- mysql+dev c++实现订单管理系统
- VC++实现RSA加密算法
- C++实现RSA加密解密算法
- C++实现的斗地主游戏
- 企业人事管理系统c++实现
- 地铁计费系统C++实现dijkstra算法
- C++实现的蓝牙应用程序框架-BlueSolei
- arp欺骗C++实现
- C++实现监控IP数据包
- 粒子滤波器+目标跟踪的C++实现,VS2
- C++实现的职工管理系统
- 格雷码图片生成与保存C++实现代码
- MFC VC++实现Sierpinski分形图像
- c++实现ECC加解密
- 求点介数C++实现 Betweenness Centrality
- C++实现AES、DES加密算法含MFC界面
- 3DES加密算法C++实现
- C++实现多元线性回归 可指定任意几元
- PCA、KPCA数据降维C++实现
- BP算法的C++实现
- c++实现图最短路径
- C++实现的改进遗传算法
评论
共有 条评论