freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

maple程序設計(文件)

2025-03-27 18:38 上一頁面

下一頁面
 

【正文】 bytesused): #使用寄存器內(nèi)存量 settime:=time(): #開始計時 f1_3(,22)。 cpu_time:=(time()settime)*seconds。 3 子程序求值 在 Maple 子程序中的語句 , 求值的方式和交互環(huán)境中的求值有所不同 , 這在某種程度上是為了提高子程序的執(zhí)行效率而考慮的 . 在交互式環(huán)境中 , Maple 對于一般的變量和表達式都進行完全求值 (除了數(shù)組、映射表等數(shù)據(jù)結構外 ). 比如先將 b 賦給 a, 再將 c賦給 b, 則最終 a 的值也指向 c. a:=b: b:=c: a+1。 a+1。 d2 ans。 c2 ans。 sqrt1(a,ans)。 end: sqrt1(d,39。 := q q 不管在交互式環(huán)境下還是在程序中 , Maple 對于每一個全局變量都進行完全求值 , 除非它是數(shù)組、映射表或者子程序 . 對于數(shù)組、映射表和子程序 , Maple 采用賦值鏈中的上一名稱來求值 . 除了上面這些特殊數(shù)據(jù)對象及下面一個特例外 , 總結起來 , Maple 對于子程序的參數(shù)進行 0 層求值 , 對于局部變量進行 1 層求值 , 而對于全局變量 , 則進行完全求值 . 對于上面說的求值規(guī)則 , 在 Maple 中還有個特例 , 就是“同上 ”操作符“%”需要引起注意 . 就其作用來說 , 它應該屬于局部變量 . 在進入一個子程序時 , Maple 會自動地把該子程序中的%設置成 NULL(空 ). 但是 , 對于這個“局部變量” , Maple 不遵循上面的規(guī)則 , 無論在那兒都會將其完全求值 . 我們下面通過一個例子說明它在子程序中的求值機制: f:=proc() local a,b,c,d。 c:=d。 A t t h e b e g in n in g , [ % ] is 159 ,N o w [% ] is ???d 1 可以看出 , 盡管在子程序內(nèi)部 , 局部變量 a僅進行一層求值 , 但指代 a+1的同上操作符卻進行了完全求值 , 得到 d+1 的結果 . 環(huán)境變量 所謂環(huán)境變量就是從一個程序退出時系統(tǒng)自動設置的全局變量。 end: g:=proc() print(Entering g. Digits is, Digits)。 print(Back in g from f, Digits is, Digits)。 160 10 可以看出 , 從子程序 g 中返回時 , Digits 又被自動地設成了原來的值 (10). 如果你需要自己定義一些具有這樣的特性的環(huán)境變量 , 也十分簡單 —Maple會把一切以 _Env開始的變量認作是環(huán)境 變量 . 4 嵌套子程序和記憶表 嵌套子程序 很多情況下 , 可以在一個子程序的內(nèi)部定義另一個子程序 . 實際上 , 我們在寫這樣的程序時常常沒有意識到它是嵌套子程序 . 用于對每一個元素操作的 map命令在嵌套程序設計中很有用 . 比如 , 編寫一個子程序 , 它返回有序表中的每一個元素都將被第一個元素除的結果 . nest:=proc(x::list) local v。 [ ], , , ,1 2 4 8 16 在上面的程序中 , 我們在子程序中定義了另一個子程序 : yy/v, 這個子程序中有一個變量 v, Maple根據(jù)有效域的范圍 , 認為它就是外面的子程序 nest中的同名變量 v. 那么這是一個全局變量還是一個局部變量?顯然兩者都不是 , 因為把上面的例子中的內(nèi)部子程序的 v 聲明成 local或者 global, 都無法達到我們的目的 . 那么 , Maple究竟是怎么樣來判斷一個變量的作用域呢?首先 , 它自里向外 , 一層一層地尋找顯式地用 local、 global聲明的同名變量 , 或者是子程序 的參數(shù) . 如果找到了 , 它就將其綁定在外層的同名變量之上 , 實際上就是將兩個變量視為同一 , 就像上面例子中的情況 . 如果沒有找到 , 就遵循下面的原則:如果變量位于賦值運算符“ :=”的左邊 , 就視其為局部變量 , 否則均認為它是全局變量 . 再看下面一個實例: uniform:= proc(r::constant..constant) proc() local intrange, f。 end: end: U:=uniform(cos(2)..sin(1)): Digits:=4: seq(U(),i=1..10)。 Fibonacci(n1)+Fibonacci(n2)。還有一點, remember 選項與表、陣列、向量不能混用,因為 remember無法注意到表中元素的變化。F(1):=1。 := T tab le( [ ])???2 2 再將相應的項刪除掉 , 則又回復原來的記憶表: T[2]:=evaln(T[2])。 interation:=xexpr/diff(expr,x)。 := N e w t o n ?? ?x ???x ???x 2 x???1 1x 然后我們利用已經(jīng)得到的迭代遞推函數(shù) Newton, 可以用來求解這個超越方程: x0:=。 end: 由于輸入?yún)?shù)是一個程序 , 就不需要再顯式地指出自變量了 , 我們用 D運算符求它的導函數(shù) , 并且作運算 . 這里 , (xx)表示恒等函數(shù) xxf ?)( . 從這里 , 我們也可以知道 , 在 Maple 中 , 不僅代數(shù)表達式可以進行運算 , 具有相同自變量的函數(shù) 也可以相互進行運算 . 利用上面的程序求解超越方程 0cos2 ?? xx : g:=xx^2cos(x)。od。 ?? ?x ( )( )?? ?x x ???x 1 %(1)。 shift(sin)。 : = s h i f t ?? ?::f p r o c e d u r e ?? ?x ( )f ,?? ?x 1 a r g s . . 2 1 shift(sin)。 166 : = h ?? ?( ), ,x y z y z 2x hh(x,y,z)。=eval(f),xF(x+1,args[2..1]))。 := h 45 H(x,y,z)。 a。 := test { },a a 每 次調(diào)用程序 make_a 生成的同名變量 , 是互不相同的 , 而且 , 它們和全局變量 a也不相同 . 注意: Maple 并不是只依據(jù)變量名來區(qū)別變量的 . 在交互式環(huán)境中鍵入變量 a時 , Maple 認為它是全局變量 . 所以 , 可以用上面的同名變量集合 test 中很容易地找到全局變量 . member(a,test,num)。 := eqn ??????a a 2 a another_a:=remove(xeval(x=a),lhs(eqn))。 false 在這一小節(jié)中 , 我們引入了令人費解的“越界”的局部變量 . 而實際上 , 可能在以前的學習中就已經(jīng)碰到過這樣的問題 . 已經(jīng)學習過的 assume命令 , 它將一個變量賦予另一個有確定范圍的變量 — 新的變量只是在原來的變量后面加上一個“ ~” . 這個具有波浪線的變量就是一個“越界”的局部變量 — 如果在交互式環(huán)境中輸入它 (注意:需要用一對反向撇號“ 39。 := x ???b~ 1 subs(39。b39。 true 169 type({x[1],x[2]},Variables)。 ???b~1 7 擴展 Maple命令 雖然編寫程序可以滿足各種不同的需要,但是有時候 , 根據(jù)需要擴展 Maple 原有命令可以事半功倍,事實上, Maple 更大的特點提供了一種“平臺” . 在大多數(shù)現(xiàn)代編程語言中 , 都支持自定義的數(shù)據(jù)結構和數(shù)據(jù)類型 , Maple 也具有這樣的功能 , 只需將一個結構類型賦值給 `type/TypeName`, TypeName 就可以作為一個類型使用了 . 這樣 , 對于結構本身只需要寫一次 , 減少了出錯的可能性 , 也減少了工作量 . `type/Variables`:={name,list(name),set(name)}。=c,x)。”括起來 ), Maple 將不能識別 , 因為編譯程序認為輸入的是全局變量 . assume(b0)。 eqn。 1 同名變量的最大用途在于可以用來寫出一串通常用 Maple 很難得到的表達式 . 舉例來說 , Maple 會自動地把表達式 a+a代簡成 2a, 要得到表達式 a+a=2a是一件不容易的事 . 現(xiàn)在 , 我們可以利用上面的子程序 make_a 來輕松地寫出這樣的式子 . a+make_a()=2*a。 檢查所產(chǎn)生的變量是否相同 , 可以根據(jù)中間元素的唯一性 (自動刪除相同的元素 ). test:={a,a,a}。 := f p r o c ( ) e n d p r o cx ^x 2 op(f)。 H:=shift(h)。 subs(39。 := hh ???x ( )h ,?? ?x 1 a r g s . . 2 1 hh(x,y)。 := h ???( ),x y x y shift(h)。 unapply(f(x+1),x)。 : = s h if t ?? ?::f p r o c e d u r e ?? ?x ( )f ?? ?x 1 shift(sin)。 : = Ne w t on ?? ?( )?? ?x x ?? ?x ?? ?x 2 ( )c os x?? ?x ?? ?2 x ( )s i n x x0:=。od。 end: expr:=x2*sqrt(x)。 t a b le ( [ , , , ] )?? ?0 0 ?? ?1 1 ?? ?2 1 ?? ?3 2 Maple 也可以自動刪除子程序的記憶表 , 如果我們子程序定義時聲明 system 選項 , 系統(tǒng)將會在回收無用內(nèi)存時將記憶表刪除 , 就如同大多數(shù)系統(tǒng)內(nèi)部子程序一樣 . 對于記憶表的使用范圍 , 一般地 , 它只適用于對于確定的參數(shù)具有確定的結果的程序 , 而對于那些結果不確定的程序 , 比如用到環(huán)境變量、全局變量 , 或者時間函數(shù)等的程序 , 就不能使用 , 否則將會導致錯誤的結果 . 163 5 返回子程序的子程序 在所有的子程序中 , 編寫返回值為一個子程序的程序所遇到的困難也許是最 多的了 . 編寫這樣的程序 , 需要對 Maple 的各種變量的求值規(guī)則、有效語句有透徹的理解 . Maple 一些內(nèi)部子程序就有這樣的機制 , 比如隨機函數(shù) rand, 返回的就是一個子程序 , 它會在給定的范圍內(nèi)隨機地取值 . 下面以牛頓迭代法和函數(shù)的平移為例說明這種程序設計技巧。 3 5 4 2 2 4 8 4 8 1 7 9 2 6 1 9 1 5 0 7 5 由于程序 F的代碼很短,很容易忘記對初始條件賦初值,這樣會導致永不終止的遞歸,從而產(chǎn)生死 循環(huán) . 因此,程序 Fibonacci較 F要好一些 . (3) 在記憶表中刪除項 記憶表是映射表的一種 , 可以方便地在其中添加或者刪除特定的項 , 和一般變量一樣 , 刪除一個表項只需要將其名稱用 evaln 賦給它本身就行了 . 假設 , 因為輸入錯誤 , 我們在前面一個程序中加入了一個錯誤的項: Fibonacci(2):=2。 F(n1)+F(n2)。 2 op(4,eval(Fibonacci))。下面再建立一個 Fibonacci子程序: Fibonacci:=proc(n::nonnegint) option remember。 161 f:= rand(intrange)。 map(yy/v,x)。 , E n ter in g f . D ig it s is 10 , N o w D ig its h as b ec o m e 20 g()。 print(Now Digits is, Digits)。 Digits:=20。 print(Now [%] is,%)。 a:=b。)。 b2 因為這次調(diào)用是在程序內(nèi)部 , 所以只進行第一層求值 , 進入 sqrt1 的參數(shù)值為 b. Maple 對于子程序的參數(shù) , 都只在調(diào)用之前進行一次求值 , 而在子程序內(nèi)部出現(xiàn)的地方都用這次求值的結果替換 , 而不再重新進行求值 . 如前所述之 sqrt1: sqrt1:=proc(x::anything,y::name) y:=x^2。 a:=b。ans39。 ???b 1 這是因為 a 和 b 都是局部變量 , Maple 對于子程序中的局部變量只進行一層的求值 . 下面 , 我們針對子程序中的不同的變量 , 系統(tǒng)介紹其求值機制 .
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1