Jacobi迭代 c++代码
2014-11-18 14:06
113 查看
最近在看流体的论文,其中提到线性方程组的解的问题,查询相关内容的时候看到了Jacobi迭代的方法,因为之前就总是听到大名鼎鼎的雅可比行列式,这回自己试着写了写代码,其实非常简单,也是通过这次写代码,我发现其实数学公式的算法代码并不难,难的是怎么用数学的思维写代码!
先上代码:
著名本实验是参考网上的一个实验,因为第一次写,所以想验证自己的结果对不对,代码绝对原创。
结果:
雅可比迭代的原理其实非常简单,下面简单介绍一下:
怎么样,是不是很简单,实际最终要的就是这一句
;另外大家千万要注意使用变量前一定要初始化,不然可能出现不同的状况,例如代码中m变量不初始化,把它放在第一个for的第一句,你试试看结果怎样?
先上代码:
著名本实验是参考网上的一个实验,因为第一次写,所以想验证自己的结果对不对,代码绝对原创。
#include <math.h> #include <stdio.h> using namespace std; void jacobi(double A[3][3],double b[3],double x[3],double e) { int i,j; double X[3],sub,ep,p,m=0; bool flag; do{ flag = false; for( i=0;i<3;i++) X[i]=x[i]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(j!=i) m += A[i][j]*X[j]; } x[i]=(b[i]-m)/A[i][i]; m=0; } for(int i=0;i<3;i++) { sub = fabs(x[i]-X[i]); if(sub>e) { flag = true; } } if(flag==false) { break; } }while(true); } void main() { double A [3][3]={{4,1,1},{1,4,1},{1,1,4}}; double b[3] = {7,10,7}; double x[3] = {0,0,0}; double e=1e-4; int i; jacobi(A,b,x,e); for( i=0;i<3;i++) { cout<<x[i]<<endl; } }
结果:
雅可比迭代的原理其实非常简单,下面简单介绍一下:
怎么样,是不是很简单,实际最终要的就是这一句
;另外大家千万要注意使用变量前一定要初始化,不然可能出现不同的状况,例如代码中m变量不初始化,把它放在第一个for的第一句,你试试看结果怎样?
相关文章推荐
- Jacobi迭代求矩阵特征值和特征向量+C代码
- 雅可比(Jacobi)迭代算法的C++实现
- 一段清屏的c++代码(转贴)
- GNU的C++代码书写规范,C语言之父Dennis Ritchie亲自修订
- C# 2.0:使用匿名方法、迭代程序和局部类来创建优雅的代码
- 【分析】C++中通过溢出覆盖虚函数指针列表执行代码
- 发现VS2005 b2有支持C++代码重构的功能
- C++代码测试-指针常量和常量指针
- 通过指针进行迭代和通过索引进行迭代是否产生相同代码
- C# 2.0:使用匿名方法、迭代程序和局部类来创建优雅的代码
- Singleton模式的C++实现研究(示例代码)
- 【转贴】C++代码优化方法总结
- C# 2.0:使用匿名方法、迭代程序和局部类来创建优雅的代码
- C/C++代码审查表
- C++ 代码覆盖率工具Bullseye Coverage(收藏)
- Viusal C++.NET 2003 的优化代码(翻译)
- C++模板代码的组织方式 ——包含模式(Inclusion Model)
- 在C#中调用C/C++代码
- C++代码优化
- c++代码测试-std::string元素