Mathematica并没有成倍增加

时间:2018-03-27 23:09:58

标签: wolfram-mathematica

这是我正在应用规则的表达式:

In[141]:= br1noOutQuadOne /. theThetas /. theMC /. theS
Out[141]= {p1 -> 1/2 (-3.7249*10^6 + p2)}

我很困惑为什么1/2不会成倍增加。这是另一种不起作用的方式:

In[142]:= Simplify[N[br1noOutQuadOne /. theThetas /. theMC /. theS]]
Out[142]= {p1 -> 0.5 (-3.7249*10^6 + p2)}

2 个答案:

答案 0 :(得分:1)

在第一个版本中, Mathematica 正在执行它所做的事情而不是降低精确数字的精度,例如1/2,而没有明确指示这样做。将术语1/2 * -3.7249*10^6相乘将失去精确度。

在第二个版本 Mathematica 中显示它认为0.5 (-3.7249*10^6 + p2) -1.86245*10^6 + 0.5p2更简单。但是你有各种各样的函数,比如Expand,你可以用来将表达式操作成你想要的形式。

答案 1 :(得分:1)

简短回答:LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' }, 'simple': { 'format': '[%(asctime)s] %(levelname)s [%(funcName)s] %(message)s' } }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': BASE_DIR + '/logs/uca_{:%d_%m_%Y}.log'.format(time.now()), 'formatter': 'simple' } }, 'loggers': { 'ucalog': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True } } } Expand似乎都必须将Mathematica哄骗为完全倍增的版本,该版本通过N和{{1}分发Times }。

这里答案越长......

Rational有助于找到解决方案。

Plus

FullForm内的In[170]:= br4QuadOne FullForm[br4QuadOne] Out[170]= {p4 -> 1/2 (mc4 + p3 + (-s3 + s4) \[Theta]max)} Out[171]/FullForm= List[Rule[p4,Times[Rational[1,2],Plus[mc4,p3,Times[Plus[Times[-1, s3], s4],\[Theta]max]]]]] 似乎让Mathematica认为它无法继续前进。当它只是数字时,没有问题。

Rational

虽然那里有一个变量,Mathematica不愿意通过TimesIn[191]:= Times[Rational[1, 2], 3.2] Out[191]= 1.6 分发Times

Rational

Plus本身还不够。

In[209]:= Times[Rational[1, 2], Plus[t1, 5]]
Simplify[N[%]]
Out[209]= (5 + t1)/2
Out[210]= 0.5 (5. + t1)

最后,(并切换ExpandIn[219]:= Expand[Times[Rational[1, 2], Plus[t1, 5]]] Out[219]= 5/2 + t1/2 的顺序也有效)...

N