注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英教如何写maple的proc  

2012-03-30 22:50:04|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
即以此功德,庄严佛净土。上报四重恩,下救三道苦。惟愿见闻者,悉发菩提心。在世富贵全,往生极乐国。
1) proc 的编程范式
procedureName := proc( parameterName :: parameterType , ......) :: returnType;
   description `returns one step with Newton's method on f`:    # 注意不是单引号而是Esc键下面的那个键!
   statementSequence;
end proc;
注意maple中支持的参数类型用 ?type 查阅,已经很全了,我不会自己定义哦!
2) proc 举例  ------ 传入参数为procedure,返回参数为procedure的proc
a.   version 1
newtonstep := proc(f::procedure)
description `returns one step with Newton's method on f`:
local ix:
ix := x -> x: # identity function
ix - eval(f)/D(eval(f)); # implicit return
end proc;
阿英教如何写maple的proc - 阿英 - Mr.Right
 
g := x -> cos(x) - 1/2; # compute root of g(x) = 0
gstep := newtonstep(g); # create a procedure
gstep(a); # symbolic execution
gstep(1.4); # numerical execution
y := 0.4: # starting value
Digits := 32: # working precision
for i from 1 to 7 do # we will do 7 steps
y := gstep(y);
end do;
阿英教如何写maple的proc - 阿英 - Mr.Right
 
b.   version 2
newtonstep := proc(f::procedure) ::procedure;
description `returns one step with Newton's method on f`:
local ix:
ix := x -> x: # identity function
ix - eval(f)/D(eval(f)); # implicit return
end proc;

g := x -> cos(x) - 1/2;  # compute root of g(x) = 0
gstep := newtonstep(g); # create a procedure
gstep(a); # symbolic execution
gstep(1.4); # numerical execution
y := 0.4: # starting value
Digits := 32: # working precision
for i from 1 to 7 do # we will do 7 steps
y := gstep(y);
end do;  #  这里 y就是g(x) = 0的x
evalf(y-(1/3)*Pi);   # 检验下!结果等于0,因为 cos(Pi/3) = 1/2

3)  带有下标的proc ------ Indexed Procedure
Indexed Procedure 的典型代表就是以10为底的对数:log[10](10) 中[10]就是所谓的Index,下标
阿英教如何写maple的proc - 阿英 - Mr.Right
 We see that we can check on whether a name is indexed or not via type and get access to the index with op.
阿英教如何写maple的proc - 阿英 - Mr.Right
cool := proc(t)
description `model of cooling temperature with index`:
local b:
if type(procname,`indexed`) # test if procedure has an index
     then b := op(procname):  # take index as base
else b := 32: # default value of base
end if:
return b + (70-b)*exp(-0.2*t): # the general formula
end proc;
cool[20](1.4); cool(1.4); # test for different values of base
cool[20](0); cool(0); # initially we are inside
cool[20](100); cool(100); # close to outside temperature
 
We use indexed procedures to implement functions with parameters for which good default values are known. The default values may correspond to cases for which a very e±cient implementation exists, whereas for other values, a general recipe needs to be applied.

4)递归proc ---- Recursive Procedure
阿英教如何写maple的proc - 阿英 - Mr.Right
 fib := proc(n::nonnegint)
description `returns the nth Fibonacci number`:
if n = 0 then
return 0:
elif n = 1 then
return 1:
else
return fib(n-2)+fib(n-1):
end if;
end proc;
for i from 1 to 10 do # first ten Fibonacci numbers   # 测试程序
fib(i);
end do;
This is a very expensive way to compute the Fibonacci numbers, because of too many repetitive calls.
starttime := time():
fib(20);
elapsed := (time()-starttime)*seconds;
阿英教如何写maple的proc - 阿英 - Mr.Right
We will slightly modify the definition of the procedure to compute the Fibonacci numbers:

newfib := proc(n::nonnegint)
description `Fibonacci with remember table`:
option remember:
if n = 0 then
return 0;
elif n = 1 then
return 1;
else
return newfib(n-2) + newfib(n-1);
end if:
end proc;

 With the option remember, Maple has built a \remember table" for the procedure. This remember table stores the results of all calls of the procedure.

starttime := time():
newfib(20);
elapsed := (time()-starttime)*seconds;
阿英教如何写maple的proc - 阿英 - Mr.Right
 # 下面看看remember table里面的内容
eval(newfib);
T := op(4,eval(newfib));
阿英教如何写maple的proc - 阿英 - Mr.Right
 The command forget is used to clear the remember table of a Maple procedure. For example:
forget(newfib);

  评论这张
 
阅读(998)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016