数学建模社区-数学中国

标题: 简单的加减运算mathematica竟不会算 [打印本页]

作者: samking630    时间: 2006-3-1 17:59
标题: 简单的加减运算mathematica竟不会算
简单的加减运算mathematica竟不会算简单的加减运算mathematica竟不会算 2*(5 + 2 √3) + 3 + 2 √3 mathematica竟不会算 mathematica不会拆括号
作者: madio    时间: 2006-3-1 22:44

它不把括号外面的系数2乘进去,而且一般的也不这样做,我估计程序设计者是有一些计算方面的考虑的!他们不会看不到这样的问题!


作者: iwaa    时间: 2008-4-6 11:20

请在后面加: //Simplify

很笨的,不会自动化简


作者: views63    时间: 2008-4-18 14:39
不自动化简是出于为了保证正确.
作者: zkyhhx    时间: 2008-5-7 01:35
的确如此
作者: kofeffect    时间: 2008-5-7 13:25
madio说的有理

想要简化,加上//Simplify 确实OK!

作者: fouvy    时间: 2009-5-9 02:32
2*(5 + 2 √3) + 3 + 2 √3 //N
' N6 i' G4 c) F/ d5 s这不就OK
9 E  h  r6 y, }  |1 A) u- R不太清楚为什么要这样.5 W  x' E: B* T. o( B
可能是因为√3不是有理数,所以没有求出数值解.
作者: trvoldemort    时间: 2009-5-23 20:46
本帖最后由 trvoldemort 于 2009-5-23 21:00 编辑
+ A! b! G& a. h; u( j
) X+ o# }7 L5 {  h+ ?Plus、Times有一个Attribute是NumericFunction,意思是当所有参数为Number时整个表达式自动Evaluate成Number,这才是“输入自动化简”的本质。
: ?% Q7 Y) Z  d! h+ _+ Q: d" o. [+ ]# b6 `+ U& v3 p2 L! q$ ?% a1 P
大家来看,平时我们输入:
' k& u, w, W( \+ y5 W1+2*(1+1) ) q* u# E" T0 J. W" e* ?
=> Plus[1,Times[2,Plus[1,1]]]
; b7 I  q) V4 j6 s=> Plus[1,Times[2,2]]" D6 R% w( G! H7 t, i
=> Plus[1,4]' S' ~* k; _6 ?: a; i
=> 5
, e' _) n% J  A$ `# L
! m, |+ o* @2 P! A, W. B7 h; F3 ~注意到每一步化简都很顺利4 ^. M- s1 f' }$ Y' z
但是:9 {& ], ~; P2 x0 z9 r# E& j
3 _3 k' A1 y* o0 v; @5 \0 Z
1+2*(1+Sqrt[2])$ q# Q- W1 `  i
=> Plus[1,Times[2,Plus[1,Sqrt[1]]]]+ J1 m' G! J2 W7 z  [; X# Z

& e3 s7 F; K* s4 B' @0 l因为NumberQ[Sqrt[2]] = False,而无论如何Plus[1,Sqrt[1]]不能变成一个Number,自动化简停止。
( p& i, A* I7 K; \7 l
$ v; g  q( R5 S2 g  N! ]- g这种化简是很机械化的, 必须从里向外,没有全局意识,当然了,简单的式子太多了,什么(1 - a) (1 + a)+a^2等等,如果都能自动化简,那还要Simplify干嘛用啊。毕竟涉及到符号运算,用机器语言描述不是那么简单。
作者: peamy    时间: 2009-8-10 11:41
这不是mathematica的错,这样的结果难道不是一个准确的结果吗?
作者: 三差    时间: 2009-9-27 16:38
出于对程序计算的考虑




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5