Jacobi迭代和Gauss迭代 c语言实现
2013-04-16 12:29
357 查看
/* *TestMain.cpp *功能:利用Jacobi迭代和Gauss迭代求解方程组 *时间:2013.4.1 */ #include "Jacobi.h" #include "Gauss.h" int main () { printf("Jacobi迭代的结果:\n"); Jacobi(3 , 0.0001); printf("*****************************************************\n"); printf("Gauss迭代的结果:\n"); Gauss(3,0.0001); return 0; } /* *Gauss.cpp *功能:高斯迭代 *时间:2013.4.1 */ #include "Gauss.h" void Gauss(int n , double E) { int i; // 用来循环 int k=0; //记录迭代次数 double maxE; //设置初始值 double *a = (double *)malloc(sizeof(double)*(n+1)); for(i=1;i<=n;i++) { a[i]=0; printf("%d :X0=%f ,",k,a[i]); } printf("\n"); //存放新的解 double *temp = (double *)malloc(sizeof(double)*(n+1)); do { CalculateG(a,temp); k++; printf("%d :",k); for(i=1;i<=n;i++) { printf("X%d=%f ,",i,temp[i]); } printf("\n"); swapX(temp,a,n); maxE = fabs(temp[1]-a[1]); for(i=2;i<=n;i++) { if(maxE<fabs(temp[i]-a[i])) maxE = fabs(temp[i]-a[i]); } }while(maxE >=E); return ; } //计算x void CalculateG(double *a,double *temp) { temp[1] = -2.4-0.4*a[2]-0.2*a[3]; temp[2] = 5+0.25*temp[1]+0.5*a[3]; temp[3] = 0.3-0.2*temp[1]+0.3*temp[2]; return ; } /* *Jacobi.cpp *功能:Jacobi迭代 *时间:2013.4.1 */ #include "Jacobi.h" void Jacobi(int n , double E) { int i; // 用来循环 int k=0; //记录迭代次数 double maxE; //设置初始值 double *a = (double *)malloc(sizeof(double)*(n+1)); for(i=1;i<=n;i++) { a[i]=0; printf("%d :X0=%f ,",k,a[i]); } printf("\n"); //存放新的解 double *temp = (double *)malloc(sizeof(double)*(n+1)); do { CalculateJ(a,temp); k++; printf("%d :",k); for(i=1;i<=n;i++) { printf("X%d=%f ,",i,temp[i]); } printf("\n"); swapX(temp,a,n); maxE = fabs(temp[1]-a[1]); for(i=2;i<=n;i++) { if(maxE<fabs(temp[i]-a[i])) maxE = fabs(temp[i]-a[i]); } }while(maxE >=E); return ; } //计算x一课本3.1为例 void CalculateJ(double *a,double *temp) { temp[1] = -2.4-0.4*a[2]-0.2*a[3]; temp[2] = 5+0.25*a[1]+0.5*a[3]; temp[3] = 0.3-0.2*a[1]+0.3*a[2]; return ; } /* *common.cpp *功能:Jacobi和Gauss迭代公用函数 */ #include "common.h" //交换解 void swapX(double *temp,double *a,int n) { int i; double tmp; for(i=1;i<=n;i++) { tmp = temp[i]; temp[i] = a[i]; a[i] = tmp; } return ; } 相关头文件: /* *Jacobi.h */ #include "common.h" void Jacobi(int n , double E); void CalculateJ(double *a,double *temp); /* *Gauss.h */ #include "common.h" void Gauss(int n,double E); void CalculateG(double *a,double *temp); /* *common.h */ #include <stdio.h> #include <math.h> #include <stdlib.h> void swapX(double *temp,double *a,int n);
相关文章推荐
- Jacobi迭代和Gauss迭代 c语言实现
- #公式与实现# Jacobi迭代 Gauss-Seidel迭代
- #公式与实现# Jacobi迭代 Gauss-Seidel迭代
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- Gauss迭代,Jacobi迭代,SORT迭代解线性方程组
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- #公式与实现# Jacobi迭代的并行实现
- 10个重要的算法C语言实现源代码(其4和5---龙贝格和牛顿迭代)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 (转帖)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- #公式与实现# Jacobi迭代与五点迭代
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- #公式与实现# Jacobi迭代的并行实现
- #公式与实现# Jacobi迭代与五点迭代
- 堆排序(C语言实现)迭代