1.使用高斯列主消元法求解

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
/*2018/4/18日在写程序之前没有思考清楚就直接写了。调试完成发现自己写的耦合度太高,不适于修改。 用指针去访问二维数组,每次加一定的偏移量,增加了程序的复杂性,而且不利于修改。
*/
/***************************************
*使用四种方法求解线性方程组
*       1. 高斯消元法
*       2.追赶法
*       3.雅克比迭代法
*       4.高斯--赛德尔迭代法
*
*****************************************/
#define N 5
#define M 4
void dep(double *p);
void display(double array[][N]);static double A[M][N] = { {8,7,0,0,0}, {6,12,5,0,-2}, {0,4,9,3,8}, {0,0,1,2,6} };
double B[N] = {0,-2,8,6};//交换
void swap(double *p, double *t) { double s;s = *p;*p = *t;*t = s;
}//通过计算列的max值交换行
void f(double *p, int row) {double max = fabs(*p);int r1 = row; int r2 = row;       //保留当前行数 int i = 1;for(;row < M - 1; row++, i++) { if (max < fabs( *(p + i * N) ) ) {max = *(p + i * N);r1 = row;     //记录最大的行数  }}   //调用交换函数 for(int i = 0; i < N; i++) {     swap(&A[r2][i], &A[r1][i]);  }dep(p);return ;
}void display(double array[][N]) {for(int i = 0; i < M; i++) {    for(int j = 0; j < N; j++) {printf("%10f",array[i][j]);}printf("\n");} return ;
}//消元 ----消去每一列
void dep(double* p) {double result;double *temp; double *tail;//消去row+1 ----N行第row列的值 for (int i = 1; i < M ; i++) {tail = p;result =  *(p + i * N) / *p;temp = p + i * N;for(int j = 0; j < N; j++) {    *temp -= *tail * result;    //每一列减去系数,然后得0   temp++;tail++;}} return ;
}
/*
//回代过程
double* solve() {double x[M];int i;memset(x, 0, sizeof(x));        //初始化数组 x[M - 1] = A[M - 1][N -1] / A[M - 1][N - 2];for(i = M -2; i >= 0; i--){double s = A[i][N - 1];for (int j = i + 1; j < N -1; j++) {s -= (A[i][j]*x[i + 1]);}x[i] = s / A[i][i];}return x;
} void merge() {double newArray[N][N];  //定义一个增广矩阵 for(int i = 0; i < N ; i++ ) {for(int j = 0; j < N + 1; j++) {newArray[i][j] =  A[i][j];if(j == N) {newArray[i][j] = B[i];}} }}
*/
int main() {
/**********************************************
*方法1.高斯列消元法
*        1)先换行
*        2)消元
*        3)给出答案
***********************************************/    double x[M];int i;memset(x, 0, sizeof(x));        //初始化数组 display(A);for(i = 0; i < 4; i++) {f(&A[i][i],i);}printf("处理后的结果\n");system("pause");system("cls");display(A);//回代过程  x[M - 1] = A[M - 1][N -1] / A[M - 1][N - 2];for(i = M -2; i >= 0; i--){double s = A[i][N - 1];for (int j = i + 1; j < N -1; j++) {s -= (A[i][j]*x[i + 1]);}x[i] = s / A[i][i];}for (i = 0; i < M; i++) {printf("%-10lf",x[i]);} return 0;
}

