你好,我正在嘗試在c中對三角對角矩陣做一個反函數,但是我的代碼給了我一個段錯誤。代碼是三對角矩陣求逆C
/* Inverse of a n by n matrix */
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double J[3][3];
double phi(i, n)
{
double p;
if(i==n)
{
return 1;
}
else if(i==n-1)
{
return J[i][i];
}
else
{
p=J[i][i]*phi(i+1,n)-J[i][i+1]*J[i+1][i]*phi(i+2,n);
}
return p;
}
double theta(i,n)
{
double p;
if(i==-1)
{
return 1;
}
else if(i==0)
{
return J[i][i];
}
else
{
p=J[i][i]*theta(i-1,n)-J[i-1][i]*J[i][i-1]*theta(i-2,n);
}
return p;
}
void main(void)
{
double T[3][3];
int n=3;
int i, j, a, b;
J[0][0]=1;
J[0][1]=1;
J[0][2]=0;
J[1][0]=2;
J[1][1]=2;
J[1][2]=2;
J[2][0]=0;
J[2][1]=2;
J[2][2]=2;
for(i=0; i<n;i++);
{
for(j=0; j<n;j++)
{
b=j;
a=i;
if(i<j)
{
T[i][j]=pow(-1, i+j);
for(a; a<b; a++)
{
T[i][j]*=J[a][a+1];
}
T[i][j]*=theta(i-1,n)*phi(j+1)/theta(n-1,n);
}
else if(i==j)
{
if(i==0)
{
T[i][j]=0;
}
else
{
T[i][j]=theta(i-1,n)*phi(j+1,n)/theta(n-1,n);
}
}
else
{
T[i][j]=pow(-1, i+j);
for(b; b<i; b++)
{
T[i][j]*=J[a][b];
}
T[i][j]*=theta(j-1, n)*phi(i+1,n)/theta(n-1, n);
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%lf\n", T[i][j]);
}
}
}
在那裏的J矩陣只是一個示例矩陣,我將這個代碼實現到另一個調用此函數的矩陣。
歡迎來到SO。沒有可測試的代碼。輸入功能代碼,可以通過樣本輸入來檢查它在哪個區段出現故障。儘管可能的原因是你的循環索引正在向外移動數組 – fayyazkl