跳轉到內容

程式設計的科學/一點點這樣,一點點那樣

來自Wikibooks,開放世界中的開放書籍

在上一章中,您被介紹了變數的概念。變數是計算機記憶體中一個可以儲存值的位置

   sway> var x = 1000000;
   INTEGER: 1000000
   sway> x;
   INTEGER: 1000000

這裡,我將該位置命名為x,並在該位置儲存了數字1000000。一旦我預留了該位置,我就可以透過為變數賦值新值來更改那裡的值。這是一個例子

   sway> x = 42;
   INTEGER: 42
   sway> x;
   INTEGER: 42

請注意,我這次沒有使用單詞var這次。當我使用var時,表示為我預留一個新的位置。當我未使用var時,表示更新之前預留的位置。


要了解有關賦值的更多資訊,請參閱Sway 賦值


如果我們嘗試在不首先預留位置的情況下更新位置會發生什麼?

   sway> y = 3;
   EVALUATION ERROR: :assignError
   stdin,line 3: assignment: variable y is undefined

我們收到一條訊息,指出y未定義。這是直譯器告訴我們忘記使用vary預留位置的方式。Sway 知道我們沒有定義變數,因為它在當前環境中查詢它,如果失敗,則在上下文環境中查詢,如果失敗,則在上下文的上下文中查詢,依此類推,直到它用完要查詢的位置。

變數一詞暗示值可以變化,這正是我們對x所做的;我們改變了它的值。在某些程式語言中,存在名為常量的類似的野獸,一旦建立,您就無法更改它們。在 Sway 中,本身沒有常量。如果我們需要常量,我們將使用變數代替,但我們將承諾不更改變數的值。為了提醒我們不應更改其值,我們將在命名變數時使用大寫字母(主要是)

   sway> var PI = 3.14159;
   REAL_NUMBER: 3.1415900000

做出此承諾被稱為遵循約定。請注意,變數名稱可以(並且通常應該)超過單個字母。另請注意,CME 第 3 章中的 SPT 使用字母表開頭的字母表示常量,使用字母表結尾的字母表示變數。這是一個不同的約定。

新增一點點

[編輯 | 編輯原始碼]

這是一個比 CME[1]中的問題稍微簡單一點的問題


   + + + + + + + + + + + + + + + +
   +                             +
   +                             +
   +                             + h = w/2
   +                             +
   +                             +
   + + + + + + + + + + + + + + + +
                  w

考慮一個寬高相關的矩形。假設我們稍微增加寬度。假設新高度仍然是新寬度的一半,高度會發生什麼變化?由於高度是根據寬度計算的,因此我們說寬度是自變數,高度是因變數。首先,讓我們定義一個函式,該函式根據寬度w給出高度h

   function h(w)
       {
       w / 2.0;
       }

請注意,當我們編寫這樣的函式時,因變數幾乎總是函式的名稱,自變數是形式引數的名稱。使用此規則來幫助您定義所需的函式。

我們可以測試一下我們的新函式

   sway> h(100);
   REAL_NUMBER: 50.0000000

這證實了我們的猜想,如果寬度為 100 個單位,則高度必須為 50 個單位。

微積分通常關注的是給定自變數變化時因變數的變化,特別是這兩個變化的比率

現在,讓我們使用寬度的小變化來計算上述矩形的比率

   sway> var w = 100;                //width
   sway> var dw = 0.01;              //change in width
   sway> var dh = h(w + dw) - h(w);  //change in height

高度的變化只是新高度減去舊高度。現在我們可以計算比率了

   sway> dh / dw;
   REAL_NUMBER: 0.5000000000

微積分還關注的是,這個比率是否會隨著不同數量的變化或自變數的不同值而變化?回答這些問題的懶人方法是,您猜對了,編寫一個函式來完成這項工作。

   function ratio(w,dw)
       {
       var dh = h(w + dw) - h(w);
       dh / dw;
       }

請注意,我們傳入wdw的值,然後計算比率。這使我們能夠非常輕鬆地嘗試各種各樣的值

   sway> ratio(40,0.01);
   REAL_NUMBER: 0.5000000000
   
   sway> ratio(40,0.0001);
   REAL_NUMBER: 0.5000000000
   
   sway> ratio(20,0.0001);
   REAL_NUMBER: 0.5000000000

