我正在运行一个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时),它给出了一个虚数!!
也许有人知道什么
答案 0 :(得分:3)
这是对的。 (-1)当N具有分数分量时,^ N具有虚部。
最明显的是,( - 1)^ 0.5只是i
。
答案 1 :(得分:1)
这不是功率大于1的事实,而是功率不是整数(即X^2, X^3, ...
)的事实。想象X^0.5
等于sqrt(X)
。显然,对于负值X,会产生一个虚数。