當前位置:首頁 » 存儲配置 » 兩矩陣相加紋理存儲器

兩矩陣相加紋理存儲器

發布時間: 2023-02-05 22:27:52

① C語言中怎麼用指針實現兩矩陣的相加(矩陣的行數與列數不相等 比如說是兩行三列)

最簡單的 約定矩陣的行列 然後用二維數組存儲矩陣
在加法的時候 轉換成一維數組 然後按順序相加就可以了
比如
int a[2][3], b[2][3];
//input values
add((int *)a, (int *)b, 2*3);

....
void add(int * a, int *b, int size)
{
int i;

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

a[i] += b[i];

}
這個是把a+b的結果存在a中的 當然也可以小小修改一下 加個參數c 然後把結果存在c中

② Matlab中不同維數矩陣相加問題

這樣:

>>A=[1,2,3;4,5,6;7,8,9],B=[1,2;3,4]

A=

123

456

789

B=

12

34

>>[rA,cA]=size(A);

>>[rB,cB]=size(B);

>>C=zeros(max(rA,rB),max(cA,cB));

>>C(1:rA,1:cA)=A;

>>C(1:rB,1:cB)=C(1:rB,1:cB)+B;

>>C

C=

243

796

789

>>[2,4,3;8,10,6;7,8,9]

ans=

243

8106

789

(2)兩矩陣相加紋理存儲器擴展閱讀:

注意事項

兩個大小不同的矩陣是不能相加的,要實現對應位置相加,需要將緯度較小的擴展為緯度較大的矩陣,沒有數據的位置填上零,形成兩個大小相同的矩陣,然後再相加。

matlab最大的好處就是不用事先定義變數,按列存儲數據,只要每一列的數據個數是不變的,就可以直接使用,直接使用的變數默認為矩陣,只要存儲了第一列數據,其行數就確定了,但列數是可變的,不會報錯,放心使用,但前提是你的行數一旦確定就不能超過第一次使用的行數,否則會報錯,需要另行編製程序。

③ 請C語言高手幫忙編寫兩個稀疏矩陣相加的程序,急!!!

這個程序能實現矩陣的加減乘。
從中刪除你不需要的部分你會吧。
#include<iostream.h>
#include<malloc.h>
#define TRUE 1
#define ERROR 0
#define OK 1
#define MAXISIZE 100
typedef int Elemtype ;
typedef int Status ;
struct Triple
{
int i,j; //行下標,列下標
Elemtype e; //非零元數的值
};
struct TSMatrix
{
Triple data[MAXISIZE+1];
int mu,nu,tu; //矩陣的行數,列數,非零元數
};
Status CreateSMatrix(TSMatrix &M)
{
int i,m,n;
Elemtype e;
Status k;
cout<<"輸入矩陣的行數,列數,非零元數:\n";
cin>>M.mu>>M.nu>>M.tu;
M.data[0].i=0;
for(i=1;i<=M.tu;i++)
{
do
{
cout<<"輸入第"<<i<<"個非零元素所在的行(1~"<<M.mu<<"),列(1~"<<M.nu<<"),元素值:\n";
cin>>m>>n>>e;
k=0;
if(m<1||m>M.mu||n<1||n>M.nu)
{ k=1;
cout<<"元素的行列數輸入錯誤!\n";}
if(m<M.data[i-1].i||m==M.data[i-1].i&&n<=M.data[i-1].j)
k=1;
}while(k);
M.data[i].i=m;
M.data[i].j=n;
M.data[i].e=e;
}
return OK;
}
void DestroySMatrix(TSMatrix &M)
{
M.mu=0;
M.nu=0;
M.tu=0;
}

