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

2024-05-18 21:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解一个超越方程组:

  1. cos(x) / x = 0.48283 + a*3.46891
  2. cos(y) / y = 0.47814 + b*28.6418
  3. a + b = 1
  4. 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}$

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

退货

array([ 0.26843418,  0.27872813,  0.89626625,  0.10373375])

比较

假设x值是相同的。让我们忽略这个小小的差别。但是y值是以英里为单位的!物理意义完全改变了。出于某些原因,我相信Mathematica的值比我相信Python的值要多。在

问题:

  1. 为什么计算不同?在
  2. 现在哪一个是正确的?在python中我需要做什么改变(假设python是有问题的)?在

Tags: 代码importnproot方程组costrien
1条回答
网友
1楼 · 发布于 2024-05-18 21:23:24

由于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

嗯?井let's RTFM

numpy.sinc(x)

Return the sinc function.

The sinc function is sin(πx)/(πx).

哦。NumPy的sinc比Mathematica的Sinc有一个different definition。在

  • Mathematica的Sinc使用了非规范化的sin(x)/x定义,这种定义通常用于数学和物理中。在
  • NumPy的sinc使用标准化的版本sin(πx)/(πx)。这个定义通常用于数字信号处理和信息理论。之所以称之为标准化,是因为
    -∞sin(πx)/(πx)dx=1。在

因此,如果希望NumPy生成与Mathematica相同的结果,则需要将x和{}除以{}。在

^{pr2}$
>>> root(fuuu, [0.2, 0.2, 0.3, 0.3], args=(0.482828,3.46891,0.47814,28.6418)).x
array([ 0.26172691,  0.3558877 ,  0.92473722,  0.07526278])

相关问题 更多 >

    热门问题