矩阵求逆(全选主元高斯-约当消去法)
矩阵求逆(实矩阵)
具体的C实现:
#include "stdlib.h"#include "math.h"#include "stdio.h"int rinv(a,n)int n;double a[];{ int *is,*js,i,j,k,l,u,v;double d,p;is=malloc(n*sizeof(int));js=malloc(n*sizeof(int));for (k=0; k<=n-1; k++){ d=0.0;for (i=k; i<=n-1; i++)for (j=k; j<=n-1; j++){ l=i*n+j; p=fabs(a[l]);if (p>d) { d=p; is[k]=i; js[k]=j;}}if (d+1.0==1.0){ free(is); free(js); printf("err**not inv\n");return(0);}if (is[k]!=k)for (j=0; j<=n-1; j++){ u=k*n+j; v=is[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}if (js[k]!=k)for (i=0; i<=n-1; i++){ u=i*n+k; v=i*n+js[k];p=a[u]; a[u]=a[v]; a[v]=p;}l=k*n+k;a[l]=1.0/a[l];for (j=0; j<=n-1; j++)if (j!=k){ u=k*n+j; a[u]=a[u]*a[l];}for (i=0; i<=n-1; i++)if (i!=k)for (j=0; j<=n-1; j++)if (j!=k){ u=i*n+j;a[u]=a[u]-a[i*n+k]*a[k*n+j];}for (i=0; i<=n-1; i++)if (i!=k){ u=i*n+k; a[u]=-a[u]*a[l];}}for (k=n-1; k>=0; k--){ if (js[k]!=k)for (j=0; j<=n-1; j++){ u=k*n+j; v=js[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}if (is[k]!=k)for (i=0; i<=n-1; i++){ u=i*n+k; v=i*n+is[k];p=a[u]; a[u]=a[v]; a[v]=p;}}free(is); free(js);return(1);}
下面是一个例子:
下面是具体代码,trmul.c表示全选全选主元高斯-约当消去法的代码
解答如下:
void trmul(a,b,m,n,k,c)int m,n,k;double a[],b[],c[];{ int i,j,l,u;for (i=0; i<=m-1; i++)for (j=0; j<=k-1; j++){ u=i*k+j; c[u]=0.0;for (l=0; l<=n-1; l++)c[u]=c[u]+a[i*n+l]*b[l*k+j];}return;}
#include "stdio.h"#include "4rinv.c"#include "4trmul.c"main(){ int i,j;static double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},{1.1161,0.1254,0.1397,0.1490},{0.1582,1.1675,0.1768,0.1871},{0.1968,0.2071,1.2168,0.2271}};static double b[4][4],c[4][4];for (i=0; i<=3; i++)for (j=0; j<=3; j++)b[i][j]=a[i][j];i=rinv(a,4);if (i!=0){ printf("MAT A IS:\n");for (i=0; i<=3; i++){ for (j=0; j<=3; j++)printf("%13.7e ",b[i][j]);printf("\n");}printf("\n");printf("MAT A- IS:\n");for (i=0; i<=3; i++){ for (j=0; j<=3; j++)printf("%13.7e ",a[i][j]);printf("\n");}printf("\n");printf("MAT AA- IS:\n");trmul(b,a,4,4,4,c);for (i=0; i<=3; i++){ for (j=0; j<=3; j++)printf("%13.7e ",c[i][j]);printf("\n");}}}
矩阵求逆(全选主元高斯-约当消去法)相关推荐
- 全选主元matlab,全选主元高斯-约当法实矩阵求逆及传统方法求逆
/* 算法没有做过什么改动,加上了内存释放的部分. 算法介绍 矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵.按照定义的计算方法乘法运算,严重影响了性能.在需要大量Billboard矩 ...
- C#,码海拾贝(24)——求解“复系数方程组”的“全选主元高斯-约当消去法”之C#源代码
using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations ...
- 数值作业:Guass全选主元消去法之C语言代码
全选主元的基本思想:当变换到第K步时,从系数矩阵的右下角(n-k+1)阶子阵中选取绝对值最大的元素,然后通过行变换与列变换将它交换到主元素a[k][k]的位置上.行变换是不影响最后求解的结果的,但是列 ...
- 数值计算(一)之解线性方程组(高斯消去法,列选主元消去法,全选主元消去法,杜立特尔分解,克洛特分解,乔里斯基分解)
解线性方程组即解一个多元一次方程组,例如 目录 消去法 分解法 消去法 原理 没有学过高级的解法也没关系,凭借我们初高中的知识足以解决这个问题 这是一个多元一次方程组,拥有n个未知量,也有n方程 我们 ...
- Matlab实现 LU分解法解线性方程组(全选主元列选主元)
选主元LU分解 实验内容:列选主元LU分解和全选主元LU分解求解线性方程组 计算方法: 全选主元消元法 1.1 初始化 根据参数A.b,记录下矩阵.右端项的尺寸n: 以得到的尺寸n初始化解向量x: 同 ...
- 数值分析(一):全选主元高斯消元法的C++实现
编程最重要的就是要有很强的目的性,面对绝对真诚的计算机时,如果自己还模棱两口,那又如何让计算机明白我们要做的事情呢?所以在编程之前,规划好绝对是磨刀不误砍柴工.笔者基于已有的编程知识,正好又在学习&l ...
- 全选主元高斯消去法 matlab程序,[VB]全选主元高斯消去法求解线性方程组
功能: 使用全选主元高斯消去法求解线性方程组 ' 参数 n - Integer型变量,线性方程组的阶数 ' dblA - Double型 n x n 二维数组,线性方程组的系数矩 ...
- 全选主元的Gauss-Jordan消元法
选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...
- 全选主元高斯消去法 matlab程序,编译无误的全选主元高斯消去法
算法来源于<> 徐士良 著 但,我发现他的算法在传递二维数组时,怎么也不能把数据传入.可能是我的水平有限,没有搞明白为什么.但问题总得解决,所以我做了一点点小小的改动.能通过编译,我用 ...
最新文章
- 用JavaScript写Session的两种方法
- CSS background-position 用法详细介绍
- ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题
- IBM-JAVA面试题
- matlab xlsread参数_利用MATLAB批量完成科研数据处理
- .net remoting 与webservice
- Ubuntu下修改file descriptor
- uni-app 组件中的canvas转化为图片报错:errMsg:“canvasToTempFilePath:fail canvas is empty”
- gerrit Cannot Merge
- 对口升学计算机知识重点,对口升学信息技术(计算机)类2017年专业课考试大纲...
- numpy文件读写的三对函数
- 21天Jmeter打卡Day11配置元件之CSV数据文件配置
- 四、处理表单数据 (基础教程4)
- 顶点计划:寝室作息讨论
- python实现百度翻译
- 远程桌面连接只有2个会话活动
- js 京东关闭广告 pink
- PAKDD 2019 AutoML 挑战赛圆满落幕,中国队伍包揽前三...
- 视频转GIF+GIF录制
- 斗地主不算花色算大小王,起初发到的17张牌有多少种?