2.使用追赶法求解

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
/**
*追赶法求解线性方程组
*/#define N 5 void display(double *temp) {int i  = 0;for(; i < N; i++, temp++) {printf("%-8lf\n",*temp);}
}int main() {double a[N] = {0, 0, 6, 4, 1};double b[N] = {0, 8, 12, 9, 2}; double c[N] = {0, 7, 5, 3, 0};double f[N] = {0, 0, -2, 8, 6}; //存放常数项 double Y[N];double U[N];double X[N];        //解空间向量double L;int i,j;memset(Y,0,sizeof(Y));memset(U,0,sizeof(U));memset(X,0,sizeof(X));/***1.求解Y空间向量 *追的过程(消元) */ Y[1] = f[1] / b[1];U[1] = c[1] / b[1];for (i = 2; i < N - 1; i++) {L = b[i] - a[i] * U[i - 1]; //计算L的值 U[i] = c[i] / L;    Y[i] = (f[i] - a[i] * Y[i - 1]) / L; }/***赶的过程(回代) */ Y[N - 1] = (f[N-1] - Y[N - 2] * a[N - 1]) / (b[N -1] - U[N - 2] * a[N - 1]); X[N-1] = Y[N - 1];for (i = N - 2; i > 0; i--) {       X[i] = Y[i] - U[i] * X[i + 1]; }printf("\n");display(X);}

雅克比与高斯赛德尔迭代法

【计算方法】解线性方程组的四种方法相关推荐

  1. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  2. python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  3. mvc ajax提交html标签,Mvc提交表单的四种方法全程详解

    Mvc提交表单的四种方法全程详解 2019-01-05 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了Mvc提交表单的四种方法全程详解,编程之家小编觉得挺不错的 ...

  4. 5 获取窗口位置_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  5. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  6. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  7. 遍历Map的四种方法之map.entry详解

    Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Va ...

  8. MATLAB求解线性方程组的八种方法

    MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seid ...

  9. linux安装IPython四种方法

    IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPytho ...

  10. 用MATLAB结合四种方法搜寻罗马尼亚度假问题

    选修了cs的AI课,开始有点不适应,只能用matlab硬着头皮上了,不过matlab代码全网仅此一份,倒有点小自豪. 一.练习题目 分别用宽度优先.深度优先.贪婪算法和 A*算法求解"罗马利 ...

最新文章

  1. php unicode转义字符串,PHP字符串中的Unicode字符
  2. aop框架的一个简单实现
  3. LiveData使用和生命感知原理
  4. 公共基础选择题—关系代数和范式
  5. uva-10152-乌龟排序
  6. 更改Windows默认收藏夹路径我有三法
  7. ES5-10 原型、原型链、闭包立即执行函数、插件开发
  8. Get和Post请求和对应的参数获取
  9. C++, ID、指针、handle (void *)的区别
  10. Shell—grep、sed、awk
  11. python中如何编写代码输入多个数据并把它们放在一个列表中去_10分钟学习函数式Python...
  12. 管理服务器文件绿色版本,Services.msc服务器文件官方版
  13. 抓人眼球!插画风精美的网站首页设计欣赏
  14. 随想录(英语学习的几个误区)
  15. 181223每日一句
  16. 18awg线材最大电流_USB4来了,最大的变化是这个
  17. ssm项目之Bookstrap创建页面并分页查询
  18. Spring cloud oauth2搭建OAuth2.0授权服务
  19. 如何出售自己的代码并且不让人看到自己的源码?
  20. python 调用HEG工具批量处理modis数据将hdf转为tif

热门文章

  1. sprintf和fprintf
  2. 荆门市建设企业网站多少钱,荆门口碑好的网站建设多少钱
  3. 两台计算机共享文件夹,两台电脑共享文件,详细教您两台电脑如何共享文件
  4. 指付通盗刷信用卡维权连载--9月5日给上海银监局的一封信
  5. 计算机键盘锁不了怎么办,键盘锁住了怎么解锁?键盘锁死了怎么办?
  6. 蚂蚁金服刘伟光:我们为什么要科技开放
  7. 抖音图文人物故事音乐任务实操短视频运营课程,手把手教你玩转音乐任务
  8. 802.1x准入控制技术
  9. SOLD2算法之3: 特征点与heatmap结合检测有效线段(CVPR 2021)
  10. Oracle LiveLabs实验:Oracle Database Hybrid Active Data Guard