三对角矩阵逆C

三对角矩阵逆C,c,matrix,inverse,C,Matrix,Inverse,您好,我正在尝试用c语言为三对角矩阵生成一个反函数,但我的代码给了我一个segfault错误。代码是 /* 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) {

您好,我正在尝试用c语言为三对角矩阵生成一个反函数,但我的代码给了我一个segfault错误。代码是

/* 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]);
    }
}
}   
n×n矩阵的逆矩阵*/ #包括 #包括 #包括 双J[3][3]; 双φ(i,n) { 双p; 如果(i==n) { 返回1; } else如果(i==n-1) { 返回J[i][i]; } 其他的 { p=J[i][i]*φ(i+1,n)-J[i][i+1]*J[i+1][i]*φ(i+2,n); } 返回p; } 双θ(i,n) { 双p; 如果(i==-1) { 返回1; } else如果(i==0) { 返回J[i][i]; } 其他的 { p=J[i][i]*θ(i-1,n)-J[i-1][i]*J[i][i-1]*θ(i-2,n); } 返回p; } 真空总管(真空) { 双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;
对于(i=0;i首先,您应该将函数签名
double phi(i,n)
替换为
double phi(int i,int n)
。对于θ函数也是如此。此外,在您的代码中,您编写了以下代码:
T[i][j]*=θ(i-1,n)*φ(j+1)/θ(n-1,n);
phi函数应该包含2个参数,因此您可能需要:

T[i][j]*=theta(i-1,n)*phi(j+1, n)/theta(n-1,n);
我还建议您使用
T[I][j]=pow((double)-1),(double)(I+j));

您可以看到。

欢迎使用SO。没有要测试的代码。请输入可以使用示例输入检查的功能代码,该示例输入会将其划分为故障。虽然可能的原因是您的循环索引超出了数组的范围。问题标记为
C
,但您的建议在
C++
中。