void PrintSMatrix(TSMatrix M)
{
int i;
cout<<M.mu<<"行"<<M.nu<<"列"<<M.tu<<"個非零元數\n";
cout<<"行 列 元素值\n";
for(i=1;i<=M.tu;i++)
cout<<M.data[i].i<<" "<<M.data[i].j<<" "<<M.data[i].e<<endl;
}
Status Cmp(int a,int b)
{ if(a<b) return 1;
else if(a==b) return 0;
else return -1;
}
Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)
{
Triple *Mp,*Me,*Np,*Ne,*Qh,*Qe;
if(M.mu!=N.mu||M.nu!=N.nu)
return ERROR;
Q.mu=M.mu;
Q.nu=M.nu;
Mp=&M.data[1];
Np=&N.data[1];
Me=&M.data[M.tu];
Ne=&N.data[N.tu];
Qh=Qe=Q.data;
while(Mp<=Me&&Np<=Ne)
{ Qe++;
switch(Cmp(Mp->i,Np->i))
{
case 1: *Qe=*Mp;
Mp++;
break;
case 0: switch(Cmp(Mp->j,Np->j))
{
case 1: *Qe=*Mp;
Mp++;
break;
case 0: *Qe=*Mp;
Qe->e+=Np->e;
if(!Qe->e)
Qe--;
Mp++;
Np++;
break;
case -1: *Qe=*Np;
Np++;
}
break;
case -1: *Qe=*Np;
Np++;
}
}
if(Mp>Me)
while(Np<=Ne)
{
Qe++;
*Qe=*Np;
Np++;
}
if(Np>Ne)
while(Mp<=Me)
{
Qe++;
*Qe=*Mp;
Mp++;
}
Q.tu=Qe-Qh;
return OK;
}
Status SubSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)
{
int i,l;
for(i=1;i<=N.tu;i++)
N.data[i].e*=-1;
l=AddSMatrix(M,N,Q);
return l;
}
Status MultSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)
{
int i,j,h=M.mu,l=N.nu,Qn=0;
Elemtype *Qe;
if(M.nu!=N.mu)
return ERROR;
Q.mu=M.mu;
Q.nu=N.nu;
Qe=(Elemtype *)malloc(h*l*sizeof(Elemtype));
for(i=0;i<h*l;i++)
*(Qe+i)=0;
for(i=1;i<=M.tu;i++)
for(j=1;j<=N.tu;j++)
if(M.data[i].j==N.data[j].i)
*(Qe+(M.data[i].i-1)*l+N.data[j].j-1)+=M.data[i].e*N.data[j].e;
for(i=1;i<=M.mu;i++)
for(j=1;j<=N.nu;j++)
if(*(Qe+(i-1)*l+j-1)!=0)
{
Qn++;
Q.data[Qn].e=*(Qe+(i-1)*l+j-1);
Q.data[Qn].i=i;
Q.data[Qn].j=j;
}
free(Qe);
Q.tu=Qn;

return OK;
}
void main()
{char a;
int h;
TSMatrix A,B,C;
cout<<"創建矩陣A:\n";
CreateSMatrix(A);
PrintSMatrix(A);
cout<<"創建矩陣B:\n";
CreateSMatrix(B);
PrintSMatrix(B);
cout<<"選擇操作:\n"<<"A.兩稀疏矩陣的和\n"<<"B.兩稀疏矩陣的差\n"<<"C.兩稀疏矩陣的積\n"<<"Q.退出\n";
cin>>a;
while(a!='Q')
{
switch(a)
{
case 'A':
h=AddSMatrix(A,B,C);
if(h==1)
{cout<<"兩稀疏矩陣的和為:\n";
PrintSMatrix(C);
}
else cout<<"該兩稀疏矩陣不能求和!\n";
break;
case 'B':
h=SubSMatrix(A,B,C);
if(h==1)
{ cout<<"兩稀疏矩陣的差為:\n";
PrintSMatrix(C);
}
else cout<<"該兩稀疏矩陣不能求差!\n";
break;
case 'C':
h=MultSMatrix(A,B,C);
if(h==1)
{cout<<"兩稀疏矩陣的積為:\n";
PrintSMatrix(C);
}
else cout<<"兩稀疏矩陣不能求積!\n";
break;
default: cout<<"輸入錯誤!請重新輸入\n";
}cin>>a;
}DestroySMatrix(A);
DestroySMatrix(B);
DestroySMatrix(C);
}

