function qiuni =INV_GET(a)
N=length(a);
M=eye(N);
%得到上三角矩?
for i=1:N
max=a(i,i);
A=i;
for j=i+1:N
if(abs(a(j,i))>abs(max))%找最大值
max=a(j,i);
A=j;
end
end
for m=1:N
temp1=a(i,m);%交换最大值值所在的行和当前行
a(i,m)=a(A,m);
a(A,m)=temp1;
temp2=M(i,m);
M(i,m)=M(A,m);
M(A,m)=temp2;
end
for k=i+1:N
jiaquan=a(k,i)/a(i,i);%其他行加权得到上三角
for n=1:N
a(k,n)=a(k,n)-jiaquan*a(i,n);
M(k,n)=M(k,n)-jiaquan*M(i,n);
end
end

end
temp3=a;
%得到单位矩阵
for s=N:-1:1
xishu1 =a(s,s);
for p=s:N
a(p,s)=a(p,s)/xishu1;
end
for q=1:N
M(s,q)=M(s,q)/xishu1;
end
for w=s-1:-1:1
xishu=a(w,s);
a(w,s)=0;
for t=1:N
M(w,t)=M(w,t)-xishu*M(s,t);
end
end
end
temp2=a;
qiuni=M;

参考的c语言程序和注释

#include<stdio.h>

#include<math.h>

long int const N=1000;     //定义矩阵最大为1000阶

int n;              //n表示矩阵的行数和列数。

double juzhen[N][N]; //定义一个1000阶矩阵

double danwei[N][N];   //定义一个单位矩阵

bool zhaozuidazhi(int s)//定义一个布尔型从s行到n行选择最大的元素作为主元的函数。

{

    int i,j,A;

    double mas,temp;   //temp为中间变量,实现行交换

    mas=fabs(juzhen[s][s]);    //数学函数:fabs  功能:求浮点数juzhen[s][s]的绝对值

    //计算juzhen[s][s], 当juzhen[s][s]不为负时返回juzhen[s][s],否则返回-juzhen[s][s]

    A=s;

    for(i=s+1;i<n;i++)

    {

       if(mas<fabs(juzhen[i][s]))

       {

           mas=fabs(juzhen[i][s]);

           A=i;

       }

    }

    if(mas==0)

       return false;

    //交换两行

    for(j=0;j<n;j++)

    {

       temp=juzhen[s][j];

       juzhen[s][j]=juzhen[A][j];

       juzhen[A][j]=temp;

      

       temp=danwei[s][j];

       danwei[s][j]=danwei[A][j];

       danwei[A][j]=temp;

    }

    return true;

}

void jisuan(int s)  //消元计算

{

    int i,j;

    double mas=juzhen[s][s],r;

    for(i=s+1;i<n;i++)

    {

       r=juzhen[i][s]/mas;

       for(j=0;j<n;j++)

       {    //利用消元计算方阵使之成为上三角矩阵,最后使主对角线上的元素相乘就是最终结果 

           juzhen[i][j]=juzhen[i][j]-juzhen[s][j]*r;

           danwei[i][j]=danwei[i][j]-danwei[s][j]*r;

       }

    }

}

void HH(int s)

{

    int i,j;

    double mas;

    mas=juzhen[s][s];

    for(i=s;i<n;i++)

       juzhen[s][i]=juzhen[s][i]/mas;

    for(i=0;i<n;i++)

       danwei[s][i]=danwei[s][i]/mas;

    for(i=s-1;i>=0;i--)

    {

       mas=juzhen[i][s];

       juzhen[i][s]=0;

        for(j=0;j<n;j++)

           danwei[i][j]=danwei[i][j]-mas*danwei[s][j];

    }

}

int main()

