當前位置:編程學習大全網 - 編程語言 - 線性代數問題

線性代數問題

該矩陣的伴隨矩陣是:

5 4 -1

10 12 -3

0 1 1

解題過程:

對於3階矩陣

a11 a12 a13

a21 a22 a23

a31 a32 a33

設該3階矩陣的伴隨矩陣是:

A11 A12 A13

A21 A22 A23

A31 A32 A33

則求各代數余子式:

A11 = (-1)^2 * (a22 * a33 - a23 * a32) = a22 * a33 - a23 * a32

A12 = (-1)^3 * (a21 * a33 - a23 * a31) = -a21 * a33 + a23 * a31

A13 = (-1)^4 * (a21 * a32 - a22 * a31) = a21 * a32 - a22 * a31

A21 = (-1)^3 * (a12 * a33 - a13 * a32) = -a12 * a33 + a13 * a32

........................

A33 = (-1)^6 * (a11 * a22 - a12 * a21) = a11 * a22 - a12 * a21

看妳發在程序設計欄目裏,想必是想用編程來解決求N階矩陣的方法吧,這裏提供個求N階矩陣的伴隨矩陣的C程序,希望對妳有用。

#include <stdio.h>

#include <stdlib.h>

#define MAX 10

void input(float *matrix[],int m,int n);

void output(float *matrix[],int m,int n);

void InputExample();

void Adjoint(float *matrix1[],float *matrix2[],int n);

float AlCo(float* matrix[],int jie,int row,int column);

float determinant(float *matrix[],int n);

float Cofactor(float* matrix[],int jie,int row,int column);

int main()

{

float *matrix1[MAX],*matrix2[MAX];

int n;

printf("輸入行列式的階數:");

scanf("%d",&n);

InputExample();

printf("開始輸入矩陣:\n");

input(matrix1,n,n);

Adjoint(matrix1,matrix2,n);

printf("它的伴隨矩陣是:\n");

output(matrix2,n,n);

return 0;

}

void input(float *matrix[],int m,int n)

{

int i,j;

for(i=0;i<m;i++)

matrix[i]=(float *)malloc(n*sizeof(float));

printf("Please input the matrix:\n");

for(i=0;i<m;i++)

for(j=0;j<n;j++)

scanf("%f",matrix[i]+j);

}

void output(float *matrix[],int m,int n)

{

int i,j;

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

printf("%f\t",*(matrix[i]+j));

printf("\n");

}

}

void InputExample()

{

printf("數據間用空格間隔,輸完壹行按回車。例如:\n");

printf("12 26 48\n");

printf("-1 24 10\n");

printf("2 -6 14\n");

}

void Adjoint(float *matrix1[],float *matrix2[],int n)

{

int i,j;

for(i=0;i<n;i++)

matrix2[i]=(float *)malloc(n*sizeof(float));

for(i=0;i<n;i++)

for(j=0;j<n;j++)

*(matrix2[j]+i)=AlCo(matrix1,n,i,j);

}

float Determinant(float* matrix[],int n)

{

float result=0,temp;

int i;

if(n==1)

result=(*matrix[0]);

else

{

for(i=0;i<n;i++)

{

temp=AlCo(matrix,n,n-1,i);

result+=(*(matrix[n-1]+i))*temp;

}

}

return result;

}

float AlCo(float* matrix[],int jie,int row,int column)

{

float result;

if((row+column)%2==0)

result=Cofactor(matrix,jie,row,column);

else result=(-1)*Cofactor(matrix,jie,row,column);

return result;

}

float Cofactor(float* matrix[],int jie,int row,int column)

{

float result;

int i,j;

float* smallmatr[MAX-1];

for(i=0;i<jie-1;i++)

smallmatr[i]=(float*)malloc(sizeof(float)*(jie-1));

for(i=0;i<row;i++)

for(j=0;j<column;j++)

*(smallmatr[i]+j)=*(matrix[i]+j);

for(i=row;i<jie-1;i++)

for(j=0;j<column;j++)

*(smallmatr[i]+j)=*(matrix[i+1]+j);

for(i=0;i<row;i++)

for(j=column;j<jie-1;j++)

*(smallmatr[i]+j)=*(matrix[i]+j+1);

for(i=row;i<jie-1;i++)

for(j=column;j<jie-1;j++)

*(smallmatr[i]+j)=*(matrix[i+1]+j+1);

result=Determinant(smallmatr,jie-1);

return result;

}

關於補充問題:

a22即矩陣的第2行第2列,例中是1

a33即矩陣的第3行第3列,例中為4

amn即第m行n列的元素。跟數據結構中的二維數組壹樣。

  • 上一篇:紅河java培訓學校告訴妳大數據人才發展與就業前景,妳了解多少?
  • 下一篇:關鍵詞機器人和自動化
  • copyright 2024編程學習大全網