Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mathematica和Python的超越方程解不匹配_Python_Numpy_Wolfram Mathematica_Root - Fatal编程技术网

Mathematica和Python的超越方程解不匹配

Mathematica和Python的超越方程解不匹配,python,numpy,wolfram-mathematica,root,Python,Numpy,Wolfram Mathematica,Root,我在解一个超越方程组: cosx/x=0.48283+a*3.46891 cosy/y=0.47814+b*28.6418 a+b=1 1.02*sincx=1.03*sincy 碰巧我尝试用两种不同的编程语言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] =

我在解一个超越方程组:

cosx/x=0.48283+a*3.46891 cosy/y=0.47814+b*28.6418 a+b=1 1.02*sincx=1.03*sincy 碰巧我尝试用两种不同的编程语言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]
返回

{x -> 0.261727, y -> 0.355888, a -> 0.924737, b -> 0.0752628}
array([ 0.26843418,  0.27872813,  0.89626625,  0.10373375])
python 运行代码:

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
返回

{x -> 0.261727, y -> 0.355888, a -> 0.924737, b -> 0.0752628}
array([ 0.26843418,  0.27872813,  0.89626625,  0.10373375])
比较 假设“x”值相同。让我们忽略这个小小的差别吧。但是y值的差别是英里!物理意义完全改变了。出于某种原因,我更相信Mathematica的值,而不是Python的值

问题:

为什么计算结果不同? 现在哪一个是正确的?假设python是有问题的,那么我必须在python中更改什么?
由于sinc函数,计算结果有所不同

(* Mathematica *)
In[1] := Sinc[0.26843418]
Out[1] = 0.988034

# Python
>>> np.sinc(0.26843418)
0.88561519683835599
>>> np.sin(0.26843418) / 0.26843418
0.98803370932709034
嗯?嗯

numpy.sincx 返回sinc函数

(* Mathematica *)
In[1] := Sinc[0.26843418]
Out[1] = 0.988034

# Python
>>> np.sinc(0.26843418)
0.88561519683835599
>>> np.sin(0.26843418) / 0.26843418
0.98803370932709034
sinc函数是sinπx/πx

哎呀。NumPy的sinc比Mathematica的sinc有更大的优势

Mathematica的Sinc使用非规范化定义sinx/x。这个定义通常用于数学和物理。 NumPy的sinc使用标准化版本sinπx/πx。这个定义通常用于数字信号处理和信息理论。它被称为标准化,因为 ∫-∞∞ sinπx/πx dx=1。 因此,如果希望NumPy产生与Mathematica相同的结果,则需要将x和y除以np.pi


由于sinc函数,计算结果有所不同

(* Mathematica *)
In[1] := Sinc[0.26843418]
Out[1] = 0.988034

# Python
>>> np.sinc(0.26843418)
0.88561519683835599
>>> np.sin(0.26843418) / 0.26843418
0.98803370932709034
嗯?嗯

numpy.sincx 返回sinc函数

(* Mathematica *)
In[1] := Sinc[0.26843418]
Out[1] = 0.988034

# Python
>>> np.sinc(0.26843418)
0.88561519683835599
>>> np.sin(0.26843418) / 0.26843418
0.98803370932709034
sinc函数是sinπx/πx

哎呀。NumPy的sinc比Mathematica的sinc有更大的优势

Mathematica的Sinc使用非规范化定义sinx/x。这个定义通常用于数学和物理。 NumPy的sinc使用标准化版本sinπx/πx。这个定义通常用于数字信号处理和信息理论。它被称为标准化,因为 ∫-∞∞ sinπx/πx dx=1。 因此,如果希望NumPy产生与Mathematica相同的结果,则需要将x和y除以np.pi


含糖的谢谢。请再加上这一行。在数学中,sinc指的是非规范化版本。因此,sincx=sinx/x。Numpy使用规范化版本。容易记住。因此,sincx=sinpi*x/pi。x@kmario23完成。这实际上在维基百科的链接文章中有解释。@kennytm谢谢,现在答案看起来很优雅。为了完整起见,我要求将其添加到这里,并以自己的方式给出答案!谢谢。请再加上这一行。在数学中,sinc指的是非规范化版本。因此,sincx=sinx/x。Numpy使用规范化版本。容易记住。因此,sincx=sinpi*x/pi。x@kmario23完成。这实际上在维基百科的链接文章中有解释。@kennytm谢谢,现在答案看起来很优雅。我要求将其添加到这里,以确保答案本身的完整性