C语言求矩阵的行列式、伴随矩阵、逆矩阵 | 您所在的位置:网站首页 › 4阶矩阵的伴随矩阵怎么求 › C语言求矩阵的行列式、伴随矩阵、逆矩阵 |
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 实验室设备网 版权所有 |