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

正文內(nèi)容

maple程序設(shè)計(已改無錯字)

2023-04-15 18:38:13 本頁面
  

【正文】 y_used:=evalf((kernelopts(bytesused)setbytes)/1024*kbytes,5)。 := m e m o r y_ u s ed 6 3 4 2 3 . k b yte s 顯然 Maple自動求導(dǎo)在計算時間和存儲空間上具有明顯 的優(yōu)越性。巧妙利用自動微分解決較復(fù)雜的函數(shù)求導(dǎo)問題有十分現(xiàn)實的意義。 3 子程序求值 在 Maple 子程序中的語句 , 求值的方式和交互環(huán)境中的求值有所不同 , 這在某種程度上是為了提高子程序的執(zhí)行效率而考慮的 . 在交互式環(huán)境中 , Maple 對于一般的變量和表達式都進行完全求值 (除了數(shù)組、映射表等數(shù)據(jù)結(jié)構(gòu)外 ). 比如先將 b 賦給 a, 再將 c賦給 b, 則最終 a 的值也指向 c. a:=b: b:=c: a+1。 ???c 1 但在子程序內(nèi)部情況就不一樣了 , 試看下述實驗: f:=proc() local a,b。 a:=b。 b:=c。 a+1。 end: 結(jié)果居然是: f()。 ???b 1 這是因為 a 和 b 都是局部變量 , Maple 對于子程序中的局部變量只進行一層的求值 . 下面 , 我們針對子程序中的不同的變量 , 系統(tǒng)介紹其求值機制 . 參數(shù) 子程序中的參數(shù) , 就是那些在 proc( )的括號中的變量 . 參數(shù)是一類特殊的變量 , 在調(diào)用子程序時 , 會把它們替換成實際的參數(shù) . sqrt1:=proc(x::anything,y::name) y:=x^2。 157 end: sqrt1(d,ans)。 d2 ans。 d2 我們再來試試別的參數(shù) , 比如前面賦值過的 a作為第一個參數(shù) , 第二個參數(shù)仍用 ans, 只不過加了單引號: sqrt1(a,39。ans39。)。 c2 ans。 c2 事實上 , Maple 在進入子程序以前就已經(jīng)對參數(shù)進行了求值 , 因為是在子程序外進行求值 , 所以求值規(guī)則服從調(diào)用時所在的環(huán)境 . 上面是在交互式環(huán)境下調(diào)用 sqrt1得到的結(jié)果 , 作為對照看看在子程序內(nèi)部調(diào)用上面的 sqrt1 子程序會有什么不同 . g:=proc() local a,b,ans。 a:=b。 b:=c。 sqrt1(a,ans)。 end: g()。 b2 因為這次調(diào)用是在程序內(nèi)部 , 所以只進行第一層求值 , 進入 sqrt1 的參數(shù)值為 b. Maple 對于子程序的參數(shù) , 都只在調(diào)用之前進行一次求值 , 而在子程序內(nèi)部出現(xiàn)的地方都用這次求值的結(jié)果替換 , 而不再重新進行求值 . 如前所述之 sqrt1: sqrt1:=proc(x::anything,y::name) y:=x^2。 y+1。 end: sqrt1(d,39。ans39。)。 ???ans 1 158 可見 , 對參數(shù)賦值的作用只有一個 —返回一定的信息 . 因為在子程序內(nèi)部 , 永遠不會對參數(shù)求值 . 我們可以認為 , 參數(shù)是一個 0 層求值的變量 . 局部變量和全局變量 Maple 對于局部變量只進行一層求值 , 也就相當于用 eval(a, 1)得到的結(jié)果 . 這種求值機制不僅可以提高效率 , 而且還有著更重要的作用 . 比如在程序中 , 我們往往需要把兩個變量的值交換 , 一般地 , 我們使用一個中間變量來完成這樣的交換 . 但如果求值機制和交互式環(huán)境中一樣 , 將達不到我們的目的 . 試看 , 在交互式環(huán)境下 , 我們企圖用這樣 的方法交換兩個未被賦值的變量會有什么后果: temp:=p: p:=q: q:=temp。 := q q 不管在交互式環(huán)境下還是在程序中 , Maple 對于每一個全局變量都進行完全求值 , 除非它是數(shù)組、映射表或者子程序 . 對于數(shù)組、映射表和子程序 , Maple 采用賦值鏈中的上一名稱來求值 . 除了上面這些特殊數(shù)據(jù)對象及下面一個特例外 , 總結(jié)起來 , Maple 對于子程序的參數(shù)進行 0 層求值 , 對于局部變量進行 1 層求值 , 而對于全局變量 , 則進行完全求值 . 對于上面說的求值規(guī)則 , 在 Maple 中還有個特例 , 就是“同上 ”操作符“%”需要引起注意 . 就其作用來說 , 它應(yīng)該屬于局部變量 . 在進入一個子程序時 , Maple 會自動地把該子程序中的%設(shè)置成 NULL(空 ). 但是 , 對于這個“局部變量” , Maple 不遵循上面的規(guī)則 , 無論在那兒都會將其完全求值 . 我們下面通過一個例子說明它在子程序中的求值機制: f:=proc() local a,b,c,d。 print(At the beginning, [%] is, %)。 a:=b。 b:=c。 c:=d。 a+1。 print(Now [%] is,%)。 end: f()。 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 的結(jié)果 . 環(huán)境變量 所謂環(huán)境變量就是從一個程序退出時系統(tǒng)自動設(shè)置的全局變量。 Maple 中有幾個內(nèi)建的環(huán)境變量,如 Digits, Normalizer, Testzero, mod, printlevel等 . 從作用域來看 , 它們應(yīng)該算作是全局變量 . 在求值上 , 它們也像其他全局變量一樣 , 始終都是完全求值 . 但是如果 在子程序中間對環(huán)境變量進行了設(shè)置 , 那么 , 在退出該子程序時 , 系統(tǒng)會自動地將其恢復(fù)成進入程序時的狀態(tài) , 以保證當前行時的環(huán)境 . 正因如此 , 我們稱其為環(huán)境變量 . 試看下面程序: f:=proc() print(Entering f. Digits is, Digits)。 Digits:=20。 print(Now Digits has bee, Digits)。 end: g:=proc() print(Entering g. Digits is, Digits)。 Digits:=100。 print(Now Digits is, Digits)。 f()。 print(Back in g from f, Digits is, Digits)。 end: f()。 , 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()。 , E n t er in g g . D ig its is 10 , N o w D igits is 100 , E n ter in g f . D ig it s is 100 , N o w D ig its h as b ec o m e 20 , B ac k in g f r o m f , D ig it s is 1 0 0 Digits。 160 10 可以看出 , 從子程序 g 中返回時 , Digits 又被自動地設(shè)成了原來的值 (10). 如果你需要自己定義一些具有這樣的特性的環(huán)境變量 , 也十分簡單 —Maple會把一切以 _Env開始的變量認作是環(huán)境 變量 . 4 嵌套子程序和記憶表 嵌套子程序 很多情況下 , 可以在一個子程序的內(nèi)部定義另一個子程序 . 實際上 , 我們在寫這樣的程序時常常沒有意識到它是嵌套子程序 . 用于對每一個元素操作的 map命令在嵌套程序設(shè)計中很有用 . 比如 , 編寫一個子程序 , 它返回有序表中的每一個元素都將被第一個元素除的結(jié)果 . nest:=proc(x::list) local v。 v:=x[1]。 map(yy/v,x)。 end: lst:=[2,4,8,16,32]: nest(lst)。 [ ], , , ,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。 intrange:=map(xround(x*10^Digits),evalf(r))。 161 f:= rand(intrange)。 evalf(f()/10^Digits)。 end: end: U:=uniform(cos(2)..sin(1)): Digits:=4: seq(U(),i=1..10)。 , , , , , , , , ,. 4 2 1 0 . 7 4 4 9 . 0 6 4 4 0 . 7 3 8 6 . 7 9 9 4 . 2 1 6 6 . 1 1 7 4 . 0 2 7 4 0 . 2 5 7 0 . 3 5 3 8 記憶表 記憶表的目的是為了提高計算效率 , 它把每一個計算過的結(jié)果存儲在一個映射表中 , 所以在下一次用相同的參數(shù)直接調(diào)用以避免重復(fù)計算 . (1) remember選項 在程序中可以加入 remember 選項來建立該子程序的記憶表 . remember 選項可以把對時間和空間的指數(shù)增長的需求約簡到線性增長。下面再建立一個 Fibonacci子程序: Fibonacci:=proc(n::nonnegint) option remember。 if n=1 then RETURN(n) fi。 Fibonacci(n1)+Fibonacci(n2)。 end: 在我們計算了 F3 之后 , 它的記憶表中就有了 4 項 (記憶表中的子程序的第 4 個元素—用 op (4, ? )來獲得 ), 可以用 op 命令來檢查一個子程序的記憶 表: Fibonacci(3)。 2 op(4,eval(Fibonacci))。 t a b le ( [ , , , ] )?? ?0 0 ?? ?1 1 ?? ?2 1 ?? ?3 2 但是,過分地使用 remember 選項也并非全是好事,一方面,使用 remember 選項的程序?qū)?nèi)存的需求比正確寫出的不使用 remember 選項的程序要高,另一方面, remember選項不重視全局變量和環(huán)境變量的值 (除了在 evalf 中對 Digits 特別重視外 ),從而可能導(dǎo)致錯誤。還有一點, remember 選項與表、陣列、向量不能混用,因為 remember無法注意到表中元素的變化。 (2) 在記憶表中加入項 通常調(diào)用具 有記憶表的子程序并且得到計算結(jié)果 , Maple 會自動地把結(jié)果加到記憶表中去 , 但也可以手動在記憶表中添加內(nèi)容 . 試看下面的程序: F:=proc(n::nonnegint) 162 option remember。 F(n1)+F(n2)。 end: 現(xiàn)在對記憶表賦值 , 注意這樣賦值不會使程序被調(diào)用: F(0):=0。F(1):=1。 := ( )F 0 0 := ( )F 1 1 試調(diào)用程序得到想要的結(jié)果: F(100)。 3 5 4 2 2 4 8 4 8 1 7 9 2 6 1 9 1 5 0 7 5 由于程序 F的代碼很短,很容易忘記對初始條件賦初值,這樣會導(dǎo)致永不終止的遞歸,從而產(chǎn)生死 循環(huán) . 因此,程序 Fibonacci較 F要好一些 . (3) 在記憶表中刪除項 記憶表是映射表的一種 , 可以方便地在其中添加或者刪除特定的項 , 和一般變量一樣 , 刪除一個表項只需要將其名稱用 evaln 賦給它本身就行了 . 假設(shè) , 因為輸入錯誤 , 我們在前面一個程序中加入了一個錯誤的項: Fibonacci
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1