gpt4 book ai didi

c - 在 c 中转置 3x3 矩阵的函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:29 25 4
gpt4 key购买 nike

我正在尝试创建一个函数来转置矩阵(调整矩阵)。我尝试了不同的东西,但它仍然崩溃。你有什么想法可能是什么问题?

P.S 我用 adjoint(a, b);

调用这个函数

P.S.S 整个程序的目的是创建一个矩阵的逆。

编辑代码(展示了大部分代码和指向可能导致程序崩溃的函数)

#include <stdio.h>
#include <stdlib.h>
#define SIZE 3 //defining the size of the matrix (3x3)
#define SIZE2 2 //defining the size of the matrix (2x2)


//prototyping the functions used to calculate the inverse of the matrix
void readMatrix(double a[SIZE][SIZE]);
void printMatrix(double a[SIZE][SIZE]);
void printMinorMatrix(double b[SIZE2][SIZE2]);
void selecting(double a[SIZE][SIZE], double b[SIZE2][SIZE2]);
double calculating(double a[SIZE][SIZE],double m[8]);
void anArray(double m[8]);
double convert(double m[8], double [SIZE][SIZE]);
double determ(double m[8], double n[SIZE][SIZE]);
double adjoint(double a[SIZE][SIZE],double b[SIZE][SIZE]);
double multiplyMatrix(double a[SIZE][SIZE], double b[SIZE][SIZE], double
result[SIZE][SIZE]);

int main()
{
double a[SIZE][SIZE];
double b[SIZE2][SIZE2];
double m[8];
double n[SIZE][SIZE];
double d;
double q[SIZE][SIZE];
int i,j,k;



printf("Adjoint of the Matrix:\n");
printf("_________________________________________\n\n");
adjoint(a,b);
printf("\n\n");


printf("Scalar Multiplication:\n");
printf("_________________________________________\n\n");
multiplyMatrix(i,j,k);
printf("\n\n");

return 0;
}




//Reading a 3x3 Matrix
void readMatrix(double a[SIZE][SIZE])


//Printing a 3x3 Matrix
void printMatrix(double a[SIZE][SIZE])


//Printing a 2x2 Matrix
void printMinorMatrix(double b[SIZE2][SIZE2])


//Selecting a 2x2 Matrix from a 3x3 Matrix
void selecting(double a[SIZE][SIZE],double b[SIZE2][SIZE2])


//Calculating the determinant of a 2x2 matrix
double calculating(double a[SIZE][SIZE], double m[8])



//Printing an Array of Length 9
void anArray(double m[8])


//Calculating the determinant of a 3x3 matrix
double determ(double m[8], double n[SIZE][SIZE])


//Converting an Array into a Matrix
double convert(double m[8], double K[3][3])



//Transposing a Matrix
double adjoint(double a[SIZE][SIZE],double b[SIZE][SIZE])
{
int i,j;
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
if(i!=j&&i<j)
{
b[i][j]=a[j][i];
}
else b[i][j]= a[i][j];
}
return b[SIZE][SIZE];
}

//Scalar multiplication
double multiplyMatrix(double a[SIZE][SIZE], double b[SIZE][SIZE], double result[SIZE][SIZE])
{
int i, j, k;

for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
{
result[i][j]=0.0;

for(k=0;k<SIZE;k++){
result[i][j] += a[i][k]*b[k][j];
}
}
}
}

最佳答案

问题是

return b[SIZE][SIZE];

您正在返回一个不存在的值。最后一个入界值是

return b[SIZE-1][SIZE-1];

查看整个代码,在执行代码之前你有很多警告要处理......

题中提到的主要是那个。

传递给 adjoint 函数的 b 矩阵是 2x2 矩阵,而不是 3x3 矩阵

主要是你声明

double a[SIZE][SIZE];
double b[SIZE2][SIZE2];

在哪里

#define SIZE 3 //defining the size of the matrix (3x3)
#define SIZE2 2 //defining the size of the matrix (2x2)

关于c - 在 c 中转置 3x3 矩阵的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44753798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com