C语言实现直接法解线性方程组
来源:互联网 发布:如何在淘宝上搜高仿 编辑:程序博客网 时间:2024/06/02 05:55
首先说以下什么是直接法,以及有哪些方法属于直接法。
直接法:经过有限步运算就能求得精确解的方法。
主要包括以下四种:
Ø 顺序高斯消去法
Ø 选主元高斯消去法
Ø 高斯-约当消去法
Ø 矩阵三角分解法
这里主要阐述顺序高斯消去法接线性方程组(其他方法都是在这个的基础的稍作变化)
一.基本思想
利用线性方程组初等变换中的一种变换,即用一个不为零的数乘以一个方程加至
另一个方程,使方程组变成同解的上三角方程组,然后再自上而下对上三角方程组求解。
二.两个过程
顺序高斯消去法分为“消去”和“回代”两个过程。
三.一般求解过程
四.使用条件
因为这里涉及到对角线元素的除法,所以需要对角线上的元素全不为0。这里用一个
定理来说明:
方程组系数矩阵的顺序主子式全不为0,才能用高斯消去法实现方程组的求解。
五.代码实现
<span style="color:#330099;"><span style="white-space: pre;"></span>/**作者:朱康*时间:2016/5/1416:49 *描述:使用顺序高斯消去法求线性方程组的解*/#include<stdio.h>void cal_elimination(double p[][20], double *constant_vector, int n); //消去void cal_substitution(double p[][20], double *constant_vector, double *matrix_result, int n); //回代void print_elimi(double p[][20], int n);//输出变换后的系数矩阵void print_const(double *constant_vector, int n);//输出变换后的常向量矩阵void print_result(double *matrix_result, int n);//输出解void main(){double matrix_coeff[20][20]={0};//系数矩阵double (*p)[20] = matrix_coeff;double constant_vector[20]={0};//常向量double matrix_result[20]={0};printf("请输入解向量的数目:\n");int n;scanf("%d", &n);printf("请输入系数矩阵:\n");int i, j;for(i = 0; i < n; i++){for(j = 0; j < n; j++){scanf("%lf", p[i] + j);}}printf("请输入%d个常向量:\n", n);for(i = 0; i < n; i++){scanf("%lf", &constant_vector[i]);}p = matrix_coeff;cal_elimination(p, constant_vector, n);print_elimi(p, n);print_const(constant_vector, n);cal_substitution(p, constant_vector, matrix_result, n);print_result(matrix_result, n);}//void cal_elimination(int (*p)[20], int n)//消去void cal_elimination(double p[][20], double *constant_vector, int n)//消去{int i, j, t = 0, r = 0;double temp[20] = {0};double con_temp = 0;for(; r < n ; r++){for(i = r; i < n - 1; i++)//行坐标{double k1 = -(p[i + 1][r] / p[r][r]);//计算每次要加的值,对于系数矩阵double k2 = k1 * constant_vector[r];//计算每次加到常向量上的值for(j = 0; j < n; j++){temp[j] = p[r][j] * k1;}t = i + 1;for(j = 0; j < n; j++){p[t][j] += temp[j];}constant_vector[t] += k2;//计算常向量上的值}}}void cal_substitution(double p[][20], double *constant_vector, double *matrix_result, int n)//回代求解{int i, j;matrix_result[n - 1] = constant_vector[n - 1] / p[n - 1][n - 1]; for(i = n - 2; i >= 0; i--){double temp = 0; for(j = i + 1; j < n; j++){temp += p[i][j] * matrix_result[j];}matrix_result[i] = (constant_vector[i] - temp) / p[i][i];}}void print_elimi(double p[][20], int n){printf("变换后的系数矩阵:\n");int i, j;for(i = 0; i < n; i++){for(j = 0; j < n; j++){printf("%5.1lf", p[i][j]);}printf("\n");}}void print_const(double *constant_vector, int n){printf("变换后的常向量矩阵:\n");int i;for(i = 0; i < n; i++){printf("%5.1f\n", *(constant_vector + i));}printf("\n");}void print_result(double *matrix_result, int n){int i;printf("解为:\n");for(i = 0; i < n; i++){printf("x%d=%4.4f\n", i, *(matrix_result + i));}printf("\n");}
六.运行结果
0 0
- C语言实现直接法解线性方程组
- 【算法】 C/C++实现直接法解线性方程组
- 列主元Gauss消去法解线性方程组(C语言)
- 实验一 直接法解线性方程组(android)
- 线性方程组的直接法
- Jacobi迭代法解线性方程组(C语言)
- C语言求解线性方程组
- 线性方程组算法(C语言)
- 工程计算3——解线性方程组的直接法
- 高斯消去法_解线性方程组的直接解法
- 高斯列主元消去法_解线性方程组的直接解法
- 数值作业:顺序消去法解线性方程组之C语言代码
- LU分解法解线性方程组(C语言)
- 高斯—赛德尔迭代法解线性方程组(C语言)
- python实现QR法解线性方程组
- 数值分析课实验-求解线性方程组的直接法C代码
- 直接法(高斯)求解线性方程组
- C语言求解线性方程组AX=b
- 常用数据结构汇总
- 【数据结构】构造二叉树的三种方法
- 16色工具栏
- apach服务器使用以及设置
- Java8 Stream 初探(一)
- C语言实现直接法解线性方程组
- 一个改进造成的血案
- tslib编译与安装
- cmd中javac 和 java的用法
- OBIEE权限控制
- Coverity 静态分析 VS Code Review 代码审查
- 3712: [PA2014]Fiolki LCA 思路题
- SPL标准库学习笔记
- mysql 中的语法执行顺序