matlab中求逆矩阵的高斯消元法实现的代码
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中求逆矩阵的高斯消元法实现的代码的更多相关文章
- MATLAB中求矩阵非零元的坐标
MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...
- MATLAB中的多项式运算
作者:长沙理工大学 交通运输工程学院 王航臣 1.多项式求根 在MATLAB中求取多项式的根用roots函数. 函数:roots 功能:一元高次方程求解. 语法:roots(c) 说明:返回一个列向量 ...
- matlab中求解线性方程组的rref函数
摘自:http://www.maybe520.net/blog/987/ matlab中怎么求解线性方程组呢? matlab中求解线性方程组可应用克拉默法则(Cramer's Rule)即通过det( ...
- matlab中矩阵的表示与简单操作
原文地址为:matlab矩阵的表示和简单操作 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间 ...
- MATLAB中FFT的使用方法
MATLAB中FFT的使用方法 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X, ...
- Matlab中函数定义方法
Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...
- MATLAB中白噪声的WGN和AWGN函数的使用
MATLAB中白噪声的WGN和AWGN函数的使用如下: MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一 信号 ...
- matlab中的xcorr 自相关函数
转载自 http://blog.163.com/to_be_myself/blog/static/176060227201101762159227/ Matlab中用于计算自相关函数的指令是xcorr ...
- MATLAB中plot()画图的颜色线型和希腊字母参数设置
y 黄色 · 点线 m 粉红 ○ 圈线 c ...
随机推荐
- js自执行函数&扩展方法
我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件.但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题.那么如何解决这个问题呢?作用域隔离.在JS中,作用域是通过函数来划分 ...
- Tomcat 优化相关知识
---------(Tomcat Listener)----------- Tomcat 性能的因素是内存泄露.Server标签中可以配置多个Listener,其中 JreMemoryLeakPrev ...
- oracle 11 g数据库卸载(方法二)
1.开始->设置->控制面板->管理工具->服务 停止所有 Oracle服务. 2.开始->程序->Oracle - OraHome81->Oracle In ...
- cf780c
C. Andryush ...
- Can't bind multiple parameters ('header' and 'parameters') to the request's content.
2019-01-23 15:46:29.012+08:00 ERROR [6]: System.InvalidOperationException: Can't bind multiple param ...
- POJ 3977 - subset - 折半枚举
2017-08-01 21:45:19 writer:pprp 题目: • POJ 3977• 给定n个数,求一个子集(非空)• 使得子集内元素和的绝对值最小• n ≤ 35 AC代码如下:(难点:枚 ...
- CocoaPods学习系列1——安装和常规使用
CocoaPods是一个Github上的开源项目,目前已经成为iOS开发过程中标准的依赖库管理器,提供了一种对第三方类库简单优雅的集成和管理方案. 其工作原理,是将第三方类库统一管理到一个名为Pods ...
- geoserver源码maven编译相关问题
1.登陆失败跳转404错误 登陆失败后指向的路径为: http://192.168.15.97:8080/hgisserver/web/wicket/bookmarkable/org.geoserve ...
- 调用http接口的工具类
网上面有很多,但是我们项目怎么也调不到结果,试了差不多很多案例,都是报connection reset 后来,我发现是有一个验证,需要跳过验证.然后才能调接口.所以找了一个忽略https的方法.进行改 ...
- 修改当前启动菜单项的HyperVisorLaunchType
switch-hyperv.bat @echo off "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\ ...