2013-01-22 30 views
1

我想在Prolog中乘以两个向量,但是,如果这些向量包含虚数,我无法让它工作。到目前为止我的代码:如何在Prolog中计算矢量乘积(如果有虚数)?

vector_product([X|Xs],[Y|Ys],OP) :- 
    inner(Xs,Ys,OP1), 
    OP is X*Y+OP1. 
vector_product([],[],0). 
+1

如果您的向量包含虚数,您肯定会为它们有一个特殊的表示形式,因此您需要一个接收其中两个数字并返回结果产物的函数。除非Prolog具有处理假想的功能 - 我怀疑 - 你必须自己写。 – Rubens

+0

好的,让我试试看! –

+0

不,没有成功。 –

回答

3

看看这可以帮助你......从Wikipedia

公式:

% (a+bi) + (c+di) = (a+c) + (b+d)i 
c_sum((A,B), (C,D), (E,F)) :- E is A+C, F is B+D. 

% (a+bi) (c+di) = (ac-bd) + (bc+ad)i 
c_mul((A,B), (C,D), (E,F)) :- E is A*C - B*D, F is B*C + A*D. 

数字表示为(Real, Imaginary)

vector_product([X|Xs], [Y|Ys], OP) :- 
    vector_product(Xs, Ys, OP1), 
    c_mul(X, Y, M), 
    c_sum(M, OP1, OP). 
vector_product([], [], (0,0)). 
+0

这确实有助于搞清楚。非常感谢! –