向量、矩阵、实数、复数之间的各种运算方法

向量、矩阵、实数、复数之间的各种运算方法

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;
}
发布了9 篇原创文章 · 获赞 11 · 访问量 2060

猜你喜欢

转载自blog.csdn.net/u013281532/article/details/103880449