利用F28335对数据进行处理,需要定义一个57维矩阵的求逆方法,其中需要一个大维数矩阵求行列式的方法,运算的时候用一维数组代替二维矩阵,代码如下:
void cofSeek(float mat[],int raw,int col,int n,float res[]) //求坐标为(raw,col)的余子式,mat:原方阵,res:余子式方阵。
{
int k=0;
int i;
for(i=0;i<n*n;i++)
{
if(!(i>=(raw-1)*n&&i<raw*n)&&!(i%n==col-1)){
res[k]=mat[i];
k++;
}
}
return ;
}
float detMat(float mat[],int n) //求行列式,用到了递归的思想。
{
int i;
if(n==1)
{
return mat[0];
}
else
{
float ans;
ans = 0;
for(i=0;i<n;i++)
{
float b[1000];
cofSeek(mat,1,1+i,n,b);
ans+=pow(-1,i)*mat[i]*detMat(b,n-1);
}
return ans;
}
}
dubug调试的时候,当方阵的维数不超过5维时,正常运行,当维数超过5时,程序就卡在deMat()函数中没反应了,此时也无法步进。但是程序无任何报错,估计应该是相关的内存容量不够了,所以想请问下如何处理。附上主函数:
void main(void)
{
eyeMat(testmat,6);//testmat是一个一维数组,后面的6代表矩阵的维数。
anss = detMat(testmat,6);//6维的时候程序debug就卡在这一行代码不动了。
…
}
Susan Yang:
您可以看一下E2E上的相关讨论:
e2e.ti.com/…/compiler-tms320f28069-slow-matrix-calculations
e2e.ti.com/…/2994091
以及文档
www.ti.com/…/spra958l.pdf
从flash来运行程序