當前位置:首頁 » 編程語言 » c語言怎樣求矩陣
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎樣求矩陣

發布時間: 2022-12-23 06:48:00

① 如何用c語言編寫程序求矩陣的值

//矩陣乘積.cpp

#include<stdio.h>

void main()
{
//定義矩陣1、2為輸入數據矩陣,3為乘積後的矩陣
int cJuZhen1[4][3],cJuZhen2[3][2],cJuZhen3[4][2];
//定義兩個指針*p1,*p2分別指向矩陣1、2
int *p1,*p2,i,j;
p1=&cJuZhen1[0][0];
p2=&cJuZhen2[0][0];
//輸入矩陣1的數據
printf("請輸入4*3的矩陣A: \n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",cJuZhen1[i][j]);
}
}
printf("\n");
//輸入矩陣2的數據
printf("請輸入3*2的矩陣B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",cJuZhen2[i][j]);
}
}
printf("\n");
//輸出矩陣1
printf("矩陣A:"\n);
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",cJuZhen1[i][j]);
}
if(j==3)
{
printf("\n");
}
}
printf("\n");
//輸出矩陣2
printf("矩陣B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen2[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
//計算矩陣1、2的乘積
printf("兩矩陣乘積為: \n");
for(i=0;i<4;i++)
{
cJuZhen3[i][0]=(*p1)*(*p2)+(*(p1+1))*(*(p2+2))+(*(p1+2))*(*(p2+4));
cJuZhen3[i][1]=(*p1)*(*(p2+1))+(*(p1+1))*(*(p2+3))+(*(p1+2))*(*(p2+5));
p1=p1+3;
}
//輸出矩陣3(即矩陣乘積)數據
printf("矩陣A與B乘積為: \n");
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen3[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
}

② 怎樣用C語言求矩陣的秩

  1. 這是一個演算法的實現過程。首先需要了解什麼是矩陣的秩,它的計算方法是啥。弄清楚演算法之後,用C語言實現即可。

  2. 在線性代數中,一個矩陣A的列秩是A的線性獨立的縱列的極大數目。類似地,行秩是A的線性無關的橫行的極大數目。通俗一點說,如果把矩陣看成一個個行向量或者列向量,秩就是這些行向量或者列向量的秩,也就是極大無關組中所含向量的個數。

  3. 演算法主要就是消元法,下面是常式:

    /*開始輸入的m為矩陣行數,輸入的n為矩陣列數*/
    #include<stdio.h>
    #include<conio.h>
    #include<dos.h>
    #defineMAX10//最大行(列)數
    typedefstruct
    {intm,n;
    inta[MAX][MAX];
    }matrix;
    voidinput_matrix(matrix*dat);
    voidoutput_matrix(matrixdat);
    voidexchang_row(int*a,int*b,intn);//交換兩行
    voidmul_row(int*a,intk,intn);//將某一行乘以k
    voidadd_row(int*a1,int*a2,intk,intn);//將a2行的k倍加到a1行上
    intrank_matrix(matrixdat,matrix*res);
    voidmain()
    {matrixa,b;
    intr;
    input_matrix(&a);
    r=rank_matrix(a,&b);
    system("cls");
    printf("Theoriginalmatrix: ");
    output_matrix(a);
    printf("Aftertransforming: ");
    output_matrix(b);
    printf(" r(A)=%d ",r);
    getch();
    }
    voidinput_matrix(matrix*dat)//輸入矩陣
    {inti,j;
    do
    {printf("m(1-%d)=",MAX);
    scanf("%d",&(dat->m));
    }while((dat->m)<1||(dat->m)>MAX);
    do
    {printf("n(1-%d)=",MAX);
    scanf("%d",&(dat->n));
    }while((dat->n)<1||(dat->n)>MAX);
    for(i=0;i<(dat->m);i++)
    for(j=0;j<(dat->n);j++)
    {printf("a(%d,%d)=",i+1,j+1);
    scanf("%d",&(dat->a[i][j]));
    }
    }
    voidoutput_matrix(matrixdat)//顯示矩陣
    {intm,n,i,j;
    m=dat.m;n=dat.n;
    for(i=0;i<m;i++)
    {for(j=0;j<n;j++)
    printf("%-4d",dat.a[i][j]);
    printf(" ");
    }
    }
    voidexchang_row(int*a,int*b,intn)
    {inti,t;
    for(i=0;i<n;i++)
    {t=a[i];
    a[i]=b[i];
    b[i]=t;
    }
    }
    voidmul_row(int*a,intk,intn)
    {inti;
    for(i=0;i<n;i++)
    a[i]*=k;
    }
    voidadd_row(int*a1,int*a2,intk,intn)
    {inti;
    for(i=0;i<n;i++)
    a1[i]+=a2[i]*k;
    }
    intrank_matrix(matrixdat,matrix*res)//求秩(返回值為秩,第2個參數為變換得到的階梯陣)
    {intm,n,i,t;
    intri,ci;//行標記與列標記
    intf_z;//某列是否全為0的標志,為1表示全為0
    m=dat.m;n=dat.n;
    for(ri=ci=0;ci<n;ci++)
    {f_z=1;
    for(i=ri;i<m;i++)
    if(dat.a[i][ci]!=0)
    {if(i!=ri)
    if(f_z)
    exchang_row(&(dat.a[ri][ci]),&(dat.a[i][ci]),n-ci);
    else
    {t=dat.a[i][ci];
    mul_row(&(dat.a[i][ci]),dat.a[ri][ci],n-ci);
    add_row(&(dat.a[i][ci]),&(dat.a[ri][ci]),-t,n-ci);
    }
    f_z=0;
    }
    if(!f_z)ri++;
    }
    *res=dat;
    returnri;
    }

③ 如何用c語言寫求矩陣的特徵值和特徵向量

方法1:推導出det(aA-I)=0的解析式,這應該是個四次方程,因為只有4階,不是很困難的,寫出後就可以用方程求根的方法求解(如newton迭代法)

方法2:如果你是對角優勢陣,也就是對角線上的值的絕對值,比同行所有其他元素的絕對值的和還大,可以通過局部旋轉的方法把矩陣「能量」集中到對角線

這個是方法,你可以自己去寫一下試試~

④ c語言矩陣

int
a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};這完全是舉一個例子而已,沒特別的意思,這用的是一個二維數組,可用循環求出最大值tc中顯示不出漢字沒什麼影響,win-tc有中文運行環境,不過有些amd的cpu不支持,如果用c-free或vc++6.0的話就可以顯示了。

