1. 程式人生 > 其它 >Wolfram學習第一天筆記

Wolfram學習第一天筆記

說明:本篇入門筆記以官網文件為主,只是起到輔助作用,需要入門的dalao可以自行學習。

1. 進入官網文件

方法一:

方法二:

最終學習介面:

接下來就可以開始學習啦!!

因為網站在國外,可能會有點慢,等待的時候可以回顧學過的內容,不要浪費時間。

2. 快速程式設計入門

2.1 互動式用法

在桌面或網頁上的一個 Wolfram 筆記本,只需敲入輸入,然後按 SHIFT+ENTER 來進行計算

In[n] 和 Out[n] 標籤會連續標記輸入和輸出. 您可以使用 % 指定最近的輸出,但是最好是定義一個變數.

2.2 筆記本文件

  1. Wolfram 筆記本在電腦桌面或網頁上均可使用, 它能將程式碼與文字、圖形和介面等一起混合使用

  2. 筆記本是按單元組織的,並由右邊的方括號指定

  3. 雙擊單元方括號開啟或關閉單元組

  4. 在單元間點選可以獲取水平插入條,以便建立一個新的單元

  5. 拷貝、貼上、刪除任何單元集合等.選中任何單元集合並按住 SHIFT + ENTER 對輸入進行計算.

2.3 內建函式

PYTHON 程式設計師備註:
Wolfram 語言延續了一致統一設計且附帶了完整整合的內建函式,而無需從不同設計和約定的不同模組和程式 庫載入功能.

  • 函式引數始終用逗號分隔.

    PYTHON 程式設計師備註:
    在 Wolfram 語言中,函式引數使用方括號 [...] 而不是括號 (...)

    括號用於分組.

  • 將滑鼠懸停在任何內建函式名下,可以顯示 簡介或 文件和範例

PYTHON 程式設計師備註:
Wolfram 語言比 Python 擁有更多且範圍廣的內建功能,可更簡單和快速書寫程式碼,並且 ExternalEvaluate 還可用於整合 Python 程式碼. 你可以通過 Python 用 Wolfram 客戶端庫中的 language.wl 在 Python 中直接訪問內建 Wolfram 語言函式和符號.

2.4 符號表達式

Wolfram 語言中的一切都是符號表達式.

所有符號表達式都具有相同的基本結構:head[arguments]

函式的引數可以是任何符號表達式:


Wolfram 語言是完全符號式,因此 “未定義變數” 總保持原樣:

PYTHON 程式設計師備註:
Wolfram 語言的符號表達式讓程式設計師可以在其計算中不間斷地將未定義變數作為符號使用. 未賦值的變數在 Python 中被認為是 “undefined”,且試圖使用未定義變數會造成產生 NameError.


FullForm 總是顯示底層結構.
Head 總是給出一個表示式Length 則給出引數數目.

2.5 列表

列表 在 Wolfram 語言中用 {...} 來表示,它們可以是任何型別的表示式

PYTHON 程式設計師備註:
當通過 Python 用 Wolfram 客戶端庫 編寫 Python 時,例如 listsetfrozenset,以及生成器函式等分類被序列化為 List.

其中可以包含各種型別的表示式:

In[1]:=

列表部分索引從 1 開始,可以使用 [[ ... ]] 進行提取:

In[2]:=

Out[2]=


負索引從列表的結尾向前開始計數:

In[3]:=

Out[3]=

PYTHON 程式設計師備註:
Wolfram 語言列表用大括號 {...} 表示,然而 Python 列表使用相同方括號 [...] 語法同時表示列表和索引. The Wolfram 語言通過用 [[...]] 表示索引來避免混淆,並運用了從 1 而不是從 0 開始的直觀的索引系統.


許多操作直接 “線性” 作用於列表:

In[1]:=

Out[1]=

In[2]:=

Out[2]=

PYTHON 程式設計師備註:
在 Wolfram 語言中,+ 僅僅用於算數加法. 對於字串串聯等使用 <>.


列表中的 “跨度” 使用 ;;

In[1]:=

Out[1]=

PYTHON 程式設計師備註:
;; 跨度在 Wolfram 語言中與 Python 的 : 切片類似,但概化為多維陣列.

2.6 迭代器

建立一個前 10 個平方數的表格:

In[1]:=

Out[1]=

Wolfram 語言中的許多函式使用標準的 “迭代器規範”:minmaxstep

In[2]:=

Out[2]=

另一種迭代器規範只給出一個顯式值列表:

