Sage 入门指南

新手涉及到的教学或入门贴,推荐新手必看,版主维护
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#16

帖子 peakgg » 2009-03-27 13:22

函数的一些常见问题
在定义函数的某些方面(如求导或绘图)可能会造成困惑。在本节中,我们试图解决一些相关问题。
1.如“函数,缩进和计数”一节所述,定义一个函数。这样的函数可以进行绘图,但是无法求导或者积分。

代码: 全选

sage: def f(z): return z^2
sage: type(f)
<type 'function'>
sage: f(3)
9
sage: plot(f, 0, 2)
注意最后一行的语法。如果替换为plot(f(z), 0, 2)则会产生错误。因为z只是在定义f时的一个名义变量,在定义过程之外无效。事实上就是f(z)返回的错误。下面的代码是有效的,虽然因有些常见的问题而应该避免使用(见下面的第4条)。

代码: 全选

sage: var('z')   # 将z定义为变量
z
sage: f(z)
z^2
sage: plot(f(z), 0, 2)
这样f(z)就成了符号表达式,我们接下来要讲的东西。

2.定义“可调用符号表达式”。其可被绘图输出,求导和积分。

代码: 全选

sage: g(x) = x^2
sage: g        #g将x转为x^2
x |--> x^2
sage: g(3)
9
sage: Dg = g.derivative(); Dg
x |--> 2*x
sage: Dg(3)
6
sage: type(g)
<class 'sage.calculus.calculus.CallableSymbolicExpression'>
sage: plot(g, 0, 2)
注意g是一个可调用符号表达式,而g(x)是一个与之相关但完全不同的对象,也可进行绘图输出和求导等操作,虽然这么做有些问题:见下面第5条的解释。

代码: 全选

sage: type(g(x))
<class 'sage.calculus.calculus.SymbolicArithmetic'>
sage: g(x).derivative()
2*x
sage: plot(g(x), 0, 2)
3.使用Sage预定义“微积分函数”。它们可被绘图输出,稍经处理后也可求导和积分。

代码: 全选

sage: type(sin)
<class 'sage.calculus.calculus.Function_sin'>
sage: plot(sin, 0, 2)
sage: type(sin(x))
<class 'sage.calculus.calculus.SymbolicComposition'>
sage: plot(sin(x), 0, 2)
sin本身不能求导,至少求不出cos。

代码: 全选

sage: f = sin
sage: f.derivative()
0
用f=sin(x)代替sin就可以了,不过更好的办法是用f(x)=sin(x)来定义一个可调用符号表达式。

代码: 全选

sage: S(x) = sin(x)
sage: S.derivative()
x |--> cos(x)
下面是一些常见问题和解释:

4.意外结果。

代码: 全选

sage: def h(x):
...       if x<2:
...           return 0
...       else:
...           return x-2
问题:plot(h(x), 0, 4)只绘出y=x-2,而不是h所定义的多段线。为什么?在plot(h(x), 0, 4)命令中,先对h(x)进行运算:这就意味着将x传入函数h中,即意味着x<2这句话被执行了。

代码: 全选

sage: type(x<2)
<class 'sage.calculus.equations.SymbolicEquation'>
当一个像在函数h的定义中那样的符号等式被执行时,如果等式不是明显成立的,它就会返回False。因此h(x)被赋值为x-2,也就是被输出的函数。

解决办法:不要用plot(h(x), 0, 4);用

代码: 全选

sage: plot(h, 0, 4)
5.意外地返回一个常数而不是一个函数。

代码: 全选

sage: f = x
sage: g = f.derivative()
sage: g
1
问题:例如g(3)将返回“计算错误:变量数目应该少于或等于0个。”这样的错误(译注:少于0个,-_-!)

代码: 全选

sage: type(f)
<class 'sage.calculus.calculus.SymbolicVariable'>
sage: type(g)
<class 'sage.calculus.calculus.SymbolicConstant'>
g不是一个函数,是一个常数,因此没有相关联的变量,无法向其传入任何东西。

解决办法:有几种办法。

-将最开始的f定义为一个符号表达式。

代码: 全选

sage: f(x) = x        # 而不是“f = x”
sage: g = f.derivative()
sage: g
x |--> 1
sage: g(3)
1
sage: type(g)
<class 'sage.calculus.calculus.CallableSymbolicExpression'>
-或者f的定义不变,将g定义为符号表达式。

