我正在尝试求解传递给a和b的方程式,但出现了numpy.linalg.LinAlgError错误:数组的最后两个维数必须是平方,我该如何解决这个问题
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
l=np.arange(1,1.5,0.01)
d=np.arange(0.005,0.015,0.0002)
Eb1=3543.75
A1=1
A2=(np.pi)*(d/2)**2/2
A3=np.pi
F11=0
F21=2*(np.arctan(0.5/l)*(180/np.pi))/360
F12=(d*np.pi*F21)
F12p=(((4/l**2)+4)**0.5-2)*(l/2)
F13=F12p-F12
F14=1-F12-F13
F23=0.5
F24=1-F21-F23
F34=F14/np.pi
rho=0.7
k=0.04
pr=0.7
cp=1005
myu=2.4*10**-5
alpha=5.68*10**-5
beta=1/500
Ra=(rho*9.81*beta*(500-293)*l)/(myu*alpha)
Nu=0.68+(0.67*Ra**0.25)/(1+(0.429/pr)**(9/16))**(4/9)
h=Nu*k
J1=3543.75+0.42*h*(500-295)
a = np.array([[F12,F13,F14], [-1*(F12+A2*F23+A2*F24),A2*F23,A2*F24], [A2*F23,-1*(A3*F34+A2*F23+F13),A3*F34]])
b = np.array([(7/3+F12+F14+F13)*J1-Eb1,-F12*J1,-F13*J1])
x = np.linalg.solve(a, b)
J2=x[0]
J3=x[1]
J4=x[2]
Eb2=((1-0.8)/(0.8*A2))*((J2-J1)*A1*F12)+J2
qrad=(Eb2-J2)/((1-0.8)/(0.8*A2))
print(qrad)
发布于 2020-05-12 04:41:40
如果您执行一些形状重新洗牌以使解算器正常工作:
x = np.linalg.solve(np.moveaxis(a, 2, 0), b.T)
x = x.T
将qrad
指定为:
[0.04295253 0.04653147 0.05025864 0.05413453 0.0581596 0.0623343
0.06665908 0.07113439 0.07576063 0.08053823 0.08546759 0.0905491
0.09578314 0.10117008 0.10671028 0.11240411 0.11825189 0.12425396
0.13041064 0.13672224 0.14318907 0.14981142 0.15658958 0.16352382
0.1706144 0.17786158 0.18526562 0.19282674 0.20054518 0.20842117
0.21645491 0.22464661 0.23299646 0.24150466 0.25017139 0.2589968
0.26798108 0.27712437 0.28642682 0.29588858 0.30550977 0.31529051
0.32523093 0.33533114 0.34559123 0.3560113 0.36659143 0.37733172
0.38823223 0.39929302]
https://stackoverflow.com/questions/61738577
复制相似问题