In[3]:=

Out[3]=

PYTHON 程式設計師備註:
這樣使用 Table 與在 Python 中使用 [... for ... in ...] 列表推導式結構型別,但有更豐富的語義.


製作一個巢狀表格:

In[1]:=

Out[1]=

2.7 賦值

可以使用 = 進行賦值

In[1]:=

Out[1]=

此時為 “立即” 賦值.

也可以使用延遲賦值,當被呼叫時,值會被重新計算

In[2]:=

In[3]:=

Out[3]=

In[4]:=

Out[4]=

PYTHON 程式設計師備註:
Wolfram 語言中,延遲賦值生成的變數在你每次使用的時候將動態重新計算其值. 為實現相同功能 Python 則需要使用更復雜的 promise 物件.


清除賦值:

In[1]:=

In[1]:=

PYTHON 程式設計師備註:
在 Wolfram 語言中的 =. 與 Python 的 del 操作符有相同作用.


Module 區域性化變數:

In[2]:=

Out[2]=

PYTHON 程式設計師備註:
Python 函式建立本地範圍變數與 Wolfram 語言中的 Module 類似。


變數名通常以小寫字母為首字母,大寫開頭的變數一般是特別為內建物件所保留.

PYTHON 程式設計師備註:
在 Python 的命名習慣中,大寫名稱特指class;在 Wolfram 語言中,大寫名稱可表示任意型別的內建結構.

2.8 模式

PYTHON 程式設計師備註:
Wolfram 語言的模式語言允許你對任意符號結構的模式進行描述,能夠將強大的 regex-like 操作泛用與任意表達式和任意格式的資料.

模式代表表示式的型別. 基本的模式結構 _(讀作 “blank”)代表任意表達式.

查詢列表中匹配模式 f[_] 的表示式:

In[1]:=

Out[1]=


x_x:_ 的縮寫)代表一個模式,其值將被命名為 x

In[2]:=

Out[2]=


/. 表示 “全部替代”:

In[3]:=

Out[3]=

PYTHON 程式設計師備註:
在此顯示的該類結構的元程式,將程式碼和資料等同對待,是 Wolfram 語言符號結構的獨有特點.


__ (“兩個 blank”) 代表任意表達式序列:

In[1]:=

Out[1]=


a | b | c 代表 abc

In[1]:=

Out[1]=

PYTHON 程式設計師備註:
| 在 Wolfram 語言模式中的使用與其在 Python 常用表示式中的用法相近. 但是,Wolfram 語言中,| 不僅用於字串,還可用於任意型別的符號模式匹配.

它也適用於標頭:

In[2]:=

Out[2]=


_h 代表任何有標頭 h 的表示式:

In[1]:=

Out[1]=


:> 是一個延遲規則;類似於規則中的 :=

2.9 函式定義

在 Wolfram 語言中,函式定義只是給出模式變換規則的賦值.

定義一個帶有命名為 xy 的兩個引數的函式:

In[1]:=

PYTHON 程式設計師備註:
在 Wolfram 語言的基本函式定義中,引數名稱後跟隨 _ (“blank”)允許引數與任意符號式模式一致. 實現了強大且靈活的函式定義,這對於預設的 Python 是不可能的. 你可以通過 Python 用 Wolfram 客戶端庫中的 session.function 指定 Wolfram 語言–函式從而在 Python 中使用。

使用定義:

In[2]:=

Out[2]=

清除定義:

In[3]:=


函式定義可以按序指定其值:

In[1]:=

Out[1]=

In[2]:=

Out[2]=

任何未定義的,還保留原樣:

In[3]:=

Out[3]=

您可以使用 /; 限制定義,使其只適用於某種條件:

In[4]:=

PYTHON 程式設計師備註:
在 Wolfram 語言中可使用與 if 語句相同的 /; 應用於函式,允許函式自由根據條件自動選擇定義.


您可以定義任何左手邊的變換“解構”引數的便捷方式:.

In[1]:=

In[2]:=

Out[2]=


Wolfram 語言沒有所謂的型別;一切都是符號表達式. 表示式的“標頭”可被作為普遍意義上的型別標誌符使用.

使用一個“u 物件”或“v 物件”,給出 f 的不同定義:

In[1]:=

In[2]:=

PYTHON 程式設計師備註:
Wolfram 語言函式可使用內建的模式匹配來根據其任意引數的符號結構來更改行為. 在 Python 中則需要相對複雜的自定義程式碼或第三方程式庫.