代码: 全选

sage: f = x
sage: g(x) = f.derivative()  # i而不是 “g = f.derivative()”
sage: g
x |--> 1
sage: g(3)
1
sage: type(g)
<class 'sage.calculus.calculus.CallableSymbolicExpression'>
-或者f和g的定义不变,指明代入的变量。

代码: 全选

sage: f = x
sage: g = f.derivative()
sage: g
1
sage: g(x=3)    # 而不是“g(3)”
1
最后,还有一个办法查看f = x与f(x) = x导数的不同

代码: 全选

sage: f(x) = x
sage: g = f.derivative()
sage: g.variables()  # g中的变量
()
sage: g.arguments()  #可传入g的参数
(x,)
sage: f = x
sage: h = f.derivative()
sage: h.variables()
()
sage: h.arguments()
()
本例阐明,h没有参数,这就是h(3)返回错误的原因。
wangtwo
帖子: 73
注册时间: 2007-05-07 9:42

Re: Sage 入门指南

#17

帖子 wangtwo » 2009-03-27 19:57

谢谢 装openjdk没用 我可以试试gnuplot, 毕竟那个功能只是好玩, 没有大碍
peakgg 写了:
wangtwo 写了:奇怪 装过java 在iceweasel中看不到结果, 但是在opera中可以

You do not have Java applets enabled in your web browser, or your browser is blocking this applet.
Check the warning message from your browser and/or enable Java applets in
your web browser preferences, or install the Java Runtime Environment from http://www.java.com
ubuntu的官方论坛上有人说要用openjdk 不过那个问问题的人最后也没解决问题 他装的是64位系统 被建议改装32位的 如果你装的是32位的系统 可以试一试openjdk
地址在这http://ubuntuforums.org/archive/index.php/t-927571.html
用这个jmol是迫不得已吧 vtk和mayavi应该不支持浏览器的
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#18

帖子 peakgg » 2009-03-31 14:09

基本域

这里举例说明Sage中的一些基本域。例如,在有理数范围内可能会用到RationalField()或者QQ:

代码: 全选

sage: RationalField()
Rational Field
sage: QQ
Rational Field
sage: 1/2 in QQ
True
十进制数1.2被认为在QQ内,因为从实数到有理数间有一个强制匹配:

代码: 全选

sage: 1.2 in QQ
True
然而,从带有三个元素的有限域到有理数域间则没有强制匹配:

代码: 全选

sage: c = GF(3)(1)   # c是GF(3)域中的元素1
sage: c in QQ
False
同样,符号常量pi当然也不在有理数域:

代码: 全选

sage: pi in QQ
False
符号I表示-1的平方根;i是I的同义字。当然,它也不在有理数域:

代码: 全选

sage: i  # -1的平方根
I
sage: i in QQ
False
顺便,Sage预定义的其它域有整数ZZ,实数RR和复数CC。我们将在多项式一节还讨论多项式域。

下面举例说明一些算法。

代码: 全选

sage: a, b = 4/3, 2/3
sage: a + b
2
sage: 2*b == a
True
sage: parent(2/3)
Rational Field
sage: parent(4/2)
Rational Field
sage: 2/3 + 0.1       # 在加之前自动匹配
0.766666666666667
sage: 0.1 + 2/3       # SAGE中的强制规则是对称的(译注:这两个功能避免了python中整数相除时的潜在错误)
0.766666666666667
在定义复数时有个巧妙的办法:前面说过,符号i表示-i的平方根,但它是只代表-1的平方根。调用CC(i)返回复数形式的-i的平方根.

代码: 全选

sage: i = CC(i)       # 浮点型复数
sage: z = a + b*i
sage: z
1.33333333333333 + 0.666666666666667*I
sage: z.imag()        # 虚部
0.666666666666667
sage: z.real() == a   # 在比较前强制转换
True
sage: QQ(11.1)
111/10
上次由 peakgg 在 2009-06-22 11:39,总共编辑 1 次。
头像
i_NIX
帖子: 450
注册时间: 2008-02-11 15:46

Re: Sage 入门指南

#19

帖子 i_NIX » 2009-05-31 23:34

我是从源里安装的sagemath,但是无法画三维的图像(二维的没问题),
比如在notebook里执行:(在终端里执行什么输出都没有(错误输出都没有)。)

