雅可比迭代法和高斯赛德尔迭代法
2016-01-15 00:00
381 查看
刚学 Jacobi算法和Gauss_Siedel算法不久,觉的对以后学习会有帮助,所以记下来,希望感兴趣的朋友共勉!
![](http://static.oschina.net/uploads/img/201601/15103906_5u0Q.gif)
![](http://static.oschina.net/uploads/img/201601/15103906_wsuZ.gif)
雅克比迭代
![](http://static.oschina.net/uploads/img/201601/15103906_5u0Q.gif)
![](http://static.oschina.net/uploads/img/201601/15103906_wsuZ.gif)
高斯-赛德尔迭代法
![](http://static.oschina.net/uploads/img/201601/15103906_5u0Q.gif)
![](http://static.oschina.net/uploads/img/201601/15103906_wsuZ.gif)
雅克比迭代
#include < iostream > #include " math.h " using namespace std; #define n 3 double a = {{ 5 , 2 , 1 },{ - 1 , 4 , 2 },{ 2 , - 3 , 10 }}, x = { - 3 , 2 , 1 }, b = { - 12 , 20 , 3 }, c ; int i = 0 ,j,k = 0 ,counter = 15 ; int main() { int k = 0 ,i = 0 ; double num1,E; float y ; do { E = 0 ; for (j = 0 ;j < n;j ++ ) { c[j] = x[j]; } num1 = 0 ; for (j = 0 ;j < n;j ++ ) { if (j != i) num1 = num1 + a[i][j] * x[j]; } for (j = 0 ;j < n;j ++ ) { c[j] = x[j]; } y[i] = (b[i] - num1) / a[i][i]; if (i < n) { i ++ ; } else { for (j = 0 ;j < n;j ++ ) { x[j] = y[j]; } for (j = 0 ;j < n;j ++ ) { if (E < ( float )fabs(c[j] - y[j])) E = ( float )fabs(c[j] - y[j]); } if (k >= 7 ) { cout << " Iterations is " << k + 1 << " , " << " Iterative precision is " ; printf( " %.6lf\n " ,E); for (j = 0 ;j < n;j ++ ) printf( " x[%d]=%.5lf\t " ,j,x[j]); cout << endl << endl; } i = 0 ; k ++ ; if (E < 0.001 ) break ; } } while (k <= counter); cout << " Iterations is " << k << endl; cout << " Iterative terminating condition " ; printf( " x[%d]-x[%d]oo<%.6lf\n " ,k,k - 1 ,E); cout << " \t\t---------Solution----------- " << endl; for (i = 0 ;i < n;i ++ ) { printf( " x[%d]=%.5lf\n " ,i,x[i]); } }
![](http://static.oschina.net/uploads/img/201601/15103906_5u0Q.gif)
![](http://static.oschina.net/uploads/img/201601/15103906_wsuZ.gif)
高斯-赛德尔迭代法
#include < iostream > #include < math.h > using namespace std; int main() { double a[ 3 ][ 3 ] = {{ 1 , 2 , - 2 },{ 3 , 1 , - 1 },{ 2 , 4 , 1 }},b[ 3 ] = { 10 , 12 , - 20 }; double x[ 3 ] = { 0 , 0 , 0 },sum1,sum2; int i,j,k,n = 3 ; for (k = 0 ;k < 5 ;k ++ ) { for (i = 0 ;i < n;i ++ ) { sum1 = 0 ;sum2 = 0 ; for (j = 0 ;j < i - 1 ;j ++ ) { sum1 = sum1 + a[i][j] * x[j]; } for (j = i + 1 ;j < n;j ++ ) {sum2 = sum2 + a[i][j] * x[j];} x[i] = (b[i] - sum1 - sum2) / a[i][i]; } for (i = 0 ;i < n;i ++ ) { printf( " x%d=%-15f " ,i + 1 ,x[i]);} printf( " \n " ); } }
相关文章推荐
- 双向链表内结点的删除(4)
- 数组和链表的区别
- Android手机文件管理
- nginx安装
- JDBC:JabaBean对数据库的操作----增删改查
- 如何在PDF Transformer+中将PDF转换成Excel
- OC学习日总结
- Objective-c学习日总结之与C的区别及类与对象的定义,类的声明及调用方法
- Math.min与Math.min.apply(null,arguments)区别
- Oracle创建表空间和授权
- PL/SQL 连接 Oracle64位
- PL/SQL查询数据集乱码
- Maven安装Oracle驱动jar包到本地工厂
- 关注用户体验,实现更多价值
- happens-before简介
- Java中的等待/通知机制(wait/notify)
- RHEL-5.9使用Centos的yum源(转)
- Highcharts 中文API 中文手册
- 基于spring配置事物报错未回滚情况分析
- Android屏幕适配