使用sympy更新变量



我对sympy有一个问题,它不会更新我的值。因此,我尝试使用迭代方法来求解$\sigma_x$,当我尝试将数值放入表达式时,它不会更新。

我已经将sympy导入为sy
所以我首先有了这个代码:

q,b,E,t,nu,L,z,x,y = sy.symbols("q,b,E,t,nu,L,z,x,y") 
D = (E*t**3)/(12*(1-nu**2)) 
q_0 = 4*q/(sy.pi*b) * sy.sin(sy.pi/2)*(1-sy.cos(sy.pi)) 
D2 = (sy.pi**2 / L**2) + (sy.pi**2 / b**2) 
w = q_0/(D* D2**2) * sy.sin(sy.pi*x/L) * sy.sin(sy.pi * y / b) 
M = 4 
N = 4 
w_iterert = 0 
for m in range(1,M+1):
for n in range(N+1):
q_iterert = 4*q/(sy.pi*b*m)*sy.sin(sy.pi*n/2)*(1-sy.cos(sy.pi*m))
w_mn = q_iterert/(D*((sy.pi**2*m**2 / L**2) + (sy.pi**2 * n**2 / b**2))**2)
w_iterert += w_mn*sy.sin(m*pi*x/L)*sy.sin(n*pi*y/b)

然后我绘制了分析表达式:

w_iterert

现在我用公式来找到我的sigma_x:

w_xx_iter = sy.diff(w_iterert,x,2) 
w_yy_iter = sy.diff(w_iterert,y,2) 
sigma_x_iter = - z*E/(1-nu**2)*(w_xx_iter+nu*w_yy_iter)

这就是我做错的地方。现在我做这个:

E = 210000 
pi = sy.pi 
q = 20 
nu = 0.3 
L = 4000 
b = 1000  
t = 10 
x = 2 
z = t/2 
y = b/2 
sigma_x_iter

我希望这能更新数值,并给我数值。相反,我只是得到了同样的分析表达式。如何更新我的价值观?

我什么都试过了,我只是写了下来,并试图把文本复制到另一个笔记本上,这显然有效。但是,除非我自动更改,否则我无法更改MN值并获得不同的结果。

我不得不多次编辑您的代码,以获得可以复制并运行的内容。

我所说的subs是指:

In [38]: sigma_x_iter.subs({E:210000, q:20,nu:0.3,L:4000,b:1000,t:10,x:2,z:10/2,
...:  y:1000/2})
Out[38]: 
⎛                      ⎛ π  ⎞                       ⎛3⋅π ⎞⎞           
⎜654766080000000000⋅sin⎜────⎟   9844326400000000⋅sin⎜────⎟⎟           
⎜                      ⎝2000⎠                       ⎝2000⎠⎟           
2.0e-10⋅⎜──────────────────────────── + ──────────────────────────⎟   9.6e-10⋅
⎝           243049                         2601           ⎠           
─────────────────────────────────────────────────────────────────── + ────────
3                                           
π                                            
⎛                    ⎛3⋅π ⎞                         ⎛ π  ⎞⎞
⎜1321369600000000⋅sin⎜────⎟   725790720000000000⋅sin⎜────⎟⎟
⎜                    ⎝2000⎠                         ⎝2000⎠⎟
⎜────────────────────────── + ────────────────────────────⎟
⎝           2601                         243049           ⎠
───────────────────────────────────────────────────────────
3                                
π                                 
In [39]: _38.n()
Out[39]: 0.361692509661739

sympy中,您需要明确区分符号和引用它的变量。sympy在Python环境中工作,不更改语法。您可能需要进一步研究文档化的gotachas

定义的E是一个符号:

In [42]: type(E)
Out[42]: sympy.core.symbol.Symbol

此赋值为E指定一个int,从而断开它与符号的任何连接。该符号仍然存在于各种表达式中,但不能再使用变量E引用它。此赋值不涉及任何表达式。

In [43]: E = 210000
In [44]: type(E)
Out[44]: int

最新更新