我在解一个超越方程组:
cos(x) / x = 0.48283 + a*3.46891
cos(y) / y = 0.47814 + b*28.6418
a + b = 1
1.02 * sinc(x) = 1.03 * sinc(y)
碰巧我试图用两种不同的编程语言(Mathematica和Python)来解决上述系统
运行代码
FindRoot[{Cos[x]/x == 0.482828 + a*3.46891,
Cos[y]/y == 0.47814 + b*28.6418, a + b == 1,
1.02*Sinc[x] == 1.03*Sinc[y]}, {{x, .2}, {y, .2}, {a, 0.3}, {b,
0.3}}, PrecisionGoal -> 6]
退货
^{pr2}$运行代码:
import numpy as np
from scipy.optimize import root
def fuuu(X, en,dv,tri,sti):
x, y, a, b = X
F = [np.cos(x) / x - en-a*dv,
np.cos(y) / y - tri-b*sti,
a + b - 1,
1.02 * np.sinc(x) - 1.03 * np.sinc(y)]
return F
root(fuuu, [0.2, 0.2, 0.3, 0.3], args=(0.482828,3.46891,0.47814,28.6418)).x
退货
array([ 0.26843418, 0.27872813, 0.89626625, 0.10373375])
假设x值是相同的。让我们忽略这个小小的差别。但是y值是以英里为单位的!物理意义完全改变了。出于某些原因,我相信Mathematica的值比我相信Python的值要多。在
问题:
由于
sinc
函数,计算不同。在嗯?井let's RTFM
哦。NumPy的
sinc
比Mathematica的Sinc
有一个different definition。在Sinc
使用了非规范化的sin(x)/x定义,这种定义通常用于数学和物理中。在sinc
使用标准化的版本sin(πx)/(πx)。这个定义通常用于数字信号处理和信息理论。之所以称之为标准化,是因为∫-∞∞sin(πx)/(πx)dx=1。在
因此,如果希望NumPy生成与Mathematica相同的结果,则需要将}除以{}。在
^{pr2}$x
和{相关问题 更多 >
编程相关推荐