本文最初寫于 2011-07-14于 sohu 博客,這次博客搬家一起搬到這里來。
版權所有,轉載請注明出處。
?1.1 矩陣和矢量的建立
Maxima 中有許多方法可以生成矩陣和矢量。下面分別來介紹。最直接的方式是直接給出矩陣的每個元素的值。
| (%i1) | A:matrix([1,2,3],[-2,8,3],[1,4,9]); |
|-----|-----|
?
也可以交互式的輸入矩陣的每個元素。
使用entermatrix (m, n)函數可以進行交互式的矩陣輸入,Maxima將每個元素一一讀入。
如果行列維數相同,Maxima會主動詢問矩陣是否為對角、對稱、反對稱或者一般矩陣,這樣可以有效減少輸入次數。
| (%i2) | m:entermatrix(3,3); |
|-----|-----|

Maxima 是一個 CAS 系統,所以我們可以完全用符號去定義一個矩陣,比方說:
| (%i3) | A: matrix([a[1,1],a[1,2]],[a[2,1],a[2,2]]); |
|-----|-----|

甚至于可以提供元素值的計算公式,生成矩陣:
<table><tbody><tr><td><span>(%i4) </span></td><td><span>f[i,j]:=1/(i+j);<br/>genmatrix(f,3,3); </span></td></tr></tbody></table>

上面的例子中首先定義了一個二元 List 的生成方式。
然后根據這個二元 List 自動的生成了矩陣。這種方式也可以直接生成符號矩陣:
| (%i6) | genmatrix(a,3,3); |
|-----|-----|

?
矢量的輸入要簡單的多:
| (%i7) | v: [2,3,5]; |
|-----|-----|

定義一個矢量,其實和我們用手寫矢量出來也差不多。
不過,問題是我們在線性代數常常要把矢量寫成「列矢量」,而非如上的「行矢量」表示方式。
我們可以用下面兩種不同的方式達成:
| (%i8) | v: transpose([2,3,5]); |
|-----|-----|

| (%i9) | v: matrix([2],[3],[5]); |
|-----|-----|

在 eigen 程序包中還提供了一個 columnvector 函數實現同樣的功能。
<table><tbody><tr><td><span>(%i10) </span></td><td><span>load ("eigen");<br/>v:columnvector ([2,3,5]); </span></td></tr></tbody></table>

其實矢量應該是一個一列或一行的矩陣, 但是 Maxima 提供了簡單定義行矢量的方法。
這里要強調一點, 一般來說因為矩陣乘法的關系, 我們寫成列矢量和行矢量差別很大。
不過 Maxima 其實不太在意這點: 它可以聰明地發現你要做的事, 并且正確得計算出來!
簡單的說, 一般而言, 我們不需要麻煩得定義列矢量, 用行矢量即可。
- 前言
- gnuplot 中的數據平滑
- 利用 Maxima 求解常微分方程
- Maxima 的繪圖功能 1
- Maxima 的繪圖功能 2
- Maxima 的繪圖功能 3
- Maxima 矩陣及矢量運算 1
- Maxima 矩陣及矢量運算 3
- Maxima 矩陣及矢量運算 4
- maxima 學習筆記(coeff 函數的應用)
- maxima 代數表達式變換
- maxima 學習筆記(基本微積分)
- maxima 代數方程求解
- Maxima 中的復數運算
- Maxima 的三角函數化簡功能
- Maxima 的基本微積分操作
- 利用 gnuplot 繪制時間序列圖
- gnuplot 入門教程 1
- gnuplot 入門教程 2
- gnuplot 入門教程 3
- gnuplot 入門教程 4
- gnuplot 讀取逗號分隔的數據文件
- scilab 讀取處理 wav 文件
- scilab 讀取處理 wav 文件 (2)
- Scilab 處理聲音數據(補充)
- 利用 SCILAB 設計 FIR 濾波器(窗函數法)
- 利用 SCILAB 設計 FIR 濾波器(Minimax法)
- 利用 SCILAB 設計 iir 濾波器設計(模擬濾波器雙線性變換法)
- Scilab 的繪圖函數(1)
- Scilab 的繪圖函數(2)
- Scilab 的繪圖函數(3)
- Scilab 的繪圖函數(4)