{

    int i,j;

zl: printf("第一行输入矩阵的阶数,然后回车输入原始矩阵:\n");

    scanf("%d",&n);

    for(i=0;i<n;i++)

    {

       for(j=0;j<n;j++)

       {

           if(i==j) danwei[i][j]=1;

           else danwei[i][j]=0;

           scanf("%lf",&juzhen[i][j]);//C语言的函数参数是传值而不是传引用的,

           //通常函数无法修改和操作参数.scanf可以修改参数的原因是传给scanf的

           // 那个参数是一个指针,scanf通过传过来的指针来修改指针指向的内容。所以,

           //把x取地址再传过去。&是取juzhen[i][j]的地址,%lf是说juzhen[i][j]是一个双精度浮点型.

       }

    }

   

    //将原始矩阵转成上三角矩阵

    for(i=0;i<n-1;i++)

    {

       //每一次选一个绝对值最大的值作为a[i]即主元

       if(zhaozuidazhi(i)) //函数调用

       {

           jisuan(i);   //函数调用

 

       }

       else

       {

           printf("该矩阵不可逆");//高斯消去法不能将原始矩阵化为三角形的格式,

                                 //那就代表原始矩阵是一个不可逆的矩阵,

           return 0;

       }

    }

    //将原始矩阵转化成单位矩阵

    for(i=n-1;i>=0;i--)

    {

       HH(i);

    }

         printf("\n原始矩阵的逆矩阵为:\n");//输出逆矩阵语句

         for(i=0;i<n;i++)

         {    

             for(j=0;j<n;j++)

                printf("%.2lf ",danwei[i][j]);//%.2lf在printf()里表示按下面格式

             // 输出一个long double型数:整数部分输出全部输出小数部分输出2位,

             //没有小数的输出两个0,不足两位的后面补0,大于两位的截短到两位。

              //测试结果会出现两位小数

     

             printf("\n");

         }

         goto zl;

}

matlab中求逆矩阵的高斯消元法实现的代码的更多相关文章

  1. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  2. MATLAB中的多项式运算

    作者:长沙理工大学 交通运输工程学院 王航臣 1.多项式求根 在MATLAB中求取多项式的根用roots函数. 函数:roots 功能:一元高次方程求解. 语法:roots(c) 说明:返回一个列向量 ...

  3. matlab中求解线性方程组的rref函数

    摘自:http://www.maybe520.net/blog/987/ matlab中怎么求解线性方程组呢? matlab中求解线性方程组可应用克拉默法则(Cramer's Rule)即通过det( ...

  4. matlab中矩阵的表示与简单操作

    原文地址为:matlab矩阵的表示和简单操作 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间 ...

  5. MATLAB中FFT的使用方法

    MATLAB中FFT的使用方法 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X, ...

  6. Matlab中函数定义方法

    Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...

  7. MATLAB中白噪声的WGN和AWGN函数的使用

    MATLAB中白噪声的WGN和AWGN函数的使用如下: MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一 信号 ...

  8. matlab中的xcorr 自相关函数

    转载自 http://blog.163.com/to_be_myself/blog/static/176060227201101762159227/ Matlab中用于计算自相关函数的指令是xcorr ...

  9. MATLAB中plot()画图的颜色线型和希腊字母参数设置

    y         黄色           ·             点线      m         粉红           ○             圈线      c          ...

随机推荐

  1. Zabbix Linux http 监控脚本

    说明:自定义监控脚本,监控内存是否启用主进程 创建文件:vim check_http.sh #!/bin/bash result=`ps -ef | grep httpd | grep -v grep ...

  2. 8月份的To-Do List

    1.汲取归纳<Effective Objective-C 2.0 >的知识点 2.回顾网易云课堂翁恺老师的C语言相关课程, 为学习算法做好准备 3.读完Kelly McGonigal的&l ...

  3. HDU 5703

    题意:给你一个数n,问将n分为正整数和的方案数.如n=3共四种,1 1 1 , 1 2 , 2 1 ,3 . 思路:隔板法,n个1,有n-1个空位,每个空位可以选择是否插入隔板,插入k(0<=k ...

  4. Maven的简介

    1 What? 1.1 Maven 简介Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理.Maven 这个单词的本意是:专家,内行. ...

  5. mysql-8.0.11-winx64.zip安装教程

    mysql-8.0.11-winx64.zip安装教程   下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/download ...

  6. coredump调试小结

    在已经启动的进程中使用gdb,用gdb attach 查看so文件中的函数列表 nm -D *.so 关于c.c++类的gdb调试,强烈推荐一本书:debug hack

  7. 网络数据包头部在linux网络协议栈中的变化

    接收时使用skb_pull()不断去掉各层协议头部:发送时使用skb_push()不断添加各层协议头部. 先说说接收: * eth_type_trans - determine the packet' ...

  8. 编写一个程序,将 d:\java 目录下的所有.java 文件复制到 d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。

    package IO; import java.io.*; public class FileCopy { public static void main(String[] args) throws ...

  9. Aizu 2677 Breadth-First Search by Foxpower LCA+bfs

    A - Breadth-First Search by Foxpower Problem Statement Fox Ciel went to JAG Kingdom by bicycle, but ...

  10. js插件封装

    插件封装原则 1.暴露出来的实例必须只能是一个 2.IIFE包裹 !执行包裹 函数作用域保护 3.实例化方法不要写在函数内 throw这个方法是报错