wayne 发表于 2010-12-4 08:00:35

16# G-Spider
用fsolve的时候,simplify好像是多余的。

wayne 发表于 2010-12-4 08:04:16

本帖最后由 wayne 于 2010-12-4 08:30 编辑

10# chyanog
对于Eliminate[{x + y == \, Cos[\] == Cos[\] Cos,
Cos[\] == Cos[\] Cos}, {x, y}]你换成Solve函数试试 ,Solve函数可以给出你想要的解,即M8所说的 generic solutions 。

Reduce是分情况讨论,给出所有各种可能条件下的解,所以速度较慢,形式也较杂乱.
========================================
关于那个正切展开,我有一很弱的方法:FullSimplify] // TrigExpand]

chyanog 发表于 2010-12-4 16:53:13

22# wayne
能试的我基本都试过了,其实这个方程是由一道立体几何题导出的,目标是消去x,y,得到θ,(α、β、γ都是常量),这是Maple得到的结果,跟手算的一致,http://img1.5d6d.net/201012/4/23488266_1291448116WYZE.png
    关于其他三角函数的展开,我只是奇怪Wolfram为什么至今不提供那样的“正统”展开,其实你的办法我以前试过了,顺便再提供一种不太好的,
Solve, Tan} == {y, x}, t,
InverseFunctions -> True], y]
另外,不知道你注意没有,FunctionExpand的某些功能从5.2版以后有所削弱,比如:FunctionExpand]现在的版本算不了了,通过另类方法也能。

wayne 发表于 2010-12-5 09:38:50

本帖最后由 wayne 于 2010-12-5 10:08 编辑

23# chyanog
:b: , 前面的我献丑了。
我试试,看能不能解答吧,:handshake :
关于其他三角函数的展开,我只是奇怪Wolfram为什么至今不提供那样的“正统”展开,其实你的办法我以前试过了 这方面本身就没有标准可言,不同的软件出现了不一致是可以理解的吧,也许maple歧视反三角函数,mathematica 兼容并蓄,也许是mathematica偷懒。。。谁知道呢,呵呵。
FunctionExpand的某些功能从5.2版以后有所削弱
这个函数说实在的,我没怎么用,感觉你应该是mathematica老用户了 。
我查了一下FunctionExpand,发现这个函数有点generic,以至于我们虽然用它了,却还不是很清楚它在背后具体作的哪种类型的数学操作。
=====
你的目的是想把三角函数转换成根式的形式。即TrigToRadicals , 5.2里面是有这个函数的,按道理我们应该这么写,Sin // Developer`TrigToRadicals在8里面,代码是一样的,需加载Developer包,即Needs["Developer`"]。
然而,   ◼ TrigToRadicals is automatically used inside FullSimplify and FunctionExpand. ,所以我们才能用FunctionExpand实现这个功能。
那FunctionExpand准确的说是干啥的?
tries to expand out special and certain other functions in expr, when possible reducing compound arguments to simpler ones.
意思是说,将某种不是很显然的,比较特殊的函数值转化成我们所习惯的表达方式,甚至还执行化简操作,即FullSimplify的功能。
如今FunctionExpand缩小了它所调用的TrigToRadicals 的处理范围(即表现为"功能削弱"了),还在 版本7里面加了新功能,即可以处理DifferenceRoot 和 DifferentialRoot 对象。
这个我们很好理解吧? 这跟写作文一样,中心点要突出,呵呵。。。。。

===================================
我个人认为,mathematica真正的变化是内部的变化,符号计算符号计算,计算的对象是符号!
在版本7里面,mathematica明确的使用了一个统一的符号对象,叫Root 。这个我很看好。比如,在这里,Sin // RootReduce 发现结果是一多项式方程的根,即Sin是代数数,我们还知道这个是可以用根式表达出来的,尽管很繁杂,于是,我们对这个Root对象这么操作:Sin // RootReduce // ToRadicals这个估计就是你想要的答案了。
=================
这是我看好mathematica的一个重要原因。
=============================================

wayne 发表于 2010-12-5 10:23:38

其实如果再深入分析的话,我不仅要问,什么是根式表达式?

我们可能很难回答。如果你不歧视负数的幂的话,这个答案会很简洁的:Sin // ToRadicals

chyanog 发表于 2010-12-5 14:05:29

本帖最后由 chyanog 于 2010-12-5 14:38 编辑

24# wayne
   谢谢wayne耐心细致的解释。也许我算不上是Mathematica的老用户吧(我现在大二),接触mathematica还不到一年,不过也差不多了,我今天特地查看了一下我下载的第一个Mathematica的创建日期是2009-12-14,是5.0版的,在此之前我已经开始用Maple一个月左右了,感觉Maple的java界面慢,尽管它的右键操作方便,而且数值计算速度不太满意,于是在网上搜索,(周围没人可问,在我们那样的专科院校也许没有第二个人用类似软件的)找到了只有Mathematica够资格是其对手,于是便下载了,给我的第一印象就是简洁,启动速度快,然后就是数值计算速度快,比如计算100万的阶乘等(当然现在知道郭大侠的HugeCalc更快),符号方面难以评说,算是各有千秋吧,我更喜欢mathematica的函数式语言和风格,所以我后来用Mathematica的时候较多。
    你说的那个“Developer”包,我还真没在意,
FunctionExpand]现在的版本算不了了,通过另类方法也能,Sin // RootReduce // ToRadicals
我用的展开跟你一样,O(∩_∩)O~,。

chyanog 发表于 2010-12-5 14:26:00

本帖最后由 chyanog 于 2010-12-5 14:36 编辑

那个三角方程的Mathematica解法,直接解的话我不知道得多长时间,反正我的机子几分钟没有结果。变通的方法我找到了2、3种,先贴出一个:
eq = {
   Sin Sin Sin + Cos Cos Cos == 0,
   Sin Cos Cos - Cos Sin Sin == 1/Sqrt,
   Cos Cos Sin - Sin Sin Cos == 1/Sqrt,
   Cos Sin Cos + Sin Cos Sin == 1/Sqrt
   };
SetOptions[{Solve, Eliminate}, InverseFunctions -> True];
bc = Eliminate;
(*b不容易消去*)
ab = Eliminate;
solABC = Solve;
(*可能有增根*)
pos = Position;
(*检验*)
Extract
不过7.0比8.0稍快,大致都是2-3s。

wayne 发表于 2010-12-5 14:44:57

27# chyanog
:) 我在20楼已经说过。 M8里德Solve有了较大改进,代码:Solve[{Cos Cos Cos + Sin Sin Sin == 0, Cos Sin Cos + Sin Cos Sin == 1/Sqrt,Cos Cos Sin - Sin Sin Cos == 1/Sqrt}, {a, b, c}]

wayne 发表于 2010-12-5 14:53:00

26# chyanog
佩服!:b:

wayne 发表于 2010-12-5 15:10:34

http://blog.wolfram.com/2010/11/16/programming-with-natural-language-is-actually-going-to-work/

在这个博客里,wolfram说,他已经开始着手 让mathematica进行自然语言编程了。
就是输入的是 自然语言(文字或者声音),而不是有着严格语法要求的程序语言。

这,。。。。这基本上就已经到了 人跟计算机对话的地步了。
期待。。。。
页: 1 2 [3] 4 5 6
查看完整版本: M8 娱乐贴