⑤ 怎樣用C語言寫矩陣

用二維數組,如下:
#include <stdio.h>
main()
{
int i, j, a[4][4];

for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
scanf ("%d", &a[i][j]);
}
}
//這樣就可以將一個3*3 的矩陣存在2維數組中了

for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
printf (" %-4d ", a[i][j]);
}
printf ("\n");
}
//這樣就可以顯示矩陣
return 0;
}

⑥ C語言求矩陣運算,急

可以用二維數組模擬矩陣,乘法就是A的第一行乘對應B的第一列放在(1,1)位置,然後繼續往後乘。其實進行矩陣計算用MATLAB簡單的多或者C++的Armadillo。

⑦ 用C語言編寫一個矩陣運算的程序,高分!

//矩陣三元組之矩陣相加 相乘
#include <iostream>
using namespace std;
typedef int Elemtype;
#define MAXSIZE 12500 //最大非零元素
typedef struct Triple
{
Elemtype value;
int row,col;
}Triple;

typedef struct TSMatrix
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
TSMatrix T;
void InputMatrix(TSMatrix &T) //輸入t個非零元素
{
cout<<"請輸入稀疏矩陣的信息,(行,列,非零元素個數)"<<endl;
cin>>T.mu>>T.nu>>T.tu;
int i;
cout<<"請輸入非零元素的信息(行,列,值),提醒(下標從1開始)"<<endl;
for(i=1;i<=T.tu;++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value;
}
}

void Output(TSMatrix T)
{
cout<<"矩陣的三元組表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零個數="<<T.tu<<endl;
int i;
for(i=1;i<=T.tu;++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl;
}
}

