第一篇:matlab程序設計及心得體會
1.編寫程序,建立向量n=〔1,2,3,4,5〕,并利用n產生下列向量:(1)2 , 4 , 6 , 8 , 10
(2)1/2 , 1 , 3/2 , 2 , 5/2(3)1, 1/2 , 1/3 , 1/4 , 1/5
(4)1 , 1/4 , 1/9, 1/16, 1/25。
注意:向量n=1:5,/是傳統意義上的矩陣的除法,而./是兩個矩陣的對應元素相除,同理相乘。此處是對應元素相除,所以一定要記住應該用點除,而非除法。2.從鍵盤輸入一個三位數,將它反向輸出。例如輸入639,輸出為936。
注意:輸出函數:disp(),取整用fix(),取余函數mod(x,y)與rem(x,y)一樣。3.輸入一個百分制成績,要求輸出成績等級A,B,C,D,E。其中90-100分為A,80-89分為B,70-79分為C,60-69分為D,60分以下為E。
要求:(1)分別用if語句和switch語句實現。
(2)輸入百分制成績后要判斷該成績的合理性,對不合理的成績應輸出出錯信息。注意:switch語句中的case最好用0~9的數字表示而不是表達式!不可用break!后不可用表達式!!為了表示另一種情況,記住用if與其搭配~不要太死板,學會靈活。4.建立5*6的矩陣,要求輸出矩陣第n行元素。當n的值超過矩陣的行數時,自動轉為輸出矩陣最后一行元素,并給出出錯信息。
注意:隨機產生一個0~1矩陣可以用rand函數,整數矩陣便用fix(100*rand(m,n))函數。產生m*n 階[a,b]均勻分布U(a,b)的隨機數矩陣:
unifrnd(a,b,m, n)
5.產生20個兩位隨機整數,輸出其中小于平均值的偶數。
注意:fix(100*rand(m,n))與round(100*rand(m,n))幾乎一樣的,隨機產生m*n階矩陣,學會變通,隨機產生兩位隨機整數。fix是指向0靠攏取整。fix(3.7)=3,fix(-3.7)=-3。floor指向下取整,ceil指向上取整。round指四舍五入取整!round最常用~記住a=o指賦值,而a==0指判斷,與c語言一樣~當矩陣只有一行時,可用a(i)表示每一個數。用k(i)表示來輸出每一個數!表示矩陣中的每一列時用a(:,i),表每一行時用a(i,:)。
6.輸入20個數,求其中的最大數和最小數。要求分別用循環結構和調用MATLAB的max函數、min函數來實現。注意:熟記其中的函數將對編程的速度有很大的提高!孩子,加油!
e0.3a?e?0.3a0.3?asin(a?0.3)?ln7.y?,當a取-30.,-2.9,……,2.9,3.0時,求各點22的函數值。要求分別用順序結構和循環結構實現。
注意:用size返回向量元素的個數,如果是矩陣,size(a,2)指返回矩陣的豎的個數,即多少列。其中一維是指行,二維指列。記住表示一個向量時,步長放中間。!
8.當n分別取100、1000、10000時,求下列各式的值:(要求分別用循環結構和向量運算(使用sum函數)來實現)
1111??????? 2222123n111(2)1?????
3571111(3)?????n??
416644(1)
?2n?2n?2?2??4?4??6?6???(4)?注意:使用while循環時,注意對n初始化,??????????1?3??3?5??5?7???2n?1???2n?1??與c語言較象。普通指數時直接用^,自然指數時,若x已知,用y=exp(x)。
9.若兩個連續自然數的乘積減1是素數,則稱這兩個連續自然數是親密數對,該素數是親密素數。例如:2*3-1=5,由于5是素數,所以2和3是親密數對,5是親密素數。求〔2,50〕區間內,(1)親密數對的對數;
(2)與上述親密數對對應的所有親密素數之和。
注意:x=primes(n)輸出不超過n整數的素數,a=length(x)表示輸出素數的個數。用b=isprime(n)來判斷n是否為素數,若為素數則b=1,反之為0。學會變通,求和用if循環就好。
111110.根據1??????,求:
3572n?1(1)y<3時的最大n值;(2)與(1)的n值對應的y值。
注意:不能被題目嚇跑~~·很簡單的,耶耶!
11.已知y?f(40)
f(30)?f(20)(1)當f(n)=n+10ln(n2+5)時,y的值是多少?
(2)當f(n)=1*2+2*3+3*4+……+n*(n+1)時,y的值是多少?
12.編寫一個函數文件,用于求兩個矩陣的乘積和點乘,然后在命令文件中調用該函數。13.定義一個函數文件,求給定復數的指數、對數、正弦、余弦,并在命令文件中調用該函數文件。
14.先用函數的遞歸調用定義一個函數文件求1005010?i,然后調用該函數文件求
i?1n1zhuyi:yaoxunzaoyigehanshubiannnengjiejue defangfa~~ k?k????kk?1k?1k?1215.寫出下列程序的輸出結果。(1)
s=0;a=[12 13 14;15 16 17;18 19 20;21 22 23];for k=a
for j=1:4
if rem(k(j),2)~=0
s=s+k(j);
end
end end s
(2)命令文件 global x x=1:2:5;y=2:2:6;sub(y);x y 函數文件sub.m function fun=sub(z)global x z=3*x;x=x+z;16已知:?1111n?1????????1?,編程求?的近似值。
43572n?1 注意:在編程過程中,一個小小的乘號將導致很難查出錯誤,很會影響心情,所以不能忽略小問題,必須仔細小心!
?1?517.輸入下面的矩陣,A???9??13?234??678?101112??141516??求該矩陣的對角線元素之和,并找出最大和最小的元素的值以及其所在的行、列號。將最大值替換成inf,最小值替換成-inf。注意:①找出矩陣中具體某個元素的具體位置的方法: ind=find(a==max)siz=[4,4]
[I,J] = ind2sub(siz,ind)便可以找到最大元素的位置![I1,I2,I3,...,In] = ind2sub(siz,ind)②對角線元素用diag函數~~ ③要找出一個很大矩陣的最大最小元素用兩個for循環。!加油~寫出這道題好興奮啊,這種感覺真好!
18.求解猴子吃桃問題。猴子在第一天摘下若干個桃子,當即吃了一半,又感覺不過癮,于是就多吃了一個。以后每天如此,到第10天再想吃時,卻發現就只剩一個桃子。請編程計算第一天猴子摘的桃子個數。
注意:不要被問題嚇到,很簡單的一個問題罷了~當順著不行時,試著倒著來解答編程。19.求n階勒讓德多項式的值,其遞歸公式為:
p(n,x)?((2*n?1)*x*p(n?1,x)?(n?1)*p(n?2,x))/n
p(0,x)?1;p(1,x)?x注意;它要的僅僅只是一個定義函數~并沒有需要一個確切的值。20.利用恒等式?26??k?1?1計算圓周率的近似值。k2注意:sqrtm(a):矩陣a開平方根;sqrt(a):矩陣a對應的元素開平方根。
21.輸入一個正整數,如果它是偶數就除以2,是奇數就乘以3加上1,如此一直變化,直到最后變成1。
注意:判斷一個數是否為整數可以用判斷語句a==round(a)!在matlab中,用~=表示不等于,與c語言不同。22.(1)用遞歸調用求Fibonacci數列定義如下: f1=f2=1 , f(n+1)=f(n)+f(n-1)。
(2)求Fibonacci數列大于4000的最小項。
注意:這道題目很簡單,卻花了很長的時間~·主要是題目意思沒弄清便動筆,要學會分清題意,冷靜分析。另外還要注意while的條件,1便執行,0則跳出~。
23.列出所有的水仙花數。水仙花數是一個三位數,其各位數字的立方和等于該書本身。例如:153=13+53+33 注意:當輸出的不僅僅是一個數時,需要定義一個數組a(i),i=i+1,輸出為a。if語句中,判斷條件中為==,而不是賦值語句=!!別總犯相同的錯誤~~·
24.試編一個m程序,將一維數組x中的N個數按顛倒的次序重新存儲。如N=5,原來x為:而經過顛倒處理后x中數據的次序應該為:x=[ 9 7 5 3 1 ]
25.已知某班的5名學生的三門課成績列表如下:
學生序號1 2 3 4 5 高等數學78 89 64 73 68 外語83 77 80 78 70 MATLAB語言82 91 78 82 68 試寫出有關命令,先分別找出三門課的最高分及其學生序號;然后找出三門課總分的最高分及其學生序號。針對上述的成績表,求出其三門課總分存入數組ZF,再利用SORT命令對之按降序排序,同時把相應的學生序號存入數組XH。
第二篇:MATLAB程序設計教學大綱
《MATLAB程序設計教學大綱》
課程代碼:1010330 實驗教學:24學時+16學時 課程學分:2.5 先修課程:C/C++程序設計語言或VB程序設計語言 ? 課程的性質和教學目標
《MATLAB程序設計》是工科大學非計算機類理、工、管理專業學生的一門計算機必修基礎課。MATLAB 作為一種高級科學計算軟件,是進行算法開發、數據可視化、數據分析以及數值計算的交互式應用開發環境。本課程注重實際能力的培養,使學生能夠運用MATLAB進行一般的工程計算,掌握MATLAB的基本技術。
二、教學要求:
課程的指導思想是“學以致用”,課程知識點系統全面,能鍛煉學生的動手能力。課堂教學講述了MATLAB基本技術,包括基本計算、矩陣處理、符號運算、計算結果可視化等,結合實際問題,探索 “理論結合實踐”的教學模式,注重精講多練,培養學生利用MATLAB解決專業實際工程問題的能力。課堂教學覆蓋不到之處通過實驗課讓學生在實踐中學習,力求實現“教學與自學相結合”的教學原則,重視創新能力和綜合能力的培養。
三、教學內容
第一章 MATLAB課程概述()
1.MATLAB開發環境介紹 2.MATLAB環境設置和路徑設置 3.MATLAB的安裝與激活 第二章 MATLAB程序設計基礎()1.常量與變量的使用方法; 2.數組的創建和使用方法; 3.各種運算符的使用方法;
4.函數文件的創立和使用:m文件的創建和調用方法; 5.三種控制結構(順序結構、分支結構和循環結構)6.調試技巧
第三章 MATLAB數值計算()
1.矩陣運算(矩陣的構造,矩陣的基本運算和高級運算)2.多項式運算(多項式的構造和運算)3.其他數值計算
4.數據處理(數據插值和曲線擬合)第四章 MATLAB符號計算 1.符號定義
2.符號運算(初等代數運算,復合函數,反函數,極限,泰勒展開,級數求和,符號微分,符號積分等)第五章 圖形處理 1.2D圖形處理 2.3D圖形處理 3.聲音與動畫的實現 第六章 圖形用戶界面編程簡介 第七章 工具箱的使用介紹
四、教材與參考書
教材:《MATLAB基礎教程》(2011年第一版)清華大學出版社
叢書名
第三篇:Matlab交互式程序設計教程及舉例
Matlab交互式程序設計教程及舉例
一、創建GUI(Graphics User Interface)新文件和編輯已經存在的GUI文件
1、在matlab命令窗口中鍵入guide,彈出如下的對話框:
這是一個雙頁面對話框,分別用于創建新文件和打開已存在的GUI文件,鼠標點擊相應的標題即可切換。
2、圖中可見“創建新的GUI”有四種模版選項,不管其它幾個,點選第一項,按“OK‘按鈕可打開如圖所示的GUI編輯器
其中左邊是控件工具欄,用戶可根據自己的程序將所需要的控件用鼠標拖至右側的編輯區域進行布局。(用戶可將鼠標懸停在各個控件圖表上查看各個對象的名稱)菜單欄下邊是工具條,其中常用的有“”(保存當前GUI文件和相應的m文件)、“
”(編寫相應協調運行的m文件、“”(編輯當前控件的相應屬性)、“”(創建和修改用戶自己的程序菜單)、“”(保存當前文件并運行改程序)。右下方主要區域是程序的界面布局窗口(灰色網格區域是布局區域,用戶可根據程序需要用鼠標拖動該區域的右下角調整該區域的大小)。
3、此時可以按下“”圖標保存該文件(自然此時程序沒有任何功能,只有一個主框架),彈出文件保存對話框,在文件名處輸入一個文件名(英文字母開頭),如“my1”等,擴展名自動設置為“.fig”。系統除了保存當前的界面文件外,還自動生成一個與該界面一起協調運行的“my1.m”文件,并在m文件編輯窗口中打開它。
4、瀏覽一下該文件,可以看到該文件中目前自動創建了3個函數: function varargout = my1(varargin)function my1_OpeningFcn(hObject, eventdata, handles, varargin)function varargout = my1_OutputFcn(hObject, eventdata, handles)這些函數聲明和參數在后續的程序設計中不要做任何修改,切記!!
對我們目前的應用來說第一個函數和第三個函數的程序體也不要做任何修改。根據自己的程序涉及需要只需修改第二個函數的程序體部分。(具體的修改方式可以通過我的例子程序加以體會。)
注意第二個函數程序體的最后一條語句 guidata(hObject, handles);該語句在后續的程序設計中將會頻繁使用,現在請先記住它。
5、祝賀你!你現在已經有了一個名為“my1.m”和“my1.fig”的可以運行的文件了!
現在可以在matlab命令窗口中鍵入“my1”運行改程序,自然,除了顯示一個標題為“my1”的空白窗口外,你還不能進行任何交互式控制操作(自然除了關閉該窗口外),因為你還沒有寫任何控制程序和添加任何控件。
二、增加控件及編寫相應的執行程序
1、現在可以編輯運行窗口的標題欄——即將“my1”修改為自己希望的標題,本例中我改為“參數a,b,n對r=acos(nt+b)的影響”。在GUI設計窗口中點擊“
”工具條圖標,彈出如下的“屬性編輯框”
該窗口對于后續設計中的每個控件都可以打開(通過點擊“”工具條圖標),它共有2列,左列是當前對象的用戶可以修改的屬性名(按首字母順序排列),右列是每個屬性的可以編輯的屬性值,現在在左列找到“name”一項,將右側的自動生成的“my1”改為“參數a,b,n對r=acos(nt+b)的影響”。關閉此窗口,點擊“”以保存當前修改并運行程序。OK!窗口的標題欄已經變成了“參數a,b,n對r=acos(nt+b)的影響”。
2、現在開始程序的布局及控制設計,先從最簡單的一個控制按鈕開始。
拖動GUI設計窗口左側的“Push Button”控件至右側設計區域中的自己希望的位置,放開鼠標,然后可以點選并拖動該控件的右下角改變該控件的大小,則界面中的第一個控件就緒。目前可以點擊“”以保存當前修改并運行程序。發生了什么事情?運行窗口的響應位置處有了這個交互式控制按鈕!點擊這個按鈕,除了按鈕自動界面上有個形象的動態響應外,不會有任何響應,因為目前我們還沒有編寫任何控制程序。
3、現在我們開始編寫該控制程序。點擊“”工具欄圖標,打開m文件編輯器,瀏覽相應的文件,會發現文件末尾多了一個函數頭:
function pushbutton1_Callback(hObject, eventdata, handles)這是系統自動生成的相應按鈕控件的回調函數,系統自動將其命名為pushbutton1,其中pushbutton代表該控件的類別是“Push Button”,后面的阿拉伯數字代表這是用戶在界面設計中所創建的第幾個(該控件名稱用戶可以進行修改,具體修改方法見下一條說明)。現在用戶可以在該函數頭下邊填寫相應的自己所希望的控制程序。
目前我們只希望用戶點擊按鈕時進行一個簡單的操作:結束當前程序并關閉該窗口。這只需如下的一條語句即可:(將之寫在該函數頭的下面)close;保存修改后的m文件,回到GUI設計窗口,再次點擊“”運行程序,然后在運行后的窗口中點擊該按鈕。哈哈!如我所愿,程序安全退出了!So Easy!!
4、下面我們可以調整該按鈕的界面顯示和將自動生成的“pushbutton1”名稱改為自己容易記住的個性化名字。
在GUI設計窗口中點擊此按鈕,然后點擊工具條上的“”工具條圖標,彈出相應的“屬性編輯框”已調整它的名稱和運行時的界面屬性(任選)。本例中我的調整如下:(1)找到“tag”屬性,將其后的“pushbutton1”改為“jieshu”;(此時如果保存修改,然后進入相應的m文件編輯窗口,可以驚喜地看到其中的最后一個函數也進行了相應的修改:(將函數頭中的“pushbutton1”變成了“jieshu”)function jieshu_Callback(hObject, eventdata, handles)% hObject handle to jieshu(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
% Hints: get(hObject,'Value')returns position of slider % get(hObject,'Min')and get(hObject,'Max')to determine range of slider %---Executes during object creation, after setting all properties.function slider1_CreateFcn(hObject, eventdata, handles)% hObject handle to slider1(see GCBO)% eventdata reservedhandles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background, change % 'usewhitebg' to 0 to use default.See ISPC and COMPUTER.usewhitebg = 1;if usewhitebg set(hObject,'BackgroundColor',[.9.9.9]);else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end
%---Executes on slider movement.function slider2_Callback(hObject, eventdata, handles)% hObject handle to slider2(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles empty-handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background, change % 'usewhitebg' to 0 to use default.See ISPC and COMPUTER.usewhitebg = 1;if usewhitebg set(hObject,'BackgroundColor',[.9.9.9]);else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end 其中的兩個_CreateFcn我們后續不需任何操作,所以也不需要任何修改,現在先記住我們需要對于兩個_Callback函數進行程序的填寫操作,以響應當程序執行時當用戶拖動滾動條時應該引起何種響應,具體的響應程序也在后續填寫,現在先在GUI界面中修改其屬性值。選中“Slider1”,打開相應的屬性編輯器,找到其中的“Max”一欄,將后面的內容改為“8”(本例我的“a”值最大值為8),找到其中的“Min”一欄,將后面的內容改為“1”(本例我的“a”值最小值為1),找到“Value”一欄,點擊后面的圖標,在彈出的對話框中將“0.0”改為“5”,以指定在程序進行運行時將該滾動條的值設置為5。此時可以運行程序,觀察第一個滾動條中的滑塊位置應該在中間偏右的位置,這說明上述設定已經成功。
“Slider2”我在這里先不做調整,系統自動默認最小值為0,最大值為1,當前值為0,邏輯上本例的“b”值應該在0與2π之間,作為示例,我在后續的程序書寫中將獲得的該滾動條上的當前值乘以2π來進行相應的調整。
作為示例,我對于本程序中參數n用一個“Edit Text”進行程序運行中的輸入控制,所以在界面上再產生一個“Edit Text”,系統自動將其“Tag”設置為“edit1”,我對此不作修改,只是將其“FontSize”屬性調整為“16”,將‘String’屬性改為“1”。此時檢查m文件,可以觀察到系統又自動創建了2個函數:
function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)同樣其中的edit1_CreateFcn我們也不要進行任何改動,目前先記住日后在edit1_Callback中編寫程序以響應用戶在程序運行時響應的輸入即可。
到此,本示例程序的控制對象和2個繪圖區域已經完全建立完畢,目前我安排的界面如圖所示。
8、下面再進行一些程序界面的輔助工作,用“Static Text”控件對界面增加一些說明,以增加界面的友好性。
在第一個圖形窗口上方的空隙中放置一個“Static Text”,將“String”改為“參數a,b,n對r=acos(nt+b)的影響”,按自己的意愿設置好位置,顏色,字體大小,字體名稱等屬性值,具體設置詳細大家可以通過屬性編輯器窗口查看。
在兩個滾動條和編輯框的左側依次放置3個“Static Text”,分別用于說明后續的3個控件分別用于控制哪個參數,為此,將它們的“String”屬性分別設置為“a”、“b”、“n”,大小和顏色等外觀形象進行適當的調整。
在第一個滾動條下的左右兩端各放置一個“Static Text”,分別用于說明該滾動條的最大值和最小值,為此將它們的“String”屬性分別設置為“1”、“8”;在第二個滾動條下的左右兩端各放置一個“Static Text”,分別用于說明該滾動條的最大值和最小值,為此將它們的“String”屬性分別設置為“0”、“2π”。
最后,在兩個滾動條下方中部分別放置一個“Static Text”對象,分別用于實時顯示對應的滾動條在程序運行時被用戶拉動時當前的具體數值,所以其“String”屬性值將來在程序中即時獲取,因此在目前設計階段不進行調整,但為了避免混淆,將二者的“Tag”屬性分別修改為“texta”和“textb”以便于進行程序控制,具體實現方式參見后續程序的編寫。這樣設計完成時得到的界面如下圖。
三、完整程序的編寫。
目前本例所希望的界面布局已經全部完成(除菜單外,此功能后續介紹),現在開始程序的編寫工作,寫具體的程序前,必須來了解matlab的各function(函數)間的數據傳輸機制。我們先來考察一下已經完成的m文件,在目前系統自動生成的所有function中,除第一個(相當于C語言中的main函數)外,其它的所有函數的輸入參數中都有一個名為handles的變量,這是matlab為GUI程序開發者提供的一個數據結構,用于各個函數之間的數據傳輸,handles是結構名,程序中的每個各function間的數據都必須以handles.***的形式存在,才能實現各協調工作的各函數之間的數據傳輸,目前當我們完成設計后,我們已經有了一批形如handles.***的變量,如在添加了第一個顯示為“結 束”的按鈕并將其“Tag”屬性值設置為“jieshu”后系統已經自動地為程序開發者創建了名為handles.jieshu的變量,如果我們在程序中希望訪問這個按鈕對象,我們就可通過這個handles.jieshu變量找到它,具體的訪問程序編寫后續寫程序時不難學會。接著我們創建“Tag”屬性分別為“help”和“jump”第二個、第三個按鈕時,系統馬上為我們也創建了相應的兩個變量handles.help和handles.jump。接著我們建立兩個圖形窗口時,系統也依次建立了handles.axe1和handles.axes2兩個變量用于程序中訪問這兩個圖形窗口,在設置好兩個滾動條后,系統也立即建立了handles.slider1和handles.slider2兩個變量,然后再建立滾動條下面的編輯框時也建立了handles.edit1變量。現在相信你明白“Tag”屬性值的作用了吧?該屬性值是什么,系統就在其前加上handles.而產生可以訪問該控件的一個變量,所以界面設計階段如果自己想修改“Tag”屬性值,必須保證和其它的不能相同,且符合matlab變量的命名規則——必須英文字母開頭,由字母數字和下劃線組成。接著我們在界面上布置的每個“Static Text”(靜態文本)都依次產生一個前綴為handels.的與相應的“Tag”屬性一樣的變量,本例程序中我們所設置的那些靜態文本變量除最后2個外(即分別位于兩個滾動條下方中間的文本框)都不需要進行控制,所以不用理睬它們,只需記住最后兩個變量名分別是handles.texta和handles.textb,(它們的“Tag”屬性在設計階段我們分別已經改為了texta 和textb。
除了上述的在界面設計階段所自動建立的前綴為handles.的變量外,如果在每個函數中還需要創建新的變量,并希望這些變量值能為其它function共享,那么在定義新變量時一定也要建立形如handles.***的變量,如本例程序中我們要用到的handles.a,handles.b,handles.hh,handles.linewidth等。
明白了數據變量命名機制后,我們現在開始完善我們本例的程序編寫。
1、填寫系統已經生成的my1_OpeningFcn函數
在m文件中找到函數:
function my1_OpeningFcn(hObject, eventdata, handles, varargin)該函數名稱“_”前的名字與創建GUI時保存的文件名相同,“_”后的“OpeningFcn”由系統自動生成,是固定不變的,開發者也不可進行修改,該函數用于執行用戶所希望的程序運行時的matlab語句。本例中我希望獲取在設計階段中兩個滾動條中設置好的當前值作為函數r=acos(nt+b)中的a,b,n的值在左邊大圖像窗口中繪制該函數的圖像,并作為花絮在第二個圖像窗口中顯示名為“dance_29.gif”的圖像文件(該文件存放在當前目錄下)。
目前的該函數文件系統已經自動生成了兩條語句 % Choose default command line output for my1 handles.output = hObject;
% Update handles structure guidata(hObject, handles);不要修改它們,在兩行語句之間插入自己的語句。本例中我所鍵入的語句和簡單功能說明如下:
handles.linewidth=2;%定義畫圖的線寬 handles.color='b';%定義畫圖的顏色 handles.a=get(handles.slider1,'value');%獲取第一個滾動條當前值,并將其賦給變量handles.a %注意此句的語法,get(界面中的控件名稱,’所希望獲取的屬性名’ %還記得嗎?我們在設計階段該控件的’value’已經設置為5 %所以此句執行后handles.a=5 handles.b=2*pi*get(handles.slider2,'value');%原理與語法上句相同,稍有差異的是我們在設計階段此控件的最小值和最大值 %分別設置為0和1,即用戶在拉動滾動條時此值介于0和1之間
%而我們希望該函數中b值的變化在0和2*pi之間,所以對獲得的滾動條的值 %乘以2*pi以達到我們的要求,不過在設計階段該值為0,所以此句執行后 % handles.b=0 handles.n=str2double(get(handles.edit1,'string'));%原理和前句相同,獲取handles.edit1的字符串內容,設計階段設置為5 %但其數據類型為字符串,所以用str2double函數轉化為浮點數賦值給handles.n handles.t=linspace(0,2*pi,1000);%對極坐標函數r=acos(nt+b)中的自變量t進行采點,0和2*pi之間等間距采 %1000個點(呵呵,數目顯得比較多,辛苦計算機了)r=handles.a*cos(handles.b+handles.n*handles.t);% 對函數r=acos(nt+b)由獲取的常數a,b,n計算對應t的1000個點處的函數值 %注意此時的變量r我沒有加前綴handles.,因為此變量僅僅在該函數內部使用 %不需要其它函數共享,所以我們可以不把它放在handles結構中 [x,y]=pol2cart(handles.t,r);%本來可以直接用polar函數畫該函數的圖像,但實驗一中的實驗大家也看到了會
%出現極坐標網格線,我希望不要它們,所以用pol2cart將這組極坐標數據轉化為直角 %坐標,后面用plot函數在直角坐標系下畫出等效的圖像
%同樣變量x,y僅僅用于本函數,所以也不需要加上handles.前綴 axes(handles.axes1);%用axes函數通知系統執行后續畫圖操作在名為handles.axes1的圖形窗口內 %(即在設計時建立的左邊較大的圖形窗口內畫圖)
handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);%用plot函數畫由變量handles.linewidth指定線寬的圖像,目前其值為2 %注意該操作返回一個圖像指針值,將其值賦給變量handles.hh,用于其它函數操作 axis([-8.1 8.1-8.1 8.1]);%調整顯示窗口坐標范圍 axes(handles.axes2);%用axes函數通知系統執行后續畫圖操作在名為handles.axes2的圖形窗口內 %(即在設計時建立的右邊較大的圖形窗口內畫圖)
[handles.m1,handles.map1]=imread('dance_29.gif',1:10);%用imread函數讀取圖像文件dance_29.gif中的數據放入handles.m1(4維矩陣)%彩色圖像的顏色索引表放入handles.map1變量中
%相應的語法和邏輯較為復雜,如果大家有興趣,可查閱matlab幫助系統中的 %image processing toolbox(圖像處理工具箱)中的內容
%為與后面的語句相結合,大家形式上這樣理解:圖像文件dance_29.gif作為一個 %動態圖像文件,里面包含了10張靜態文件(當連續播放時可產生動畫效果)
%現在數據經上條語句放在了4維矩陣(試著想象一下該矩陣的組成)handles.m1中 %其中三維子陣handles.m1(:,:,:,1)放置第一張圖片信息,??,三維子陣 %handles.m1(:,:,:,10)中依次防止了10幅其中的靜態圖片文件 imshow(handles.m1(:,:,:,1),handles.map1);%用imshow函數將上述的第一幅圖像顯示在當前的圖形窗口內 axes(handles.axes1);%由于本程序運行的后續大部分操作都在第一個圖形窗口內,所以執行該語句通知系統 %此后再出現的繪圖命令都放在第一個圖形窗口內,即handles.axes1中。保存文件,此時運行程序,結果如下圖所示。
左邊圖形窗口中顯示的是a=5,b=0,n=1時極坐標函數r=acos(nt+b)的圖像,右邊圖形窗口中是腦白金老太婆跳舞時的一個瞬間定格畫面。
現在不難注意程序運行窗口中的一點令人不舒服的地方:兩個滾動條下方的中央位置處還沒有滿足我們的要求——顯示當前滾動條所處位置之值。那么我們繼續回到m文件的這個函數中,在剛剛完成的語句后繼續實現該功能:
set(handles.texta,'string',num2str(handles.a));%邏輯上該函數(set)的功能與前述GUI設計中對每個對象填寫屬性值的功能一樣 %唯一的差異是在程序進行中用語句實現,其語法為: %set(所要設置的對象變量名,’屬性名’,屬性值)%本語句是將handles.texta這個對象的'string'設置為變量handles.a的值 %細節方面需注意handles.a是數值類型,需要用num2str轉化為字符串 set(handles.textb,'string',num2str(handles.b));%與前一條語句功能一樣,只是所修改的對象和屬性值滿足我們的要求。此時再次運行程序,界面如下,實現了我們的顯示目地
下面介紹一下該函數內系統自動生成的語句 guidata(hObject, handles);的語法功能。
為了讓程序內的各函數共享handles數據結構中的每個變量的最新數據,在每個函數中,如果用戶修改或新定義了至少一個handles.***變量,那么切記在該函數的最后一條語句中一定要寫上該語句,以通知其它所有函數:各位函數筒子們,我在工作中修改了共享數據,日后工作中請訪問新的數據,以免數據使用舊數據而發生錯誤!所以在日后其它函數中別忘了加上該語句。
現在我們拖拉運行程序的滾動條或點擊“跳起來”按鈕,我們會發現沒有所希望的響應,這是正常的,因為我們還沒有編寫相應的程序語句,下面我們開始逐個編寫各個對象發生交互性操作時所希望的程序相應。
2、填寫function slider1_Callback(hObject, eventdata, handles)函數體
找到m文件中的function slider1_Callback(hObject, eventdata, handles)書寫下列語句:
handles.a=get(handles.slider1,'value');%獲取新的滾動條位置值,賦給handles.a set(handles.texta,'string',num2str(handles.a))%在滾動條下方顯示新的相應數值
r=handles.a*cos(handles.b+handles.n*handles.t);%用新的a,和已知的b,n和向量t計算新的r [x,y]=pol2cart(handles.t,r);%轉換為直角坐標
handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);%調整顯示范圍
guidata(hObject, handles);%通知其它函數handles結構發生了變化
如何?這些語句都不陌生吧?所以進行相應的調整時只需要簡單的復制——粘貼操作。現在重新運行程序,拖動第一個滾動條,發生了什么變化?很興奮吧?
3、填寫function slider2_Callback(hObject, eventdata, handles)函數體
找到m文件中的function slider2_Callback(hObject, eventdata, handles)書寫下列語句:
handles.b=2*pi*get(handles.slider2,'value');%獲取新的滾動條位置值,賦給handles.b,注意要乘以2*pi的set(handles.textb,'string',num2str(handles.b))%在滾動條下方顯示新的相應數值
r=handles.a*cos(handles.b+handles.n*handles.t);%用新的b,和已知的a,n和向量t計算新的r [x,y]=pol2cart(handles.t,r);%轉換為直角坐標
handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);%調整顯示范圍
guidata(hObject, handles);%通知其它函數handles結構發生了變化
4、完成function edit1_Callback(hObject, eventdata, handles)函數體
找到m文件中的function edit1_Callback(hObject, eventdata, handles)書寫下列語句:
handles.n=str2double(get(handles.edit1,'string'));r=handles.a*cos(handles.b+handles.n*handles.t);[x,y]=pol2cart(handles.t,r);handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);guidata(hObject, handles);這些語句的語法和邏輯功能我們都熟悉了,就不添加注釋了。
保存程序,再次運行程序,特別是修改數據編輯窗口中的n值,觀察運行結果。下面我們完成小花絮——在右側的圖像窗口中讓老太婆跳舞。
5、完成function jump_Callback(hObject, eventdata, handles)程序體
找到函數function jump_Callback(hObject, eventdata, handles)書寫下列語句
axes(handles.axes2);%下面的繪圖操作在第二個圖形窗口中進行 for nn=0:49 n=rem(nn,10)+1;%找到循環變量被10除后的余數,將余數加1,賦給n imshow(handles.m1(:,:,:,n),handles.map1);%在圖形窗口內顯示程序運行時四圍圖片矩陣的第n個三維矩陣數據 pause(.05);%暫停0.05秒 end axes(handles.axes1);%循環結束后通知系統日后繪圖操作在第一個圖形窗口內 注意到此函數中我們沒有修改handles數據結構之值,所以不需要用 guidata(hObject, handles);通知其它函數。
介紹一個編程實用小技巧,隨著GUI界面中控件的增加,m文件的function個數也越來越多,為了快速找到自己希望的函數,技巧如下:
在m文件編輯器菜單欄“”中的圖標“”,點擊它,會出現一個下拉菜單,里面列出了本m文件中所有的函數,點擊自己希望的函數名,則編輯窗口中光標會自動跳轉到此函數頭部分。如何?很人性化吧?
三、為系統控制添加菜單控制
除了用我們已經看到的“按鈕”等控件增加程序的交互性手段外,也可以象我們常見的很多程序一樣,通過窗口頂部區域的菜單進行程序的交互式控制。本例中我們建立兩個簡單的菜單,其功能是第一個用于當前圖像的顏色和圖形線寬的控制,第二個用于打開此文檔。
1、建立兩個主菜單
回到GUI界面設計環境,在工具條上點擊“標,打開如下圖所示的菜單編輯器。
”(創建和修改用戶自己的程序菜單)圖
我們可以用它們編輯兩類菜單:“Menu Bar”和“Context Menu”(上下文菜單),本文檔只介紹前者,大家如果有性趣第二類菜單,可以查閱matlab的幫助系統。
連續點擊兩次上方的工具條中的第一個圖標,下面的窗口中增加了兩項,如圖所示。
系統自動將其顯示內容和變量名“Tag”(這個不陌生吧?)分別命名為“Untitiled 1”和“Untitiled 2”,現在點選其中的一個,如“Untitiled 1”,編輯器右邊會出現該菜單的顯示和控制屬性編輯器如左圖,編輯其屬性如右圖
點選第二個菜單項“Untitled 2”,分別設置兩個屬性如下圖。
點擊“OK”按鈕。現在保存并運行程序,可以看到運行窗口上方出現了兩個菜單條,這時再查閱一下m文件,我們會發現系統又自動生成了兩個函數頭
function m1_Callback(hObject, eventdata, handles)function m2_Callback(hObject, eventdata, handles)其命名邏輯是我們剛才在設計時將兩個菜單對象的的“Tag”屬性分別修改為了m1和m2。
現在在function m2_Callback(hObject, eventdata, handles)下書寫如下語句 Winopen('Matlab交互式程序設計教程及舉例.doc');保存文件,再次運行,如果當前目錄下有該文件,則windows系統接受指令,打開該文件。
2、建立第一個主菜單下分別用于控制顏色和線寬的兩個子菜單
回到GUI編輯環境,點擊“”圖標,再次打開菜單編輯器,選擇第一個菜單項。
然后連續點擊左上方的第二個圖標,建立該菜單的兩個子菜單項。分別重復1中的操作,在右方編輯窗修改它們的“Label”和“Tag”兩個屬性如下圖所示。
對第一個子菜單項同樣分別建立三個子菜單項,“Label”屬性依次改為“1”、“2”、“3”,“Tag”屬性依次改為“m111”、“m112”、“m113”(大家自己可以任意取個性化的名字,我命名的原則是m代表“菜單”,“m113”是第1個主菜單下的第1個子菜單下的第3個菜單項,這樣日后在m文件下寫程序時不至于混亂);對第二個子菜單項同樣分別建立三個子菜單項,“Label”屬性依次改為“紅色”、“綠色”、“藍色”,“Tag”屬性依次改為“m121”、“m122”、“m123”。注意用鼠標點擊其中的名為“2”和“藍色”的兩個菜單項的第5個屬性前的框,出現“√”,用于在程序運行時給用戶指示當前的畫圖操作是用線寬為“2”的“藍色”繪制曲線,選擇后如圖
。修改完后菜單編輯器顯示如下圖。
點擊“OK”按鈕,結束菜單編輯。保存程序并運行之,在程序運行窗口中瀏覽觀察菜單和子菜單的變化。查看m文件,發現系統又自動生成了8個函數頭,后續我們編程控制需要的幾個函數分別是:
function m111_Callback(hObject, eventdata, handles)function m112_Callback(hObject, eventdata, handles)function m113_Callback(hObject, eventdata, handles)function m121_Callback(hObject, eventdata, handles)function m122_Callback(hObject, eventdata, handles)function m123_Callback(hObject, eventdata, handles)其中前3個是用戶選擇“線寬”的3個菜單項的響應函數,后3個是用戶選擇“顏色”的3個菜單項的響應函數。
3、控制“線寬”的函數編輯
在m文件中找到函數function m111_Callback(hObject, eventdata, handles)在其后書寫下列語句
handles.linewidth=1;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為1 set(handles.m111,'checked','on');%將該菜單項點選上“√”以指示當前畫圖線寬為1 set(handles.m112,'checked','off');set(handles.m113,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化
在m文件中找到函數function m112_Callback(hObject, eventdata, handles)在其后書寫下列語句
handles.linewidth=2;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為2 set(handles.m112,'checked','on');%將該菜單項點選上“√”以指示當前畫圖線寬為2 set(handles.m111,'checked','off');set(handles.m113,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化
在m文件中找到函數function m113_Callback(hObject, eventdata, handles)在其后書寫下列語句
handles.linewidth=3;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為3 set(handles.m113,'checked','on');%將該菜單項點選上“√”以指示當前畫圖線寬為3 set(handles.m111,'checked','off');set(handles.m112,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化
保存程序,運行它們,隨意點選“線寬”的3個子菜單項,觀察菜單和圖形的變化,體會相應的程序控制邏輯。
4、控制“顏色”的函數編輯
在m文件中找到函數function m121_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='r';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為紅色 set(handles.m121,'checked','on');%將該菜單項點選上“√”以指示當前畫圖顏色為紅色 set(handles.m122,'checked','off');set(handles.m123,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化 在m文件中找到函數function m122_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='g';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為綠色 set(handles.m122,'checked','on');%將該菜單項點選上“√”以指示當前畫圖顏色為綠色 set(handles.m121,'checked','off');set(handles.m123,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化
在m文件中找到函數function m123_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='b';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為藍色 set(handles.m123,'checked','on');%將該菜單項點選上“√”以指示當前畫圖顏色為藍色 set(handles.m121,'checked','off');set(handles.m122,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統其它函數handles數據結構發生了變化
保存程序,運行它們,隨意點選“顏色”的3個子菜單項,觀察菜單和圖形的變化,體會相應的程序控制邏輯。
第四篇:矩量法matlab程序設計實例
矩量法matlab程序設計實例:
Hallen方程求對稱振子天線
一、條件和計算目標 已知:
對稱振子天線長為L,半徑為a,且天線長度與波長的關系為L?0.5?,a??L,a???,設??1,半徑a=0.0000001,因此波數為k?2?/??2?。目標: 用Hallen方程算出半波振子、全波振子以及不同L/?值的對應參數值。
求:(1)電流分布
(2)E面方向圖(二維),H面方向圖(二維),半波振子空間方向性圖(三維)
二、對稱振子放置圖
l/2電流分布饋電端~l/2yx圖1 半波振子的電流分布
半波振子天線平行于z軸放置,在x軸和y軸上的分量都為零,坐標選取方式有兩種形式,一般選取圖1的空間放置方式。圖1給出了天線的電流分布情況,由圖可知,當天線很細時,電流分布近似正弦分布。
三、Hallen方程的解題思路
z2z1z?izzGz,zdz?c1coskz?c2sinkz????''?'kj??z0i' ?Ezsinkz?z'dz????z?對于中心饋電的偶極子,Hallen方程為
?L2L?2?i(z')G?z,z'?dz'?c1coskz?c2sinkz?脈沖函數展開和點選配,得到
Visinkz,j2??LL?z?? 22?In?n?1N??1zn?znG?zm,z'?dz'?c1coskzm?c2sinkzm?Visinkzm,j2?m?1,2,???,N 上式可以寫成 矩陣形式為 ?In?2N?1npmn?c1qm?c2sm?tm,m?1,2,???,N
?p12,p13,??,p1,N?1,q1,s1??I2??t1??????t?p,p,??,p,qsI22232,N?12,23?????2????????????????????????????? ????????????????IN?1????????????????????c??t????1??N?1???tN???c2????pN2,pN3,??,pN,N?1,qN,sN???
四、結果與分析
(1)電流分布
圖2 不同L/?電流分布圖
分析:由圖2可知半波振子天線L/?=0.5的電流分布最大,饋點電流最大,時輻射電阻近似等于輸入電阻,因為半波振子的輸入電流正好是波腹電流。(2)E面方向圖(二維)
圖5 不同L/?的E
面方向圖(1)分析:
(a)θ=0時,輻射場為0。
(b)當L/???1(短振子)時,方向函數和方向圖與電流元的近似相同。
?(c)L/??1.25時,最大輻射方向為???max?,主瓣隨L/?增大變窄。
2L/??1后開始出現副瓣。由圖6可以看出。
(d)L/??1.25時,隨L/?增大,主瓣變窄變小,副瓣逐漸變大;L/?繼續增大,主瓣轉為副瓣,而原副瓣變為主瓣。(如圖6所示)
圖6 不同L/?的E面方向圖(2)H面方向圖(二維)
圖7 未歸一化的不同L/?的H面方向圖
圖8 歸一化的不同L/?的H面方向圖
空間方向性圖(三維)
圖9 半波振子的空間方向圖
圖10 半波振子的空間剖面圖
附程序: clc;clear all clf;tic;
%計時 lambda=1;N=31;a=0.0000001;%已知天線和半徑 ii=1;for h=0.2:0.1:0.9 L=h*lambda;len=L/N;%將線分成奇數段,注意首末兩端的電流為0 e0=8.854e-012;u0=4*pi*10^(-7);k=2*pi/lambda;c=3e+008;w=2*pi*c;%光速,角頻率 ata=sqrt(u0/e0);z(1)=-L/2+len/2;for n=2:N
z(n)=z(n-1)+len;end for m=1:N
for n=1:N
if(m==n)
p(m,n)=log(len/a)/(2*pi)-j*k*len/4/pi;
else
r(m,n)=sqrt((z(m)-z(n))^2+a^2);
p(m,n)=len*exp(-j*k*r(m,n))/(4*pi*r(m,n));
end
end end for m=1:N
q(m)=cos(k*z(m));
s(m)=sin(k*z(m));
t(m)=sin(k*abs(z(m)))/(j*2*ata);end pp=p(N+1:N^2-N);pp=reshape(pp,N,N-2);mat=[pp,q',s'];%構造矩陣 I=matt';II=[0;I(1:N-2);0];%加上兩端零電流 Current=abs(II);x=linspace(-L/2,L/2,N);
figure(1);string=['b','g','r','y','c','k','m','r'];string1=['ko','bo','yo','co','mo','ro','go','bo'];plot(x,Current,string(ii),'linewidth',1.3);xlabel('L/lambda'),ylabel('電流分布');grid on hold on %legend('L=0.1lambda','L=0.2lambda','L=0.3lambda','L=0.4lambda','L=0.5lambda','L=0.6lambda','L=0.7lambda','L=0.8lambda','L=0.9lambda','L=1lambda')legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')Zmn=1/I((N+1)/2);%%%%%%V=1v theta=linspace(0,2*pi,360);
for m=1:360
for n=1:N
F1(m,n)=II(n).*exp(j*k*z(n)*cos(m*pi/180))*len*sin(m*pi/180);
end end F2=-sum(F1');F=F2/max(F2);%%%歸一化 figure(2);polar(theta,abs(F),string(ii));title('E面歸一化方向圖')view(90,-90)%legend('L=hlambda','L=0.3lambda','L=0.3lambda','L=0.4lambda','L=0.5lambda','L=0.6lambda','L=0.7lambda','L=0.8lambda','L=0.9lambda','L=1lambda')legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')hold on figure(3)kk=1;for phi=0:pi/180:2*pi for n=1:N
FF(n)=II(n)*len*exp(i*k*len*n*cos(pi/2))*sin(pi/2);end;FFF(kk)=sum(FF);kk=kk+1;end;phi=0:pi/180:2*pi;polar(phi,FFF/max(abs(FFF)),string(ii));title('pattern,F({theta},{phi}),theta=90');legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')hold on figure(4)polar(phi,FFF/max((FFF)),string(ii));title('pattern,F({theta},{phi}),theta=90');hold on figure(5)mm=1;for theta=0:0.01*pi:pi;for n=1:N
E(1,n)=2*pi*c*u0*len/(4*pi*1)*(exp(-i*k*1)*exp(i*k*len*n*cos(theta))*sin(theta));end
EE=E*II;
G(mm)=(4*pi*1^2)/ata/abs(II((N-1)/2+1))^2/(-real(Zmn))*abs(EE)^2;mm=mm+1;end
歸
一
化
H-plane
不
同
L/lambda
H-plane
第五篇:Matlab心得體會
Matlab心得體會
10金融3 呂淼 2010241125 在為學習這門課前就聽說了他的強大,因為現在的經濟模型都是需要這些分析軟件的,也曾聽說金融的未來方向是需要數學等等作為依托的。曾經旁聽過學校數學建模的課程,當時老師用的是lingo。對那個只需要U盤攜帶就可以安裝的小東西記憶深刻。等到學習matlab時覺得這才是真正的王道啊。
它不僅有強大的運算功能,還有強大的繪圖功能,雖然學習了有一個學習,但是我對他的了解額僅僅是一點點,或許連入門都談不上。因為我學習時了解到一個現實。就是matlab的學習依賴有比較好的數學功底,其中我看最經常運用到的就是矩陣。我從網上了解到matlab是一門高等數學和計算機技術結合的東西,學習它必須具有相應的數學和計算機知識。然而很可惜,我的書寫不是很好。每次講到這個部分的時候就覺得聽說理解無能了。特別是我今年還是大二,有一次老師講課時用到協方差。無可避免的我笑了,因為協方差是我們下節課概率論數理統計老師要講的內容。大一的時候還不覺得,但是大二,越是學習以后的內容越是感覺到時間不夠用。或許時間是夠用的,但是無法放棄那些占用自己時間表的無用項目。雖然這學期的學習的時間短暫,就算時間足夠,老師也不能把所有的都講解給我們,因為一個軟件的功能需要我們自己不斷的去摸索,老師也不可能知道所有。老師只是個指路人,最終的學習還是要靠自己。而且在摸索的過程中,我們能夠發現和體會學習的快樂。痛并快樂著是種常態了吧。
自我感覺學習matlab與其說是學習一門軟件,更不如說是學習一門語言。用一種數理的語言描述現象,揭示表象下的規律。此外,我認為matlab中的作圖功能很強大,不僅簡單的函數現象可以明確畫出,而且一些點狀物,甚至立體圖也可以畫出。大一上微積分的時候,老師曾經多次在課件中加入用matlab畫出的圖來。不論是一維二維三維等等,都能很好的畫出來。只要能編寫出函數式,在短短的幾秒之內,他就會呈現在你眼前。另外就是圖形的直觀性,這是由陰影的制作的。而且可以根據需要,坐標圖上加標題,坐標軸標記,文本注釋級柵格等,也可以指定圖線形式,比如是虛線。顏色也可以自己來定。可以在同一張圖上畫,也可以單個顯示。
今年選擇金融matlab一方面出于希望能夠提前修完大三時期的課程,能夠空出更多的時間去考研或者為就業做準備。另一個考慮就是希望明年能夠參加數學建模大賽,今年種種糾結放棄了,覺得萬分可惜。明年也就是大三下學期的話我就會再來一次,而且還會更加堅定些。那么學習matlab的話對明年的計劃也是有幫助的。在學習的過程中,因為以前學過access中的select語言,覺得就編寫這方面是有共性的,但是matlab的編程語言似乎更多更復雜一點,這是由于涉及的數學模型,數學公式更多的原因。老師在講解的過程中是通過一個個具體的金融例子來講解的,而不是就matlab這個具體的軟件工具進行講解。這個給我帶來相當大的打擊,因為我發現我不僅僅是工具不能夠熟練,涉及到的專業知識也是一知半解。這更加堅定了我要好好學習專業知識的決心,大學四年有幾個人是希望荒度過去的呢?可是今年的這門課真的是讓我感到沒學到什么,估計也是因為我抱著看一看的隨意態度來的吧,也沒有那種遇到不懂的就一定要弄懂它的決心和毅力。說什么都是借口了,無法掩飾我沒有學好它的事實。事實上,我覺得今年這門課的重點并不是讓我們掌握這種軟件的具體用法,而是主要向我們展示如何用它去解決一些金融問題,數學問題。這點讓我很郁悶,因為我不懂得原理,聽起來這門課倍感吃力啊。可是嘛,年輕沒有什么不可以,又有誰可以斷言我接下來的生活中不能好好學習這個東西為自己的工作,學習,生活,研究興趣帶來方便呢。
從大學開學的見聞到現在學習MATLAB,感覺這是一個很好的軟件,語言簡便,實用性強。作為一個做新手,想要學習好這門語言,可以說還是比較難的。在我接觸這門語言的這些天,除了會畫幾個簡單的圖形,其他的還是有待提高。從另一個方面也對我們大學生提出了兩個要求——充實的課外基礎和良好的英語基礎。在現代,幾乎所有好的軟件都是來自國外,假如不會外語,想學好是非常難的。其實想要學習好一們語言,不能只靠老師,關鍵是自己。每個人內心深處都是有抵觸意識的,不可能把老師的所有都學到。學習這門語言,不光是學習一種語言,更重要的事學習一種方法,一種學習軟件的方法,還有學習的態度。
總結一下,學習任何一門語言:態度決定一切。不論是英語還是計算機語言。其實以前上高中的時候接觸過這種編程語言,當時記得最頭疼的就是循環語句,但是在matlab中這種東西用的就比較少了。語言語句都是很簡潔利落的,都是一槍瞄死靶心的那種,很直接,這也讓我減輕不少心理負擔。
其實學習這種事,與其說學習什么具體的東西,更不如說是學習一種態度,從種種波折中認識到自己的局限性,不足。心情會沮喪,也會豁然開朗。光想不練假把式,不論想的再多,不實際運用還是沒有用的。書山有路勤為徑,學海無涯苦作舟。華山再高,頂有過路。這就是我今年學習金融matlab的心得體會。