FreeMat和NumPy中的矩阵逆给出了不同的输出

FreeMat和NumPy中的矩阵逆给出了不同的输出,numpy,freemat,Numpy,Freemat,我完全糊涂了。我尝试了以下方法: 输出为: Z1 = 0.9263 + 7.9980i -0.0021 + 5.4516i 0.4569 + 6.7866i 0.4569 + 6.7866i -0.0021 + 5.4516i 0.4434 + 6.6566i 0.0342 + 5.5501i 0.0342 + 5.5501i 0.4569 + 6.7866i 0.0342 + 5.5501i 0.9363 + 7.9718i 0.9363

我完全糊涂了。我尝试了以下方法:

输出为:

Z1 =
0.9263 +  7.9980i  -0.0021 +  5.4516i   0.4569 +  6.7866i   0.4569 +  6.7866i
-0.0021 +  5.4516i   0.4434 +  6.6566i   0.0342 +  5.5501i   0.0342 +  5.5501i
0.4569 +  6.7866i   0.0342 +  5.5501i   0.9363 +  7.9718i   0.9363 +  7.9718i
0.4569 +  6.7866i   0.0342 +  5.5501i   0.9363 +  7.9718i   1.7763 +  9.2318i 
[[ 0.86953959+6.88397793j  0.00715465+4.54141578j  0.32473444+5.47695118j
   0.32473444+5.47695118j]
 [ 0.00715465+4.54141578j  0.49628324+5.91573859j -0.00822597+4.47684505j
  -0.00822597+4.47684505j]
 [ 0.32473444+5.47695118j -0.00822597+4.47684505j  0.70375023+6.43596174j
   0.70375023+6.43596174j]
 [ 0.32473444+5.47695118j -0.00822597+4.47684505j  0.70375023+6.43596174j
   1.54375023+7.69596174j]]
我试过同样的方法:

输出为:

Z1 =
0.9263 +  7.9980i  -0.0021 +  5.4516i   0.4569 +  6.7866i   0.4569 +  6.7866i
-0.0021 +  5.4516i   0.4434 +  6.6566i   0.0342 +  5.5501i   0.0342 +  5.5501i
0.4569 +  6.7866i   0.0342 +  5.5501i   0.9363 +  7.9718i   0.9363 +  7.9718i
0.4569 +  6.7866i   0.0342 +  5.5501i   0.9363 +  7.9718i   1.7763 +  9.2318i 
[[ 0.86953959+6.88397793j  0.00715465+4.54141578j  0.32473444+5.47695118j
   0.32473444+5.47695118j]
 [ 0.00715465+4.54141578j  0.49628324+5.91573859j -0.00822597+4.47684505j
  -0.00822597+4.47684505j]
 [ 0.32473444+5.47695118j -0.00822597+4.47684505j  0.70375023+6.43596174j
   0.70375023+6.43596174j]
 [ 0.32473444+5.47695118j -0.00822597+4.47684505j  0.70375023+6.43596174j
   1.54375023+7.69596174j]]
为什么输出不同

再想一想,在我看来问题可能在源代码的其他地方,所以这里是Python例程:

#ROEPER SHORT CIRCUIT CALCULATION EXAMPLE
import numpy as np

#Constants
a = np.exp(2*np.pi/3);
A = np.matrix( ((1., 1., 1.), (1., a**2., a), (1., a, a**2.)), dtype=np.complex64)

#System description at Bus 1
S_NG1 = 100. #generator rated apparent power in MVA 
U_NG1 = 10.5 #generator rated voltage in kV
xst_dG1 = 10.5 #relative initial subtransient reactance in percent
r_G1 = 0.3 #generator resistance in percent
S_NT1 = 100. # transformer rated capacity in MVA
U_NT1LV = 10.5 #in kV
U_NT1HV = 115. #in kV
u_kNT1 = 11.5 #in percent
u_RNT1 = 0.5 #in percent
n_ZT1 = 0.8 #ratio of zero to positive sequence impedance 
#Sequence impedance calculations -----------------------
Z1_G1 = complex(r_G1, xst_dG1)*(1./100.)*((U_NG1**2)/S_NG1)*(U_NT1HV/U_NT1LV)**2
#print Z1_G1
Z2_G1 = Z1_G1
Z1_T1 = complex(u_RNT1/100., u_kNT1/100.)*((U_NT1HV**2)/S_NT1)
#print Z1_T1
Z2_T1 = Z1_T1
Z0_T1 = n_ZT1*Z1_T1

#System description at Bus 2
S_NT2 = 200. # transformer rated capacity in MVA
U_NT2LV = 115. #transformer LV side nominal voltage in kV
U_NT2HV = 230. #in kV
u_kNT2 = 12. #in percent
u_RNT2 = 0.3 #in percent
n_ZT2 = 2.4 #ratio of zero to positive sequence impedance
#Sequence impedance calculations ------------------
Z1_T2 = complex(u_RNT2/100, u_kNT2/100.)*((U_NT2LV**2)/S_NT2)
#print Z1_T2
Z2_T2 = Z1_T2
Z0_T2 = n_ZT2*Z1_T2

