Matlab:n的幂的负数,其中" n"大于1会给出一个虚数

时间:2015-06-12 07:39:10

标签: matlab

我正在运行一个matlab代码以迭代方式求解矩阵,我试图在每次迭代中求解x = A \ b,直到x - > 0通过改变A和b,在前3次迭代中工作正常,直到我到达我开始在我的解决方案中获得虚数的点。

这是我的代码: Q,H,n,R是预定义变量。

while(eps > 10^-6)
    i=1;j=1;

    while(i<11)

        A11(i,j) = 1.852*R(i)*(abs(Q(i)))^(n-1);
        i=i+1;
        j=j+1;
    end
    A11(11,11) = 2*R(11)*abs(Q(11));

    %calculate -dE & dq
    dE = [200-H(1)-R(1)*Q(1)^1.852
        H(1)-H(2)- R(2)*Q(2)^1.852
        H(1)-H(3)-R(3)*Q(3)^1.852
        H(2)-H(7)-R(4)*Q(4)^1.852
        H(6)-H(5)-R(5)*Q(5)^1.852
        H(7)-H(4)-R(6)*Q(6)^1.852
        H(6)-H(7)-R(7)*(Q(7))^1.852
        H(5)-H(4)-R(8)*Q(8)^1.852
        H(3)-H(2)-R(9)*Q(9)^1.852
        H(3)-H(4)-R(10)*Q(10)^1.852
        0-H(3)+240- R(11)*Q(11)];
    dq = [-Q(1)+Q(2)+Q(3)
        -Q(2)-Q(9)+Q(4)+4
        -Q(11)+Q(9)+Q(10)+6
        -Q(10)-Q(6)-Q(8)+5
        -Q(5)+Q(8)+5
        -Q(3)+Q(7)+Q(5)+5
        -Q(4)-Q(7)+Q(6)+3];


    %formulate the full set of equations
    zero=zeros(nn,nn);
    b=[dE;dq];
    upA = [A11,A12];
    downA=[A21,zero];
    A= [upA;downA];
    %solve the equations (x=A\b)

    x = A\b;
    %update Q and H
    i=1;j=1;
    while (i<8 && j<12)
        H(i)= x(11+i)+ H(i);
        Q(j)= x(j)+ Q(j);
        i=i+1;
        j=j+1;
    end
    %check stopping criteria
    j=1;sumeps=0;
    while (j<12)
        sumeps=sumeps+x(j);
        j=j+1;
    end
    epscal = sumeps/12;

    eps=abs(epscal)

end

我意识到当矢量Q的一个值变为负值时,我开始遇到问题,当该值升至1.852的幂时(计算dE时),它给出了一个虚数!!

也许有人知道什么

2 个答案:

答案 0 :(得分:3)

这是对的。 (-1)当N具有分数分量时,^ N具有虚部。

最明显的是,( - 1)^ 0.5只是i

答案 1 :(得分:1)

这不是功率大于1的事实,而是功率不是整数(即X^2, X^3, ...)的事实。想象X^0.5等于sqrt(X)。显然,对于负值X,会产生一个虚数。