c语言中的矩阵求逆程序,C语言矩阵求逆
根据代数里面的知识,可以使用伴随矩阵也可以使用初等行变换来解求解,但是这样如果矩阵的维数较大的时候,使用这种方法,矩阵的维数变大时,计算量急剧的变大,计算时间和使用内存也会按着指数急剧上升,这样的算法的生命力不行。
使用以下这种算法的计算量和使用内存不会发生急剧的变化,特别是矩阵在维数大的时候。
高斯-约旦法(全选主元)求逆的步骤如下:
首先,对于 k 从 0 到 n - 1 作如下几步:
从第 k 行、第 k
列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。这一步称为全选主元。
m(k, k) = 1 / m(k, k)
m(k, j) = m(k, j) * m(k, k),j = 0, 1, ..., n-1;j != k
m(i, j) = m(i, j) - m(i, k) * m(k, j),i, j = 0, 1, ..., n-1;i, j !=
k
m(i, k) = -m(i, k) * m(k, k),i = 0, 1, ..., n-1;i != k
最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复的原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。
#include"stdio.h"
#include"malloc.h"
#include"math.h" //数学函数
void main()
{ int inv(double *p,int n);
double
a[4][4]={{1,2,0,0},{2,5,0,0},{0,0,3,0},{0,0,0,1}},*ab;
ab=a[0];
int n=4,i=0,j;
i=inv(ab,n); //调用矩阵求逆
if(i!=0) //如果返回值不是0
for(i=0;i
{ putchar('\n');
for(j=0;j
printf("%f ",a[i][j]);
}
}
int inv(double *p,int n)
{
void swap(double *a,double *b);
int *is,*js,i,j,k,l;
for(i=0;i
{ putchar('\n');
for(j=0;j
printf("%f ",*(p+i*n+j));
}
puts("\n\n\n\n");
double temp,fmax;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
for(k=0;k
{
fmax=0.0;
for(i=k;i
for(j=k;j
{ temp=fabs(*(p+i*n+j));//找最大值
if(temp>fmax)
{ fmax=temp;
is[k]=i;js[k]=j;
}
}
if((fmax+1.0)==1.0)
{ free(is);free(js);
printf("no inv");
return(0);
}
if((i=is[k])!=k)
for(j=0;j
swap(p(k*n+j),p(i*n+j));//交换指针
if((j=js[k])!=k)
for(i=0;i
swap(p(i*n+k),p(i*n+j)); //交换指针
p[k*n+k]=1.0/p[k*n+k];
for(j=0;j
if(j!=k)
p[k*n+j]*=p[k*n+k];
for(i=0;i
if(i!=k)
for(j=0;j
if(j!=k)
p[i*n+j]=p[i*n+j]-p[i*n+k]*p[k*n+j];
for(i=0;i
c语言中的矩阵求逆程序,C语言矩阵求逆相关推荐
- c语言中常用的程序,C语言一些常用语句
一 break 1. break语句形式: break; 2. break语句功能: A. switch语句中,break语句会终止其后语句的执行,退出switch语句. B. 使一个循环立即结束,也 ...
- c语言中用户验证程序,C语言用户登录系统账户密码比对
满意答案 kcuapra 2018.08.14 采纳率:49% 等级:9 已帮助:465人 #include #include typedef struct account{ char name ...
- c语言程序设计 徐庆生,C语言中循环结构程序课的教学设计与探讨.doc
C语言中循环结构程序课的教学设计与探讨 摘要:循环结构的程序设计是面向过程的程序设计课程的核心部分,掌握好循环结构的程序设计技术对学好此类课程至关重要.本文重点介绍了"C语言程序设计&quo ...
- verilog语言中的@什么意思 verilog语言中的@什么意思
verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...
- c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...
下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...
- c语言微秒级延迟程序,C语言中生产随机数及计算运行时间(微秒级)
java中要生产随机数的 话 直接 new一个 Random就 可以 了 ,c语言中的话会稍微麻烦一点点. 计算运行时间 在比较算法运行效率中 要 用到 . #include #include #in ...
- c语言算正方形面积和周长,c语言中编写一程序计算正方形的周长和面积
C语言 编写程序,从键盘输入一个正数,计算该数的平方根. #include#includeintmain(){\x09doublex;\x09scanf("%lf",&x) ...
- 浅谈c语言中怎么让程序直接结束(待补充)
1.可以选择用return 如果是int main,就直接写return 0 如果是void main,就直接写return 2.goto-label(不建议使用) 即利用goto强制性跳转 直接应用 ...
- c语言中如何用程序判断double型的浮点数能精确到几位小数,C语言中浮点数double/float相等判断...
#include #include /* fabs */ #ifdef _WIN32 // #include #endif //输出的数值不断递增,即使将10改成10.0,循环也没有中止,为什么? v ...
- c语言中合法转义字符,判断c语言合法转义字符
满意答案 UniTubeStar 2018.01.11 采纳率:45% 等级:12 已帮助:5850人 单独一个 \ 不是合法转义字符. 转义字符 就是指 反斜杠后面的字符,不按原意 解释,而要 ...
最新文章
- 圆弧周长公式_建筑工程施工,最常用计算公式 (大全)
- C语言鸡尾酒排序cocktail sort算法(附完整源码)
- 第三章:3.2 get 请求
- PERL 实现微信登录
- Spring : Spring AOP 中的增强(Advice)或者通知
- 两级压缩机行业调研报告 - 市场现状分析与发展前景预测
- Spring Boot 默认数据源 HikariDataSource 与 JdbcTemplate 初遇
- Python3.6+selenium2.53.6自动化测试_禅道新增BUG(一)(本地禅道)
- mmdetection tools工具梳理
- edgy trees_在Ubuntu Edgy上安装TrueCrypt
- win10语音助手服务器,深入了解“小娜”Win10语音助手详解
- loadRunner通过谷歌浏览器代理录制脚本
- JAVA生成安卓签名证书
- VS2019 MFC模式下如何调用控制台并用cprintf在控制台打印
- Java黑皮书课后题第2章:2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示用户输入磅数,然后转换为千克并显示结果。1磅等于0.454千克
- pycharm平台下的Django教程(初学者的最爱)
- OSChina 周四乱弹 ——老板:把骨头统统交出来
- c语言花卉销售与管理系统,花卉销售与管理系统
- 等号(=),双等号(==)还有三等号(===)的使用与区别
- 阿里云IOT-C-SDK系列(4)SDK配置选项理解
热门文章
- 无线路由dns服务器地址,tplink无线路由器怎么设置DNS服务器地址
- vue中使用阿里字体图标库
- python绘制社会关系网络图_python画社交网络图
- 华为防火墙忘记密码,使用console口更改密码
- Linux格式化磁盘并挂载分区
- 网站备案 应该找域名商还是空间商备案
- ios 隔空投安装ipa_ios打ipa包安装到真机进行测试
- UNCODE 与 ANSI 编码互相转换
- iphone换android手机铃声,为什么大多数苹果手机用户只使用默认铃声,从不更换?原因很现实...
- 三星 android 调试模式设置,三星galaxy s4 usb调试在哪里 s4 usb调试模式设置方法详解...