void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩陣的轉置
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int i,j,k=1;
for(i=1;i<=M.nu;++i)
{
for(j=1;j<=M.tu;++j)
if(M.data[j].col==i)
{
T.data[k].row=i;
T.data[k].col=M.data[j].row;
T.data[k].value=M.data[j].value;
++k;
}
}
}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩陣相加
{
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i<=M.tu&&j<=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;
if(index_a<index_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_b)
{
Q.data[k]=T.data[j];
j++;
k++;
}
else if(index_a==index_b)
{
if((M.data[i].value+T.data[j].value)!=0)
{
Q.data[k]=M.data[i];
Q.data[k].value=M.data[i].value+T.data[j].value;
k++;
}
++i;
++j;
}
}
//復制剩餘元素
for(;i<=M.tu;++i)
{
Q.data[k]=M.data[i];
k++;
}
for(;j<=T.tu;++j)
Q.data[k++]=T.data[j];
Q.tu=k-1;
}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘
{
if(M.nu!=T.mu)
{
cerr<<"兩矩陣相乘不合法"<<endl;
return ;
}
int *rowSize=new int[T.mu+1]; //存放每行非零元素的個數
int *rowStart=new int[T.mu+2]; //矩陣每行在三元組開始位置
int *temp=new int[T.nu+1]; //存放結果矩陣中每行的計算結果
int i,Current,k,ROWM,COLM,COLB;
for(i=1;i<=T.mu;i++) rowSize[i]=0;
for(i=1;i<=T.tu;++i) rowSize[T.data[i].row]++;
rowStart[1]=1;
for(i=2;i<=T.mu+1;i++)
rowStart[i]=rowStart[i-1]+rowSize[i-1];
Current=1; k=1;
while (Current<=M.tu)
{
ROWM=M.data[Current].row; //當前三元組數據中元素的行號
for(i=1;i<=T.nu;++i) temp[i]=0;
while (Current<=M.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //當前元素的列號,方便與T矩陣的行號相乘
for(i=rowStart[COLM];i<rowStart[COLM+1];i++) //對應T矩陣中每行的個數
{
COLB=T.data[i].col;
temp[COLB]+=(M.data[Current].value)*(T.data[i].value);
}
Current++;
}
for(i=1;i<=T.nu;i++)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM;
Q.data[k].col=i;
Q.data[k].value=temp[i];
}
k++;
}
}
Q.mu=M.mu;Q.nu=T.nu;
Q.tu=k-1;
}
int main()
{
TSMatrix T,M,Q,S;
InputMatrix(M);
InputMatrix(T);
cout<<"兩矩陣相乘"<<endl;
Multiply(M,T,Q);
Output(Q);
cout<<"兩矩陣相加"<<endl;
AddMastrix(M,M,S);
Output(S);
system("pause");
return 0;
}

⑧ C語言中求兩個矩陣的和

C語言中求兩個矩陣的和具體如下:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void main()

{

int a[3][3];

int b[3][3];

int i,j,c,x;

printf(" 求兩個矩陣之和 ");

printf("請選擇輸入方式 ");

printf("0為隨機自主輸入,1為人工輸入 ");

scanf("%d",&x);

if(x==1)

{

printf("請輸入兩個3*3矩陣,以回車結束每個數字的輸入 ");

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

{

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

{

printf("a[%d][%d]=",i,j);

scanf("%d",&a[i][j]);

}

}

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

{

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

{

printf("b[%d][%d]=",i,j);

scanf("%d",&b[i][j]);

}

}

}

if(x==0)

{

srand((unsigned int)time(NULL));

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

{

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

{

a[i][j]=rand()%100+1;

}

}

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

{
for(j=0;j<=2;j++)

{

printf("a[%d][%d]=",i,j);

printf("%d ",a[i][j]);
}
}

srand((unsigned int)time(NULL));

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

{

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

{

b[i][j]=rand()%100+1;

}

}

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

{

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

{

printf("b[%d][%d]=",i,j);

printf("%d ",b[i][j]);

}

}

}

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

{

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

{

c=a[i][j]+b[i][j];

printf(" %d ",c);

}

}

}

⑨ C語言中的矩陣是怎樣計算的

矩陣的表示使用二維數組,當然二維數組通常情況下是不可以動態分配的,因此最好已開始定義一個足夠大的數組來存放矩陣元素。至於加減乘逆等運算,主要是利用嵌套循環操作其單個元素,由於每個人的方法不一樣就不詳細說了。希望對你有所幫助。

⑩ c語言矩陣運算

#include<vector>
#include<iostream>
intmain()
{
usingnamespacestd;
intm,n,p;
vector<vector<int>>A,B,C;
cout<<"pleaseinputm,n,p"<<endl;
cin>>m>>n>>p;
vector<int>tmp;
intttp;
for(inti=0;i<m;i++)
{
for(intj=0;j<n;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
A.push_back(tmp);
tmp.clear();
}
for(inti=0;i<n;i++)
{
for(intj=0;j<p;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
B.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
ttp=0;
for(intk=0;k<n;k++)
ttp=ttp+A[i][k]*B[k][j];
tmp.push_back(ttp);
}
C.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
cout<<C[i][j]<<'';
}
cout<<endl;
}
system("pause");
}

現在是2017年10月15日,無意中回答了一道2011年12月09日的題,留念。