標籤:

Matlab編程實踐(二)

忙完大學本科階段最後一門專業課後,終於可以專心的看書了。不經意間,已經到了2016年的末尾。這幾天一方面看Moler的書,另外也在做著今年的總結,翻開Kindle統計了一下,今年在Kindle上讀的書有40來本,完整讀完的12本,其餘的大多隻看了部分,果真跟大佬們還有很大的差距呀。閑話不多談,下面開始matlab之旅吧。

這周讀了編程實踐的6-8章,本文第一部分介紹下矩陣(matrices)知識,第二部分詳細介紹下仿射矩陣在圖形變換中的應用--蕨形葉子的生成,主要涉及有matlab中顏色RGB代碼,GUI按鈕(toggle)創建命令,偽隨機數生成以及其他GUI命令。

一、矩陣

這部分內容相對簡單,有線性代數基礎的同學都能夠看懂,下面是用matlab這一工具來闡述。

1.如何生成一個nxn的單位矩陣?單位矩陣定義是對角線元素為1,其餘元素為0,嚴格意義上講,單位矩陣都是方陣。matlab中eye(n)可以生成nxn的單位矩陣,除此之外,eye(m,n)可以生成mxn的「單位矩陣」如

2.取整函數,matlab中有四種取整函數。Round,fix,floor,ceil。區別如下:

Fix:朝0方向取整

Floor:朝負方向取整(floor地板意,向下看)

Ceil:朝正方向取整(ceil天花板意,向上看,就是向正方向取整)

上面三個函數非常容易理解和記憶,round:取離x

最近的整數。用法稍微多變些。

round(x,N),若N>0,取到x小數點後N位

eg:

round(x,N),若N<0,小數點N位以後抹0

eg:

3.魔方矩陣。magic(N),產生1~間的整數,且各行之和等於各列之和。

eg:

二、蕨形樹葉

蕨形樹葉是由平面上一點不斷經過仿射變換得到的,關於仿射變換,更多:,其通式為:"chi 
ightarrow Achi +b",

蕨形樹葉函數程序:

function fernshgclf resetset(gcf,color,white,menubar,none, ... numbertitle,off,name,Fractal Fern)x = [.5; .5];h = plot(x(1),x(2),.);darkgreen = [0 2/3 0];plot(x(1),x(2),.,markersize,4,color,darkgreen)axis([-3 3 0 10])axis offstop = uicontrol(style,toggle,string,stop, ... background,white);drawnowhold on p = [ .85 .92 .99 1.00];A1 = [ .85 .04; -.04 .85]; b1 = [0; 1.6];A2 = [ .20 -.26; .23 .22]; b2 = [0; 1.6];A3 = [-.15 .28; .26 .24]; b3 = [0; .44];A4 = [ 0 0 ; 0 0.16]; cnt = 1;ticwhile ~get(stop,value) r = rand; if r < p(1) x = A1*x + b1; elseif r < p(2) x = A2*x + b2; elseif r < p(3) x = A3*x + b3; else x = A4*x; end plot(x(1),x(2),.,markersize,4,color,darkgreen) drawnow cnt = cnt + 1;endt = toc;s = sprintf(%8.0f points in %6.3f seconds,cnt,t);text(-1.5,-0.5,s,fontweight,bold);set(stop,style,pushbutton,string,close,callback,close(gcf))hold off

shg意為show graph window,將現有的窗口提到前台,如果不存在自動創建一個新窗口。Clc reset 將圖形窗口屬性複位成默認值。下方的set(gcf……)語句含義為,設置背景顏色為白色,取消默認菜單,設置標題名字位"Fractal Fern",初始點(0.5,0.5),並在窗口上以「.」形式繪製出來,該函數返回一個句柄h,方便後續修改繪圖屬性。Darkgreen=(0,2/3,0)設置深藍色顏色變數,在matlab中顏色以RGB代碼形式表示,RGB分別道邊red,green,blue紅綠藍三原色,任意的色彩都可由 這三種元色按比例混合而成。對於RGB代碼表示多以256位製表示,而matlab中以0~1的數字表示而成,如果想自定義顏色,可以先查找該顏色256位製表示形式,再作歸一化處理,即同除256(註:0~255有256種顏色方案,故除以256而不是255)。下圖是(0,2/3,0)表示的深藍色蕨形樹葉,可以更改為粉紅色,紫羅蘭色,如下圖展示。常用顏色的RGB值可參考:Matlab中常用顏色的RGB值表 - 下載頻道 - CSDN.NET 坐標範圍為"?3≤x(1)≤3,0≤x(2) ≤10" axis off 隱藏坐標軸。

stop = uicontrol(style,toggle,string,stop, ... background,white);

上面這條語句繪製一個stop按鈕,uicontrol:用戶界面控制,執行一個對用戶交互作用的函數,定義類型為「toggle」按鈕型,顯示字元為stop,背景顏色為白色。drawnow開始繪製,下面為P,A,b1矩陣,tic,toc是秒錶工具,記錄tic-toc程序段執行的時間。cnt為count表示計數器。

while ~get(stop,value)

這是一條while循環結構,只要stop按鈕上的『value』屬性為0,就會一直循環下去,單機stop按鈕,其值從0變到1,終止循環。語句r=rand產生一個[0,1]區間隨機分布的偽隨機數(pseudorandom value),if語句用來選擇執行4中仿射變換中的哪種變換,容易理解,大約有85%的概覽執行第一種仿射變換,7%的概率執行第二種變換,7%的概率執行第三中變換,1%的概率執行第四種變換。第二個drawnow命令通知matlab再次繪製圖形,將新點和以前的點都畫出來,以前的點仍然保持在屏幕上。

s = sprintf(%8.0f points in %6.3f seconds,cnt,t);text(-1.5,-0.5,s,fontweight,bold);

將計數器,秒錶的數據列印在屏幕三。text語句的意思是在(-0.5,-0.5)處顯示字元串s,粗體上面的語句將stop按鈕變成close按鈕,並修改回調函數,關閉圖形窗口,結束運行。

set(stop,style,pushbutton,string,close,callback,close(gcf))

推薦閱讀:

大家用matlab有遇到過哪些槽點?
【IoT:從零開始的MATLAB學習】 2 偏好設置&amp;幫助文檔
怎麼用matlab 2017b的APP Designer?
Matlab|Matlab二維繪圖
matlab如何讀入混合變數格式的dat文件?

TAG:MATLAB |