为了账号安全,请及时绑定邮箱和手机立即绑定

如何评估 Sympy Optics 模块的 TWave 实例?

如何评估 Sympy Optics 模块的 TWave 实例?

犯罪嫌疑人X 2021-06-11 10:05:21
我在评估 Sympy 光学模块的 TWave 实例时遇到问题。起初,我尝试lambdify()使用此代码:from sympy import symbolsfrom sympy.physics.optics import TWaveimport numpy as npA, f, phi = symbols('A f phi')wave = TWave(A, f, phi)# the evaluationxpoint = tpoint = np.linspace(0, 10, 100)fb = lambdify([A, f, phi, x, t, n], wave.rewrite('cos'))fb(1, 1000, 0.5*np.pi, xpoint, tpoint, 1)但是,我收到了这个错误:AttributeError: 'Float' object has no attribute 'cos'相反。然后我尝试了一个简单evalf()的一点,只是为了确定。# evaluation with evalf()data = {    'A0': 1,    'f' : 100,    'phi' : np.pi/2,}ff = wave.subs(data).rewrite('cos')ff# result: TWave instance, rewritten in cosine term, with variable substituted现在,后来发生的事情让我感到奇怪:我一眼就看到需要替换的变量有 3 个,即x, t, n. 但是,当我尝试这样做时:ff.subs({'x':1, 't':10, 'n':1})我得到了ValueError: summation of quantities of incompatible dimensions错误。我试图n从 subs 字典中删除:ff.subs({'x':1, 't':10})它起作用了,但n仍然是一个象征性的例子。因此,我无法从中获得任何数值ff.subs({'x':1, 't':10}).evalf()任何想法?我只想能够评估任何给定点的横波值。谢谢,PS:可能不相关,但我在 Anaconda 上使用 Sympy 1.2
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

看起来问题与TWave在不告诉您的情况下向表达式添加单位有关。


wave.rewrite('cos')给A*cos(-2*pi*f*t + phi + pi*second*f*n*x/(149896229*meter)). 如果您消除meter和second符号,您的代码就可以工作。


from sympy import symbols

from sympy.physics.optics import TWave

from sympy.physics.units import meter, second

import numpy as np


A, f, phi = symbols('A f phi')

wave = TWave(A, f, phi)


# the evaluation

xpoint = tpoint = np.linspace(0, 10, 100)

fb = sympy.lambdify(

    [A, f, phi, x, t, n], 

    wave.rewrite(

        'cos'

    ).subs(

        [(meter, 1), (second, 1)]

    ), 

    modules='numpy'

)

fb(1, 1000, 0.5*np.pi, xpoint, tpoint, 1)


查看完整回答
反对 回复 2021-06-29
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号