④ 用C語言編寫程序(兩個矩陣相加)

用C語言編寫程序(兩個矩陣相加)代碼如下:

/**

MatrixAddition.c

實現兩個矩陣相加

*/

#include<stdio.h>

const int COLS=3;

void printMatirx(int *pArray,int rows,int cols);

void printMatirx2(int (*pArray)[COLS],int rows);

int main()

{

int A[3][4]={{15,10,9,12},

{18,14,8,7},

{16,13,6,11}};

printf("矩陣A= ");

printMatirx(A,3,4);

int B[3][4]={{4,3,5,2},

{0,9,6,1},

{5,7,2,6}};

printf("矩陣B= ");

printMatirx(B,3,4);

int C[3][4];

int i,j;

//矩陣相加:兩個矩陣必須行數和列數一樣才能相加,

//和矩陣的每個元素分別是兩個矩陣對應的元素的和

printf("矩陣A+矩陣B= ");

for(i=0;i<3;i++)//控制行

{

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

{

C[i][j]=A[i][j]+B[i][j];

//printf("%3d",C[i][j]);//輸出結果

}

// printf(" ");

}

int (*p)[COLS]=C;

printMatirx2(p,3);

/*結果應為:

19 13 14 14

18 23 14 8

21 20 8 17

*/

printf("矩陣C-矩陣A= ");

for(i=0;i<3;i++)//控制行

{

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

{

printf("%3d",C[i][j]-A[i][j]);//輸出結果

}

printf(" ");

}

/*結果應為:

4 3 5 2

0 9 6 1

5 7 2 6

*/

//矩陣數乘:

int D[3][4];

printf("矩陣D: ");

for(i=0;i<3;i++)//控制行

{

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

{

D[i][j]=1;

printf("%d ", D[i][j]);//輸出結果

}

printf(" ");

}

int mul;

printf("矩陣D數乘以:");

scanf("%d",&mul);

printf("矩陣D數乘以%d= ",mul);

for(i=0;i<3;i++)//控制行

{

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

{

D[i][j]=D[i][j]*mul;

printf("%d ", D[i][j]);//輸出結果

}

printf(" ");

}

return 0;

}

(4)兩矩陣相加紋理存儲器擴展閱讀:

C語言矩陣加減法函數:

void matrix_a(double **a_matrix, const double **b_matrix, const double **c_matrix,int krow, int kline, int ktrl)

////////////////////////////////////////////////////////////////////////////

// a_matrix=b_matrix+c_matrix

// krow :行數

// kline :列數

// ktrl :大於0: 加法 不大於0:減法

////////////////////////////////////////////////////////////////////////////

{

int k, k2;

for (k = 0; k < krow; k++)

{

for(k2 = 0; k2 < kline; k2++)

{

a_matrix[k][k2] = b_matrix[k][k2]

+ ((ktrl > 0) ? c_matrix[k][k2] : -c_matrix[k][k2]);

}

}

}

熱點內容
數據加密的使用 發布:2025-07-15 21:45:41 瀏覽:276
linux字元統計 發布:2025-07-15 21:43:17 瀏覽:461
pythonisnan 發布:2025-07-15 21:42:27 瀏覽:28
vs編譯器版本 發布:2025-07-15 21:39:51 瀏覽:220
冰箱壓縮機接水盒 發布:2025-07-15 21:27:00 瀏覽:609
xplinux雙系統 發布:2025-07-15 21:26:54 瀏覽:615
優酷上傳視頻有限制嗎 發布:2025-07-15 21:10:35 瀏覽:583
雲存儲漏錄 發布:2025-07-15 21:00:49 瀏覽:66
編譯主要分為哪幾個階段 發布:2025-07-15 20:58:11 瀏覽:634
少兒編程培訓費 發布:2025-07-15 20:52:17 瀏覽:191