此比率函式非常有用!我們看到的比率似乎從未改變。但是,假設我們現在開始檢視寬高之間關係不同的矩形。突然之間,我們的比率函式看起來沒那麼有用了。這是因為我們硬編碼了高度函式。[2] 我們可以透過將高度函式作為第三個引數傳入來解決此問題。現在我們可以輕鬆地嘗試新的高度函式。透過這樣做,我們使比率計算函式更通用。

   function ratio(w,dw,h)
       {
       var dh = h(w + dw) - h(w);
       dh / dw;
       }

它應該以同樣的方式工作

   sway> ratio(40,0.01,h);
   REAL_NUMBER: 0.5000000000
   
   sway> ratio(40,0.0001,h);
   REAL_NUMBER: 0.5000000000
   
   sway> ratio(20,0.0001,h);
   REAL_NUMBER: 0.5000000000

讓我們嘗試一個不同的高度函式

   function g(w)
       {
       w * w;
       }

使用此高度函式,高度g隨著寬度的平方而增長。比率現在會產生什麼?讓我們嘗試一個寬度和越來越小的變化

   sway> ratio(100,1,g);
   INTEGER: 201
   sway> ratio(100,0.1,g);
   REAL_NUMBER: 200.10000000
   sway> ratio(100,0.01,g);
   REAL_NUMBER: 200.01000000
   sway> ratio(100,0.001,g);
   REAL_NUMBER: 200.00100000

很明顯,如果寬度的變化變得無限小,則寬度為 100 時的比率將為 200。

現在讓我們嘗試不同的寬度和越來越小的變化

   sway> ratio(200,1,g);
   INTEGER: 401
   sway> ratio(200,0.1,g);
   REAL_NUMBER: 400.10000000
   sway> ratio(200,0.01,g);
   REAL_NUMBER: 400.01000000
   sway> ratio(200,0.001,g);
   REAL_NUMBER: 400.00100000
   sway> ratio(200,0.0001,g);
   REAL_NUMBER: 400.00009998

對於這個新的寬度 200,比率似乎收斂於 400。此外,對於最後的測試,我們得到的值有點出乎意料。在處理實數時,這應該對您是一個警告。[3]

對於高度函式g,我們看到不同的起始寬度會產生不同的比率。大量的微積分是為了解釋為什麼這些比率會發生變化。此外,這個計算比率的過程被稱為求導數

所有公式均使用小學算術優先順序編寫。

1. 在定義函式時,我們使用什麼變數名作為形式引數有關係嗎?

2. 繪製一個帶標籤的矩形的圖片,使高度為自變數,保持高度是寬度的一半的關係。

3. 在函式比率中,dh計算。如果我們假設) 等於),則dh或簡化為。定義一個名為ratio2的新函式來測試此假設是否有效。

4. 對於非常小的變化,哪個函式更好?為什麼?

5. 考慮一個面積永不改變的矩形。也就是說,如果寬度增加,高度會減小以進行補償,以便矩形的面積保持不變。定義一個函式,該函式根據寬度和麵積計算此矩形的高度。

6. 我們是否觀察到與函式g相同的比率行為?

7. “變化是永恆的”,但這並不意味著變化必須是恆定的。我們大多數人都習慣了恆定變化率的概念。例如,直線描述的高度與距離的變化,例如。使用比率函式來探索當x變化時y如何變化。製作一個包含yxdy/dx的表格。

8. 上一個問題有一個恆定的變化率。然而,因變數的變化率通常會隨著自變數的變化而變化。讓我們以正方形面積的函式為例,。首先,當x從2變到4時,面積的變化是多少?繪製此情況的草圖,標記dydx。當x從2變到3、2變到2.5、2變到2.1和2變到2.01時,執行相同的操作。你觀察到了什麼?嘗試相同的事情,但現在從x = 4開始。關鍵在於,面積的變化率本身取決於長度。表達yx變化之間關係的x函式稱為導數dy/dx。根據你的實驗,的導數是什麼?

9. 護甲的減傷率為,其中。減傷率相對於護甲和敵方等級的增長情況如何?

  1. 此圖使用 Cheesy ASCII (tm) Graphics(快速載入)繪製。
  2. 當我們將某些東西視為常數、不變的東西時,我們硬編碼它。
  3. 你可以相信整數,因為它們是精確的。但你永遠不應該完全相信實數,因為它們是近似值。搖擺實數的精度只有15位有效數字。


你能低到什麼程度? · 最簡單的事情

華夏公益教科書