matlab幻方變換 Matlab入門1 幻方矩陣

2021-10-13 06:52:07 字數 2877 閱讀 7090

個人理解matlab是以工具為主,為了解決數學問題/作圖而存在的輔助工具,我們只需要針對一系列問題思考需要呼叫的知識然後doc/help呼叫文件學習,通過逐步積累最後通透相關數學問題、學會對各種常見圖形進行繪製即可。

於是關於matlab的知識我的想法就是把每一道題需要用到的知識挖深掌握,然後其他基礎普及就由認真負責的yym老師教啦。

今日簡單題:1.建立乙個五階幻方矩陣a

(1)驗證a的各列元素之和、各行元素之和、主對角元素之和以及副對角元素之和。

a.如何建立乙個矩陣。b.如何建立乙個幻方矩陣。c.如何把幻方矩陣賦值給a。d.如何對a的各列、各行、對角線元素、副對角線元素進行引用以及求和。e.如何對矩陣特定的行、列進行引用。事先需要了解和準備的:matlab2016b(各個版本針對初學階段其實都差不多)、工作區、編輯器、線性代數基礎-矩陣、向量、幻方矩陣的定義、matlab中%符號代表注釋。

(1)建立幻方矩陣的方式:magic函式基本語法:magic(n)%n是乙個被定義的變數,需要有乙個值,我們需要知道在指令碼檔案和編輯器中是不可以輸入和輸出變數的,需要在函式檔案中才可以輸入和輸出變數。並且在指令碼區建立的變數都是全域性變數,而函式檔案中的變數是區域性變數。

於是我們建立乙個五階幻方矩陣並把它賦值給a:

>> a=magic(5)

a =17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

可以得到這個六階幻方矩陣(值得吐槽的是它生成的幻方矩陣是固定的2333但是我們知道幻方矩陣的生成方式其實蠻好玩的,也有很多花樣。比如:我們先給定乙個n階幻方,由任意乙個位置填入1,然後往它的右上方填入2,再往右上方填3,假如右上方遇到了邊界,那麼就突破邊界在最後一行相對上一次填入的數字的右一格中填入相應遞增數字,如果右上方已經填有數字的話,那麼改為填入上一次填入的數字的下方一格中,突破邊界則同理填到最上一行相同列中,最終數字一定會填滿整個n階矩陣。我們看到matlab生成幻方的方式也是這種最常見的方式。跑題了跑題了)

2.計算矩陣中行和列和的方式:sum函式基本語法:sum(a)、sum(a,dim)%如果a是乙個行向量,那麼sum(a)返回乙個數值:a的所有元素的和;如果a是乙個矩陣,那麼sum(a)返回乙個行向量:這個行向量的各元素是a的列和。而sum(a,dim),dim代表維度,通常為1或2,(為3及以上就是更多維度的陣列的某一維度求和了,我們暫時用不到故不做記錄),如果dim=1,且a為乙個矩陣,那麼sum(a,1)和sum(a)是等價的;如果dim=2,且a為乙個矩陣,那麼sum(a,2)的返回值是乙個列向量:這個列向量的各元素是a的行和。

於是我們對幻方矩陣求和:

>> sum(a)%生成列和租組成的行向量

ans =%在我們不指定賦值直接計算時,預設賦給ans

65 65 65 65 65

>> sum(a,2)%生成行和組成的列向量

ans =

diag函式%基本語法:diag(a),diag(a,k)diag(a)%其中若a為一向量,那麼diag(a)會返回以a中個元素為對角元的方陣;若a為一矩陣,那麼diag(a)會提取a的對角元按先後順序返回乙個列向量,diag(diag(a))就可以得到對角矩陣。

diag(a,k)%若a為一向量,那麼diag(a,k)會返回乙個以a為第k條超對角線(superdiagonal)/次對角線(subdiagonal)的方陣;若a為一矩陣,那麼diag(a,k)會返回乙個以a的第k條超對角線/次對角線

fliplr(a)%若a為一向量,那麼返回a的元素倒置輸出的向量(例如a=[1 2 3],那麼fliplr(a)=[3 2 1])。若a為一矩陣,那麼返回a的翻轉(例如a=[1 2 3;3 4 5],那麼fliplr(a)=[3 2 1;5 4 3])

於是我們計算主、反對角線元素和:

>> sum(diag(a))

ans =

>> sum(diag(fliplr(a)))

ans =

(1)的驗證就完成了,讓我們來複習我們現在學習了什麼呢?我們學會了生成幻方矩陣,對乙個矩陣求行和、列和,學會了求矩陣的對角線元素組成的列向量,學會了翻轉矩陣,接著我們簡單地介紹如何訪問矩陣中的列、行、元素。

(2)注:a為上述幻方矩陣a(m,n)%表示訪問a的第m行n列元素,假如訪問a中元素時m或n超出了邊界會報錯,但假如對a超出邊界的地方賦值則會新增行/列,除了被賦值的地方,其餘新增元素均為0,例如

>> a(6,7)=1

a =17 24 1 8 15 0 0

23 5 7 14 16 0 0

4 6 13 20 22 0 0

10 12 19 21 3 0 0

11 18 25 2 9 0 0

0 0 0 0 0 0 1a(i)%假如把每一列都接在前一列的尾巴上的話,將會形成乙個很長的列向量,那麼a(i)就是在訪問這個列向量的第i個元素,等價於訪問a(m,n)其中i≡m(mod 6)(m=0時,m取6),n=[i/6]

a(m,q:p)、a(q:p,n)%前者表示a的第m行第q到p列,後者表示第n列第q到p行,其實在這裡是省略了步長(step),我們用q:step:p來訪問從q開始每次經過q+=step直到它超出p邊界為止(根據step取正負來判斷是小與p還是大於p),假如省略步長,那麼預設它為1。我們也可以省略q、p只留乙個冒號,就表示全行/列。例如a(m,:)表示第m行。

a(m:j:n)%,上面提到了步長的概念,那麼這裡就是針對a(i)的擴充套件就很好理解了。

於是我們需要訪問a的第

二、三列怎麼做到呢?

>> a(:,2:3)

ans =

24 1

5 76 13

12 19

18 25

0 0今天的matlab內容就是這樣啦,可能今天還會複習一篇關於作圖的基礎題娛樂一下。

一想到晚上又要上盧老爺的課我的內心就一頓哀嚎啊,還是划水做letuce好了。

幻方變換 puzzle

如果乙個 3 3 的矩陣中,整數 1 9 中的每個都恰好出現一次,我們稱這個矩陣為乙個幻 方。我們可以對乙個幻方進行一些操作。具體來說,我們可以 選擇幻方的一行,整體向右移動一格,並將最右側的數字移到最左邊 或者 選擇幻方的一列,整體向下移動一格,並將最下側的數字移到最上面。例如,下面兩個操作分別是...

MATLAB 矩陣與幻方矩陣

關於矩陣 在 matlab 環境中,矩陣是由數字組成的矩形陣列。有時,1 1 矩陣 即標量 和只包含一行或一列的矩陣 即向量 會附加特殊含義。matlab 採用其他方法來儲存數值資料和非數值資料,但剛開始時,通常最好將一切內容都視為矩陣。matlab 旨在盡可能簡化運算。其他程式語言一次只能處理乙個...

奇數幻方 輸入N得到NXN幻方

include intmain for int j 0 j1 j h j sum1 for int j 0 j1 j l j sum2 for int i 0 i 判斷每行 列相等個數 for int j 0 j1 j 計算對角線數字和 e n 1 for int i 0 i1 i 計算反對角線數字...