找回密码
 欢迎注册
楼主: wayne

[灌水] M8 娱乐贴

[复制链接]
 楼主| 发表于 2010-12-4 08:00:35 | 显示全部楼层
16# G-Spider
用fsolve的时候,simplify好像是多余的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-4 08:04:16 | 显示全部楼层
本帖最后由 wayne 于 2010-12-4 08:30 编辑

10# chyanog
对于
  1. Eliminate[{x + y == \[Gamma], Cos[\[Alpha]] == Cos[\[Theta]] Cos[x],
  2.   Cos[\[Beta]] == Cos[\[Theta]] Cos[y]}, {x, y}]
复制代码
你换成Solve函数试试 ,Solve函数可以给出你想要的解,即M8所说的 generic solutions 。

Reduce是分情况讨论,给出所有各种可能条件下的解,所以速度较慢,形式也较杂乱.
========================================
关于那个正切展开,我有一很弱的方法:
  1. FullSimplify[Tan[2 ArcTan[x]] // TrigExpand]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-12-4 16:53:13 | 显示全部楼层
22# wayne
能试的我基本都试过了,其实这个方程是由一道立体几何题导出的,目标是消去x,y,得到θ,(α、β、γ都是常量),这是Maple得到的结果,跟手算的一致,
    关于其他三角函数的展开,我只是奇怪Wolfram为什么至今不提供那样的“正统”展开,其实你的办法我以前试过了,顺便再提供一种不太好的,

  1. Solve[Eliminate[{TrigExpand@Tan[3 t], Tan[t]} == {y, x}, t,
  2.   InverseFunctions -> True], y]
复制代码
另外,不知道你注意没有,FunctionExpand的某些功能从5.2版以后有所削弱,比如:FunctionExpand[Sin[1 Degree]]现在的版本算不了了,通过另类方法也能。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-5 09:38:50 | 显示全部楼层
本帖最后由 wayne 于 2010-12-5 10:08 编辑

23# chyanog
, 前面的我献丑了。
我试试,看能不能解答吧,
关于其他三角函数的展开,我只是奇怪Wolfram为什么至今不提供那样的“正统”展开,其实你的办法我以前试过了
这方面本身就没有标准可言,不同的软件出现了不一致是可以理解的吧,也许maple歧视反三角函数,mathematica 兼容并蓄,也许是mathematica偷懒。。。谁知道呢,呵呵。
FunctionExpand的某些功能从5.2版以后有所削弱

这个函数说实在的,我没怎么用,感觉你应该是mathematica老用户了 。
我查了一下FunctionExpand,发现这个函数有点generic,以至于我们虽然用它了,却还不是很清楚它在背后具体作的哪种类型的数学操作。
=====
你的目的是想把三角函数转换成根式的形式。即TrigToRadicals , 5.2里面是有这个函数的,按道理我们应该这么写,
  1. Sin[Pi/180] // 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 。这个我很看好。比如,在这里,
  1. Sin[Pi/180] // RootReduce
复制代码
发现结果是一多项式方程的根,即Sin[1 Degree]是代数数,我们还知道这个是可以用根式表达出来的,尽管很繁杂,于是,我们对这个Root对象这么操作:
  1. Sin[Pi/180] // RootReduce // ToRadicals
复制代码
这个估计就是你想要的答案了。
=================
这是我看好mathematica的一个重要原因。
=============================================
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-5 10:23:38 | 显示全部楼层
其实如果再深入分析的话,我不仅要问,什么是根式表达式?

我们可能很难回答。如果你不歧视负数的幂的话,这个答案会很简洁的:
  1. Sin[Pi/180] // ToRadicals
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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[1 Degree]]现在的版本算不了了,通过另类方法也能
,Sin[Pi/180] // RootReduce // ToRadicals
我用的展开跟你一样,O(∩_∩)O~,。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-12-5 14:26:00 | 显示全部楼层
本帖最后由 chyanog 于 2010-12-5 14:36 编辑

那个三角方程的Mathematica解法,直接解的话我不知道得多长时间,反正我的机子几分钟没有结果。变通的方法我找到了2、3种,先贴出一个:

  1. eq = {
  2.    Sin[a] Sin[b] Sin[c] + Cos[a] Cos[b] Cos[c] == 0,
  3.    Sin[a] Cos[b] Cos[c] - Cos[a] Sin[b] Sin[c] == 1/Sqrt[3],
  4.    Cos[a] Cos[b] Sin[c] - Sin[a] Sin[b] Cos[c] == 1/Sqrt[3],
  5.    Cos[a] Sin[b] Cos[c] + Sin[a] Cos[b] Sin[c] == 1/Sqrt[3]
  6.    };
  7. SetOptions[{Solve, Eliminate}, InverseFunctions -> True];
  8. bc = Eliminate[eq, a];
  9. (*b不容易消去*)
  10. ab = Eliminate[eq, c];
  11. solABC = Solve[ab && bc, {a, b, c}];
  12. (*可能有增根*)
  13. pos = Position[Union /@ (eq /. solABC // FullSimplify), {True}];
  14. (*检验*)
  15. Extract[solABC, pos]
复制代码
不过7.0比8.0稍快,大致都是2-3s。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-5 14:44:57 | 显示全部楼层
27# chyanog
我在20楼已经说过。 M8里德Solve有了较大改进,代码:
  1. Solve[{Cos[a] Cos[b] Cos[c] + Sin[a] Sin[b] Sin[c] == 0, Cos[a] Sin[b] Cos[c] + Sin[a] Cos[b] Sin[c] == 1/Sqrt[3],Cos[a] Cos[b] Sin[c] - Sin[a] Sin[b] Cos[c] == 1/Sqrt[3]}, {a, b, c}]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-5 14:53:00 | 显示全部楼层
26# chyanog
佩服!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-12-5 15:10:34 | 显示全部楼层
http://blog.wolfram.com/2010/11/ ... ally-going-to-work/

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

这,。。。。这基本上就已经到了 人跟计算机对话的地步了。
期待。。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 03:50 , Processed in 0.043466 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表