u,v=var('u,v')
fx=(1+cos(v))*cos(u)
fy=(1+cos(v))*sin(u)
fz=-tanh((2/3)*(u-pi))*sin(v)
parametric_plot3d([fx,fy,fz],(u,0,2*pi),(v,0,2*pi),frame=False,color="red")

就会出现这个错误。我搜索了很久,没有找到解决办法,楼主可以帮忙吗

ReferenceError: jmolSetDocument is not defined

ubuntu 9.04,firefox,java插件都装了。
Google Talk群组,请来<雨云>一番!
主题:UbuntuLinux编程科幻、民主、科学等。
添加 rain-cloud@appspot.com 为好友(然后say hi,并等待验证)
参见 http://goo.gl/xIpxH

Twitter:http://twitter.com/nixzhu
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#20

帖子 peakgg » 2009-05-31 23:59

看邮件列表里有人提到这个问题 有人回答是sagemath版本的问题
你有在www.sagenb.org试过么
头像
i_NIX
帖子: 450
注册时间: 2008-02-11 15:46

Re: Sage 入门指南

#21

帖子 i_NIX » 2009-06-01 19:00

sagenb应该可以(可以看到一个黑框还有计时等),但我的网速太慢了,很难等它显示出来。
源里安装的是3.0.5版。
不过还好三维用得不多,现在学习一些简单的,希望以后的新版本deb可以解决这个问题(我不想自己编译新版本)。
我觉得在其他方面,都可以淘汰MATLAB了。不过要多学点Python了。
Google Talk群组,请来<雨云>一番!
主题:UbuntuLinux编程科幻、民主、科学等。
添加 rain-cloud@appspot.com 为好友(然后say hi,并等待验证)
参见 http://goo.gl/xIpxH

Twitter:http://twitter.com/nixzhu
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#22

帖子 peakgg » 2009-06-01 19:48

估计不会有deb的出来 都要自己make的 但其实也不要编译什么 都是脚本文件 到官网上下个最新的好了
不过听你的网速 下载下来估计也得费一番功夫 300M呢
头像
tenzu
论坛版主
帖子: 36924
注册时间: 2008-11-21 20:26

Re: Sage 入门指南

#23

帖子 tenzu » 2009-06-01 19:51

呵呵,也许我可以扔掉maple了

多谢LZ
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#24

帖子 peakgg » 2009-06-01 21:19

我也只是翻译了这个指南的一小部分 不是数学专业的 有点力不从心了 呵呵
感觉sage花了很大力气在符号计算上呢
头像
i_NIX
帖子: 450
注册时间: 2008-02-11 15:46

Re: Sage 入门指南

#25

帖子 i_NIX » 2009-06-21 13:44

最近下载了sage4.0,果然3D绘图正常了。Jmol是sage里自带的的吗?
Google Talk群组,请来<雨云>一番!
主题:UbuntuLinux编程科幻、民主、科学等。
添加 rain-cloud@appspot.com 为好友(然后say hi,并等待验证)
参见 http://goo.gl/xIpxH

Twitter:http://twitter.com/nixzhu
l1f2ng
帖子: 20
注册时间: 2008-01-01 19:50

Re: Sage 入门指南

#26

帖子 l1f2ng » 2009-09-01 16:03

看到好东西了, 谢谢LZ :em11
JINGYA
帖子: 17
注册时间: 2009-01-31 1:01

Re: Sage 入门指南

#27

帖子 JINGYA » 2009-12-07 13:26

牛人,顶你!
JINGYA
帖子: 17
注册时间: 2009-01-31 1:01

Re: Sage 入门指南

#28

帖子 JINGYA » 2009-12-07 13:34

牛人,再顶你一次!!!
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40

Re: Sage 入门指南

#29

帖子 peakgg » 2010-04-28 10:32

扔在这好久了。。。今天搜了一下,发现已经有人翻译完了。 :em06
http://www.sagemath.org/zh/
头像
i_NIX
帖子: 450
注册时间: 2008-02-11 15:46

Re: Sage 入门指南

#30

帖子 i_NIX » 2010-04-28 13:09

Google Talk群组,请来<雨云>一番!
主题:UbuntuLinux编程科幻、民主、科学等。
添加 rain-cloud@appspot.com 为好友(然后say hi,并等待验证)
参见 http://goo.gl/xIpxH

Twitter:http://twitter.com/nixzhu
回复