我对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