#System description at Bus 3
S_NG3 = 75. #generator rated apparent power in MVA 
U_NG3 = 10.5 #generator rated voltage in kV
xst_dG3 = 11.2 #relative initial subtransient reactance in percent
r_G3 = 0.3 #generator resistance in percent
S_NT3 = 75. # transformer rated capacity in MVA
U_NT3LV = 10.5 #in kV
U_NT3HV = 115. #in kV
u_kNT3 = 10. #in percent
u_RNT3 = 0.6 #in percent
n_ZT3 = 0.8 
Sst_kQ = 12000. #initial a.c. short circuit power at 2Q in MVA
U_NQ = 230. #rated voltage of the system at point of connection 2Q in kV
U_Q = 220.
U_N2 = 115.
RX_Q = 0.1 
#Sequence impedance calculations ------------------
Z1_G3 = complex(r_G3, xst_dG3)*(1/100)*((U_NG3**2)/S_NG3)*(U_NT3HV/U_NT3LV)**2
Z2_G3 = Z1_G3
Z1_T3 = complex(u_RNT3/100, u_kNT3/100)*((U_NT3HV**2)/S_NT3)
Z2_T3 = Z1_T3
Z0_T3 = n_ZT3*Z1_T3
Z1Q = complex(0.1, 1.0)*1.1*((U_Q**2)/Sst_kQ)*(U_N2/U_NQ)**2
Z2Q = Z1Q

#Bus interconnections
Z1_12 = complex(3.154, 7.657) #in ohms
Z2_12 = Z1_12 #in ohms
Z0_12 = complex(10.431, 31.673) #in ohms
G0_12 = complex(0, 1./(1.056*(10.**4.))) #in mhos

Z1_23 = complex(2.490, 6.045) #in ohms
Z2_23 = Z1_23 #in ohms
Z0_23 = complex(8.235, 25.005) #in ohms
G0_23 = complex(0, 1./(1.337*(10.**4.))) #in mhos

Z1_13 = complex(1.245, 3.023) #in ohms
Z2_13 = Z1_13 #in ohms
Z0_13 = complex(4.118, 12.503) #in ohms
G0_13 = complex(0, 1./(2.674*(10.**4.))) #in mhos

Z1_2Q = complex(0.173, 0.980) #in ohms
Z2_2Q = Z1_2Q

Z1_34 = complex(0.840, 1.260) #in ohms
Z2_34 = Z1_34
Z0_34 = complex(5.440, 3.430)
G0_34 = complex(0, 1./(1.098*(10.**3.))) #in mhos

#Creation of Y matrix for positive & negative sequence components
y1_11 = 1/(Z1_G1+Z1_T1)+1/Z1_12+1/Z1_13;
y1_12 = -1/Z1_12;
y1_13 = -1/Z1_13;
y1_14 = 0+0j;
y1_21 = y1_12;
y1_22 = 1/(Z1_T2+Z1_2Q+Z1Q)+1/Z1_12+1/Z1_23;
y1_23 = -1/Z1_23;
y1_24 = 0+0j;
y1_31 = y1_13;
y1_32 = y1_23;
y1_33 = 1/(Z1_G3+Z1_T3)+1/Z1_13+1/Z1_23+1/Z1_34;
y1_34 = -1/Z1_34;
y1_41 = 0+0j;
y1_42 = 0+0j;
y1_43 = y1_34;
y1_44 = 1/Z1_34;


Y1 = np.matrix( ((y1_11, y1_12, y1_13, y1_14),
      (y1_21, y1_22, y1_23, y1_24),
      (y1_31, y1_32, y1_33, y1_34),
      (y1_41, y1_42, y1_43, y1_44)) )

Z1 = np.linalg.inv(Y1);
Ist_k3 = 1.1*110./(np.sqrt(3)*Z1[3,3])
If3ph = abs(Ist_k3)
print If3ph
phi_3ph = np.angle(Ist_k3, deg=True)
print phi_3ph

有些矩阵对于数值运算是不稳定的,例如矩阵
Y1
。矩阵的数值行为以其自身的性质为特征。接近1的条件数可以,
cond(Y1)
给出45


例如,请参见。

如果将逆矩阵乘以原始矩阵,会发生什么情况?在这两种情况下,是否都与身份有关?如果其中一个计算是完全错误的,这将确定它。如果它们都(不知何故)算出了恒等式,如果你从Freemat取逆,导入到Numpy,然后乘以原始矩阵,会发生什么?或者反之亦然?Y1*Z1的freemat输出为:
1.0000+0.0000i 0.0000+0.0000i 0.0000+0.0000i-0.0000+0.0000i 1.0000+0.0000i-0.0000-0.0000i-0.0000-0.0000i-0.0000-0.0000i-0.0000-0.0000i 1.0000-0.0000i-0.0000+0.0000i 0.0000Y1*Z1的1.0000+0.0000i
numpy输出为:
[[1.00000000e+00+2.22044605e-16j 2.22044605e-16+2.22044605e-16+2.22044605e-16j 2.22044605e-16+2.22044605e-16j][-1.11022302e-16+0.00000000J 1.00000000e+5.55111512e-17j-1.11022302e-51515-1115][0.00000000e+00+6.66133815e-16j 4.44089210e-16+4.44089210e-16j 1.00000000e+00+6.66133815e-16j 8.88178420e-16+6.66133815e-16j][0.00000000e+00+0.00000000e+00j 0.00000000e+00-2.22044605e-16j-4.44089210e-16+0.00000000e+00+00.00000000J 1.00000000e+00j]
奇怪。我想如果矩阵几乎是奇异的,那么会有相当大的数值错误是有意义的。无论如何,freemat在这里做得更好…@David-freemat只是以较低的精度显示结果。
Y1*Z1
在这两种情况下都有效地生成了单位矩阵。