C语言求矩阵的行列式、伴随矩阵、逆矩阵 您所在的位置:网站首页 4阶矩阵的伴随矩阵怎么求 C语言求矩阵的行列式、伴随矩阵、逆矩阵

C语言求矩阵的行列式、伴随矩阵、逆矩阵

2024-07-13 01:50| 来源: 网络整理| 查看: 265

CSDN大神编写的求矩阵的行列式,int getA(int arcs[N][N],int n),通过调用递归函数,按矩阵的第一行进行分解,虽然行列式的计算都学过,但是自己写起来还是得费一番功夫的,好在有MATLAB可以验证结果,结果对拿过来就可以直接用。

void getAStart(int arcs[N][N],int n,int ans[N][N]),求矩阵的伴随矩阵,也需要调用求矩阵的行列式。原文地址:

点击打开链接http://blog.csdn.net/abcjennifer/article/details/6693612

验证算法计算速度,当我用C调用去求一个10阶矩阵的行列式和伴随矩阵时,跑10条数据大概用7秒的时间(自己其他函数占用很小时间),但是当矩阵变成15阶时,感觉就计算不出来了,每增加一阶,算法的复杂度都成倍的增长。

无奈计算速度太慢,又需要快速处理大量数据,只好优化算法了,本文绝对算的上是懒人,能找到现成的绝对不自己写!网上搜了下,LU分解貌似效率更高一点,结果找到一篇靠谱的文档:点击打开链接http://www.docin.com/p-690103638.html

文献对矩阵分解的原理进行了详细介绍,当初矩阵分析学的不好,也没仔细看,只可惜找到它太晚,以至于找到他时,我已经照着下面的MATLAB代码把LU分解的C代码写完了,

MATLAB代码如下:

function [L,U]=myLU(A) %实现对矩阵A的LU分解,L为下三角矩阵 [n,n]=size(A); L=zeros(n,n); U=zeros(n,n); for i=1:n L(i,i)=1; end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)'); %U(k,j) end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); %L(i,k) end end 短短几行代码让人用C写的那叫一个痛苦。

参考那个文档把LU 分解后L矩阵(下三角)和U矩阵(上三角)求逆的直接展过来用,对着MATLAB结果,终于对了,不容易啊。用C写程序觉对是需要耐心,MATLAB求行列式一个det就可以了,求逆inv,求伴随是啥命令给忘了,不过直接掉det(A)*inv(A),  得出来的就是伴随矩阵。

验证结果很简单,A=L*U,那么inv(A)=inv(U)*inv(L);

搞定

void myLU(double A[COLUMN][COLUMN],double Low[COLUMN][COLUMN],double Up[COLUMN][COLUMN],int n) { int i,j,k,t,q; //double Low[COLUMN][COLUMN]={0}; double temp1[COLUMN]={0}; double temp2[COLUMN]={0}; double temp3=0; for (i=0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有