这是我正在应用规则的表达式:
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)}
答案 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不愿意通过Times
和In[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)
最后,(并切换Expand
和In[219]:= Expand[Times[Rational[1, 2], Plus[t1, 5]]]
Out[219]= 5/2 + t1/2
的顺序也有效)...
N