向量、矩陣、實數、複數之間的各種運算方法

向量、矩陣、實數、複數之間的各種運算方法

1.複數的乘法

複數 z1 = a + bi。
複數 z2 = c + di。
z1和z2的乘積:(ac-bd)+(bc+ad)i。
以下爲代碼實現:

//複數結構體定義
typedef struct {
	float r;//實數部分
	float i;//虛數部分
}vsip_cscalar_f;

//聲明三個複數
vsip_cscalar_f bufA, bufB, bufR;
bufA.r = 1;
bufA.i = 2;
bufB.r = 3;
bufB.i = 4;

bufR.r = bufA.r*bufB.r - bufA.i*bufB.i;
bufR.i = bufA.r*bufB.i + bufA.i*bufB.r;

2.複數的除法

複數 z1 = a + bi。
複數 z2 = c + di。
z1和z2的除法:(ac+bd)/(c²+d²)+(bc-ad)/(c²+d²)i。
以下爲代碼實現:

//複數結構體定義
typedef struct {
	float r;//實數部分
	float i;//虛數部分
}vsip_cscalar_f;

//聲明三個複數
vsip_cscalar_f bufA, bufB, bufR;
bufA.r = 1;
bufA.i = 2;
bufB.r = 3;
bufB.i = 4;

bufR.r = (bufA.r*bufB.r+bufA.i*bufB.i)/(bufB.r*bufB.r+bufB.i*bufB.i);
bufR.i = (bufA.i*bufB.r-bufA.r*bufB.i)/(bufB.r*bufB.r+bufB.i*bufB.i);

3.矩陣的乘法

設A矩陣M行P列,即M by P,B矩陣P行N列,即P by N。
則乘積爲R矩陣,M行N列,即M by N。
計算公式
M[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j] +…+ A[P-1][i] * B[j][P-1];
即二維數組A[M][P]與二維數組B[P][N]的乘積,結果爲二維數組R[M][N]。
以下爲代碼實現:

int sum = 0;
for(i=0; i<M; i++)
{
	for(j=0; j<N; j++)
	{
		sum = 0;
		for(k=0; k<N; k++)
		{
			sum += bufA[i][k] * bufB[k][j]	
		}
		bufR[i][j] = sum;
	}
}

4.向量(一維數組)與矩陣(二維數組)的乘積

向量x[M],矩陣A[M][N],運算結果y[N]。
y[i] = A[0][i] * x[0] + A[1][i] * x[1] + A[2][i] * x[2] +…+ A[M-1][i]*x[M-1];(i = 0, 1, …, N-1)。
下述代碼計算向量(一維數組,元素個數爲M)bufX與矩陣(二維數組,M行N列)bufA的乘積,結果保存在向量(一維數組,元素個數爲N)bufY中。

for(i=0; i<N; i++)
{
	sum = 0;
	for(j=0; j<M; j++)
	{
		sum += bufA[j][i] * bufX[j];
	}
	bufY[i] = sum;
}
發佈了14 篇原創文章 · 獲贊 13 · 訪問量 5655
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章