第一篇:學(xué)習(xí)matlab的吐血經(jīng)驗(yàn)
經(jīng)驗(yàn)之一:
Matlab函數(shù)句柄、feval函數(shù)和inline函數(shù)的使用 MATLAB函數(shù)句柄
函數(shù)句柄(Function handle)是MATLAB的一種數(shù)據(jù)類型。
包含了函數(shù)的路徑、函數(shù)名、類型以及可能存在的重載方法;
引入函數(shù)句柄是為了使feval及借助于它的泛函指令工作更可靠;使“函數(shù)調(diào)用”像“變量調(diào)用”一樣方便靈活;提高函數(shù)調(diào)用速度,特別在反復(fù)調(diào)用情況下更顯效率;提高軟件重用性,擴(kuò)大子函數(shù)和私用函數(shù)的可調(diào)用范圍;迅速獲得同名重載函數(shù)的位置、類型信息。
-------
可以與變量一樣方便地使用:比如說(shuō),在現(xiàn)在這個(gè)目錄運(yùn)行時(shí),創(chuàng)建了本目錄一個(gè)函數(shù)的句柄,當(dāng)轉(zhuǎn)到其他目錄時(shí),可以通過(guò)函數(shù)句柄直接調(diào)用上一個(gè)目錄的函數(shù),而不需要把那個(gè)函數(shù)文件復(fù)制過(guò)來(lái),因?yàn)閯?chuàng)建的函數(shù)句柄中已經(jīng)包含了路徑信息;
提高函數(shù)調(diào)用速度:因?yàn)閙atlab對(duì)函數(shù)的調(diào)用每次都是要搜索所有的路徑,從set path中可以看到,路徑是非常的多的,所以如果一個(gè)函數(shù)在程序中需要經(jīng)常用到的話,使用函數(shù)句柄,對(duì)速度會(huì)有提高的;
-------
MATLAB中函數(shù)句柄的使用使得函數(shù)也可以成為輸入變量,并且能很方便的調(diào)用,提高函數(shù)的可用性和獨(dú)立性。
函數(shù)句柄實(shí)際上提供了一種間接調(diào)用函數(shù)的方法。創(chuàng)建函數(shù)句柄需要用到操作符@
創(chuàng)建函數(shù)句柄的語(yǔ)法:
fhandle = @function_filename 調(diào)用函數(shù)時(shí)就可以調(diào)用該句柄,可以實(shí)現(xiàn)同樣的功能。
例如fhandle = @sin就創(chuàng)建了sin的句柄,輸入fhandle(x)其實(shí)就是sin(x)的功能。
如
% %-----------------
fhandle=@sin
fhandle(pi)sin(pi)
% %-----------------
例如:
新建M文件f1.m
function y=f1(X)
x1=X(1);x2=X(2);y=x1^2+x1*x2;
新建M文件ftest.m
function Y=ftest(f,X)
syms x1 x2;F=f([x1,x2]);v=[x1,x2];grad=jacobian(F,v);Y=subs(grad,v,X);
在MATLAB命令窗口輸入Y=ftest(@f1,[2,1]),得到結(jié)果:
Y =
2
此處@f1即為函數(shù)f1的句柄,可以用class(@f1)判斷變量的類型,得到ans = function_handle即函數(shù)句柄。函數(shù)ftest是求一個(gè)二維函數(shù)在指定點(diǎn)的梯度值。我們可以替換目標(biāo)函數(shù)為f2或其他函數(shù)同樣可以求得梯度。這樣函數(shù)ftest就可以適用于任何二維函數(shù)而不必做改動(dòng)了。
feval函數(shù)如何理解
feval函數(shù)的最通常的應(yīng)用是以下形式:
feval('functionname',parameter),舉個(gè)簡(jiǎn)單的例子:
比如要計(jì)算sin(2),當(dāng)然可以直接用命令y=sin(2);利用feval,還可以這樣來(lái)做: y=feval('sin',2);另外這里的函數(shù)名字還可以是一個(gè)函數(shù)句柄,即h=@sin;y=feval(h,2);或者直接寫(xiě)成y=feval(@sin,2);
內(nèi)聯(lián)函數(shù)(inline function)
inline函數(shù)不是函數(shù)句柄, 是另外一種類型, 它也可以用變量來(lái)表示函數(shù), 用法也和一般函數(shù), 函數(shù)句柄是一樣的.內(nèi)聯(lián)函數(shù)和普通的函數(shù)句柄,準(zhǔn)確說(shuō)跟匿名函數(shù)比較類似,可以通過(guò)一個(gè)函數(shù)表達(dá)式近而得到該函數(shù)。
在matlab中創(chuàng)建局部函數(shù)時(shí),可用inline。優(yōu)點(diǎn)是不必將其儲(chǔ)存為一個(gè)單獨(dú)文件。在運(yùn)用中有幾點(diǎn)限制:不能調(diào)用另一個(gè) inline函數(shù),只能由一個(gè)matlab表達(dá)式組成,并且只能返回一個(gè)變量---顯然不允許[u,v]這種形式。因而,任何要求邏輯運(yùn)算或乘法運(yùn)算以求得最終結(jié)果的場(chǎng)合,都不能應(yīng)用inline。
語(yǔ)法格式如下: 變量名=inline(表達(dá)式); 變量名=inline('函數(shù)表達(dá)式', '變量名1','變量名2',...,'變量名n');(推薦)
例如:
a='x+y';
f=inline(a); f(2,3)
ans =
或者:
f=inline('x+y','x','y');
f(2,3)
ans =
inline函數(shù)可以對(duì)某個(gè)變量調(diào)用數(shù)組,如:
Fofx=inline(‘x.^2*cos(a*x)-b’ , ‘x’,’a’,’b’);
g= Fofx([pi/3 pi/3.5],4,1)
系統(tǒng)輸出為:g=-1.5483-1.7259
經(jīng)驗(yàn)之二:
break就是直接跳出該層循環(huán)
continue就是直接進(jìn)入該層循環(huán)的下一次迭代 return就是直接退出程序或函數(shù)返回了
經(jīng)驗(yàn)之三:
Matlab中添加高斯白噪聲(Learning to use Matlab)MATLAB中產(chǎn)生高斯白噪聲非常方便,可以直接應(yīng)用兩個(gè)函數(shù),一個(gè)是WGN,另一個(gè)是AWGN。WGN用于產(chǎn)生高斯白噪聲,AWGN則用于在某一信號(hào)中加入高斯白噪聲。
1.WGN:產(chǎn)生高斯白噪聲
y = wgn(m,n,p)產(chǎn)生一個(gè)m行n列的高斯白噪聲的矩陣,p以dBW為單位指定輸出噪聲的強(qiáng)度。
y = wgn(m,n,p,imp)以歐姆(Ohm)為單位指定負(fù)載阻抗。y = wgn(m,n,p,imp,state)重置RANDN的狀態(tài)。
在數(shù)值變量后還可附加一些標(biāo)志性參數(shù):
y = wgn(?,POWERTYPE)指定p的單位。POWERTYPE可以是'dBW', 'dBm'或'linear'。線性強(qiáng)度(linear power)以瓦特(Watt)為單位。
y = wgn(?,OUTPUTTYPE)指定輸出類型。OUTPUTTYPE可以是'real'或'complex'。2.AWGN:在某一信號(hào)中加入高斯白噪聲
y = awgn(x,SNR)在信號(hào)x中加入高斯白噪聲。信噪比SNR以dB為單位。x的強(qiáng)度假定為0dBW。如果x是復(fù)數(shù),就加入復(fù)噪聲。y = awgn(x,SNR,SIGPOWER)如果SIGPOWER是數(shù)值,則其代表以dBW為單位的信號(hào)強(qiáng)度;如果SIGPOWER為'measured',則函數(shù)將在加入噪聲之前測(cè)定信號(hào)強(qiáng)度。y = awgn(x,SNR,SIGPOWER,STATE)重置RANDN的狀態(tài)。y = awgn(?,POWERTYPE)指定SNR和SIGPOWER的單位。POWERTYPE可以是'dB'或'linear'。如果POWERTYPE是'dB',那么SNR以dB為單位,而SIGPOWER以dBW為單位。如果POWERTYPE是'linear',那么SNR作為比值來(lái)度量,而SIGPOWER以瓦特為單位。
經(jīng)驗(yàn)之四:
error(‘ 報(bào)錯(cuò)跳出’)nargin 定義的函數(shù)中應(yīng)該輸入的變量個(gè)數(shù)
經(jīng)驗(yàn)之五 rref是把矩陣化為最簡(jiǎn)矩陣的函數(shù) 用det計(jì)算方陣的行列式值 用rank計(jì)算矩陣的特征值
drawnow是刷新屏幕的語(yǔ)句;
Imfinfo 可以查看圖片的所在的位置信息
經(jīng)驗(yàn)之六:
求解Ax=d的解x 1.LU分解
% file: myLU.m function [L,U]=myLU(A)%實(shí)現(xiàn)對(duì)矩陣A的LU分解,L為下三角矩陣 A [n,n]=size(A);L=zeros(n,n);U=zeros(n,n);for i=1:n L(i,i)=1;end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)');end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k);end end 2.用分解獲得的L,U求解x ?
[L,U] = myLU(A)
[n,m]=size(A)
y(1)=d(1);for i=2:n for j=1:i-1 d(i)=d(i)-L(i,j)*y(j);end y(i)=d(i);end x(n)=y(n)/U(n,n);for i=(n-1):-1:1 for j=n:-1:i+1 y(i)=y(i)-U(i,j)*x(j);end x(i)=y(i)/U(i,i);end
經(jīng)驗(yàn)之七:
對(duì)于用imread讀回來(lái)的圖片信息 例如 [123,12,3];123 12 分別是圖片的寬高 也是一個(gè)三維度的矩陣 包含了 圖片的色度信息
吐血經(jīng)驗(yàn)之八:
%如何設(shè)置圖片的大小 clear a=imread('01.jpg');%讀入一張圖片
b=imresize(a,[100 200]);%設(shè)置你想要的大小
imwrite(b,'02.jpg');%按改變后的大小輸出你的圖片數(shù)據(jù)
%GIF動(dòng)畫(huà)文件生成
I=cell(1,30);%這個(gè)好像是創(chuàng)99個(gè)房間用來(lái)一個(gè)放圖片信息 這里值得注意圖片是一個(gè)三維矩陣奧 for b=1:30 m1=imread([int2str(b),'.jpg']);%m1是一個(gè)公共變量會(huì)不停的被下一張圖片信息覆蓋最后是最后一張圖片的信息 I=m1;%I{1}。。I{99}就是每一張圖片的信息 end c=cell(1,30);[I{1},c{1}]=rgb2ind(I{1},256);imwrite(I{1},c{1},'test1.GIF','gif','Loopcount',inf,'DelayTime',0.4);for i=2:30;[I{i},c{i}]=rgb2ind(I{i},256);imwrite(I{i},c{i},'test1.GIF','gif','WriteMode','append','DelayTime',0.4);end;
經(jīng)驗(yàn)之九:
Sum的用法 a=sum(x);%列求和 a=sum(x,2);%行求和 a=sum(x(:));%矩陣求和
經(jīng)驗(yàn)之九:
http://
這個(gè)有很多很好地的函數(shù)用法!
大吐血經(jīng)驗(yàn)之十:
Excel和matlab數(shù)據(jù)的導(dǎo)入與導(dǎo)出
xlswrite('tj.xlsx',W,'B3:I5');把matlab中產(chǎn)生的數(shù)據(jù)W導(dǎo)入到制定的tj.xlsx 對(duì)于制定區(qū)域的格式 要當(dāng)心
a=xlsread('tj.xlsx',W,'B3:I5');
第二篇:matlab學(xué)習(xí)心得體會(huì)
Matlab學(xué)習(xí)心得
班級(jí):機(jī)械124 姓名:萬(wàn)明男
學(xué)號(hào):2012093386 電話:***
matlab學(xué)習(xí)心得體會(huì)
MATLAB中有豐富的圖形處理能力,提供了繪制各種圖形、圖像數(shù)據(jù)的函數(shù)。他提供了一組繪制二維和三維曲線的函數(shù),他們還可以對(duì)圖形進(jìn)行旋轉(zhuǎn)、縮放等操作。MATLAB內(nèi)部還包含豐富的數(shù)學(xué)函數(shù)和數(shù)據(jù)類型,使用方便且功能非常強(qiáng)大。本學(xué)期通過(guò)對(duì)MATLAB的系統(tǒng)環(huán)境,數(shù)據(jù)的各種運(yùn)算,矩陣的分析和處理,程序設(shè)計(jì),繪圖,數(shù)值計(jì)算及符號(hào)運(yùn)算的學(xué)習(xí),初步掌握了MATLAB的實(shí)用方法。通過(guò)理論課的講解與實(shí)驗(yàn)課的操作,使我在短時(shí)間內(nèi)學(xué)會(huì)使用MATLAB,同時(shí),通過(guò)上機(jī)實(shí)驗(yàn),對(duì)理論知識(shí)的復(fù)習(xí)鞏固實(shí)踐,可以自己根據(jù)例題編寫(xiě)設(shè)計(jì)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)不同的功能,繪制出比較滿意的二維三維圖形,在實(shí)踐中找到樂(lè)趣。MATLAB是一個(gè)實(shí)用性很強(qiáng),操作相對(duì)容易,比較完善的工具軟件,使用起來(lái)比較方便,通過(guò)操作可以很快看到結(jié)果,能夠清晰的感覺(jué)到成功與失敗,雖然課程中也會(huì)出現(xiàn)一些小問(wèn)題,但是很喜歡這門(mén)課程。
學(xué)習(xí)matlab是聽(tīng)說(shuō)它是一個(gè)功能強(qiáng)大的數(shù)學(xué)軟件,但是正被微積分的計(jì)算纏身,聽(tīng)說(shuō)有一個(gè)高級(jí)的計(jì)算器當(dāng)然高興,以后可以偷懶了,當(dāng)然現(xiàn)在不能偷懶。聽(tīng)說(shuō)關(guān)于自動(dòng)化的計(jì)算特別復(fù)雜,如果有一種軟件能幫忙解題,那是一種極大的解脫,有益于縮短研究時(shí)間。目前我只知道有三種數(shù)學(xué)軟件,都是國(guó)外的,沒(méi)有國(guó)內(nèi)的,差距挺大的。matlab學(xué)起來(lái)挺順手的,比C語(yǔ)言簡(jiǎn)單。但是深入學(xué)習(xí)的時(shí)候卻困難重重,因?yàn)楹芏嘀R(shí)都沒(méi)有學(xué)習(xí),就算知道那些函數(shù),也沒(méi)有什么用處。老師布置的作業(yè)難度大,寫(xiě)一篇實(shí)驗(yàn),大一什么都不會(huì),寫(xiě)一篇這種論文談何容易。最多也就會(huì)一些數(shù)值計(jì)算、符號(hào)計(jì)算、簡(jiǎn)單繪圖,根本不會(huì)什么實(shí)驗(yàn)。學(xué)習(xí)matlab體會(huì)最多的是這個(gè)軟件的功能強(qiáng)大,好多數(shù)學(xué)題都被輕易的解出。但是有一點(diǎn)遺憾,不知是我不會(huì)用,還是它沒(méi)個(gè)功能,已知空間的電荷分布,求空間的電場(chǎng)分布。其中電場(chǎng)分布是無(wú)法用函數(shù)表達(dá)式表示。我知道計(jì)算機(jī)肯定可以實(shí)現(xiàn),但是這個(gè)軟件能不能實(shí)現(xiàn)就不知道了,我看過(guò)許多資料,但是在這方matlab學(xué)習(xí)心得體會(huì)三:學(xué)習(xí)matlab的心得,這是我在學(xué)習(xí)的過(guò)程中的一些技巧,或許對(duì)你有幫助.1,如果你要是不是計(jì)算機(jī)轉(zhuǎn)業(yè)的,只是為了方便自己的工作或?qū)W習(xí),那么你沒(méi)有必要把matlab教程全部學(xué)會(huì),只需要學(xué)你需要的那部分即可,比如,繪圖,矩陣運(yùn)算,等等,根據(jù)你個(gè)人的需要而定,但是基本命令、數(shù)據(jù)類型、基本的程序結(jié)構(gòu)(條件語(yǔ)句,循環(huán)語(yǔ)句,嵌套)、文件的IO是必須看的,因?yàn)槿魏我粋€(gè)程序都需要這幾個(gè)基本的塊。
2,你最好找一個(gè)熟悉編程的人來(lái)輔助你的學(xué)習(xí),這就包括很多編程的技巧問(wèn)題,程序的結(jié)構(gòu)設(shè)計(jì)問(wèn)題,對(duì)于程序的運(yùn)行效率非常有幫助。有的時(shí)候,你編出來(lái)的程序,能夠運(yùn)行,但是耗時(shí)太長(zhǎng),也就是說(shuō)你的程序沒(méi)有錯(cuò),但是不適合實(shí)際?;蛘哒f(shuō),對(duì)于規(guī)模小的問(wèn)題能夠解決,但是規(guī)模大一點(diǎn)的問(wèn)題就需要很長(zhǎng)很長(zhǎng)的時(shí)間,這就需要對(duì)程序的結(jié)構(gòu)和算法問(wèn)題進(jìn)行改進(jìn)(親身體會(huì),編完一個(gè)程序,小的例子可以運(yùn)行出結(jié)果,但是大例子需要很長(zhǎng)時(shí)間,所以必須要改進(jìn)一下)。
3,你需要找一本matlab的函數(shù)工具詞典,就像漢語(yǔ)詞典一樣,你要盡量多的熟悉matlab自帶的函數(shù),及其作用,因?yàn)閙atlab的自帶函數(shù)特別多,基本上能夠滿足一般的數(shù)據(jù)和矩陣的計(jì)算,所以基本上不用你自己編函數(shù)(如vb中,大部分的函數(shù)都需要自己編)。這一點(diǎn)對(duì)你的程序非常有幫助,可以使你的程序簡(jiǎn)單,運(yùn)行效率高,可以節(jié)省很多時(shí)間(親身體會(huì))。切記!!4,你把基本的知識(shí)看過(guò)之后,就需要找一個(gè)實(shí)際的程序來(lái)動(dòng)手編一下,不要等所有的知識(shí)都學(xué)好之后再去編程,你要在編程的過(guò)程中學(xué)習(xí),程序需要什么知識(shí)再去補(bǔ)充(這一條是別人教我的,很管用),編程是一點(diǎn)一點(diǎn)積累的,所以你要需做一些隨手筆記什么的。
5,編程問(wèn)題最頭疼的不是編程序,而是調(diào)程序,所以在你的程序編完之后,一定要進(jìn)行驗(yàn)證其正確性,你要盡量多的設(shè)想你的問(wèn)題的復(fù)雜性,當(dāng)然,要一步一步復(fù)雜,這樣才能保證你的程序的適用性很強(qiáng)。
6.文本文件與函數(shù)文件之間的區(qū)別
因?yàn)镸ATLAB本身可以被認(rèn)為是一種高級(jí)語(yǔ)言,所以用它可編寫(xiě)寫(xiě)出具有特殊意義的磁盤(pán)文件來(lái)。這些磁盤(pán)文件由一系列的MATLAB語(yǔ)句組成,它既可能是由一系列窗口命令語(yǔ)句構(gòu)成的文本文件,又可以是由各種控制語(yǔ)句和說(shuō)明語(yǔ)句構(gòu)成的函數(shù)文件。由于它們都是有ASCII碼構(gòu)成的,其擴(kuò)展名均為“.m”,故統(tǒng)稱為M文件。文本文件有一系列的MATLAB語(yǔ)句組成,它類似與DOS下的批處理文件,在MATLAB地提示下直接鍵入文本文件名,便可自動(dòng)執(zhí)行文件中的一系列命令,直至給出最終結(jié)果。文本文件在工作空間中運(yùn)算的變量為全局變量。然而函數(shù)文件的功能是建立一個(gè)函數(shù),且這個(gè)函數(shù)可以同MATLAB的庫(kù)函數(shù)一樣使用,它與文本文件不同,在一般情況下不能單獨(dú)鍵入函數(shù)文件的文件名運(yùn)行一個(gè)函數(shù)文件,它必須由其他語(yǔ)句來(lái)調(diào)用,函數(shù)文件允許有多個(gè)輸入?yún)?shù)和多個(gè)輸出參數(shù)值。所以在這兩個(gè)不同之間的文件之間必須一定要加以區(qū)別開(kāi)來(lái),我一般最先看到的是第一行是否function開(kāi)頭的語(yǔ)句,且是不是存在函數(shù)名和輸入形式參數(shù)和輸出形式參數(shù),一般沒(méi)有這一行的磁盤(pán)文件就是文本文件?;驹谶\(yùn)行的時(shí)候函數(shù)文件中定義的變量為局部變量,也就是說(shuō)它只在函數(shù)內(nèi)有效。即在該函數(shù)返回后,這些變量會(huì)自動(dòng)在MATLAB工作空間中清除掉,這與文本文件不同的,但可通過(guò)命令global<變量>來(lái)定義一個(gè)全局變量。7.MATLAB繪圖功能
如今繪圖功能的運(yùn)用已經(jīng)普遍化,如今MATLAB被控制界廣泛接受正是因?yàn)樗軌蛱峁┝耸址奖愕囊幌盗欣L圖命令,所以學(xué)習(xí)畫(huà)圖這一部分一定需要認(rèn)真的學(xué)習(xí),另外學(xué)習(xí)做好的工具就是要與實(shí)踐相結(jié)合,多學(xué)多畫(huà),可為什么修改之后曲線變了 原因是步長(zhǎng)改了,在第一次的命令窗口中步長(zhǎng)為0.1第二次沒(méi)有設(shè)定步長(zhǎng),系統(tǒng)卻沒(méi)有自動(dòng)設(shè)定合理的步長(zhǎng),給以的是系統(tǒng)設(shè)定的步長(zhǎng)為1,所以實(shí)驗(yàn)時(shí)自己有必要要給出步長(zhǎng)。所以在不同的步長(zhǎng)的時(shí)候得到的圖形是不盡相同的,只有提供的合理的步長(zhǎng)參數(shù),對(duì)于一個(gè)系統(tǒng)的仿真才能得到合理的圖形。另外要學(xué)會(huì)運(yùn)用hold on 以及hold off在繪圖時(shí)候的功能,增加網(wǎng)格也可以為測(cè)量提供簡(jiǎn)要的標(biāo)準(zhǔn)。
第三篇:Matlab學(xué)習(xí)總結(jié)
學(xué)Matlab有感
姓名:王鴻棟 學(xué)號(hào):20090286 班級(jí): 03310901 我對(duì)于計(jì)算機(jī)編程接觸的比較晚,也沒(méi)有特別大的興趣。不過(guò)對(duì)于Matlab這門(mén)課我還是很喜歡的。一是這個(gè)語(yǔ)言可以變出程序繪出函數(shù)的圖形,這就使得這個(gè)語(yǔ)言可以被“看見(jiàn)”,感覺(jué)比較親切,不是那么縹緲空虛的東西。二是這個(gè)語(yǔ)言卻是很“友好”,很人性化,像我剛學(xué)習(xí)這門(mén)語(yǔ)言,還什么都不會(huì)編的時(shí)候,我隨便打出了一句help,界面上就輸出了幫助文檔。三是這個(gè)語(yǔ)言的強(qiáng)大的功能,1.3G不是白給的,很多C、java里需要用循環(huán)語(yǔ)句來(lái)完成的,在Matlab里只需要一句話就可以搞定了,剛上這門(mén)課時(shí)老師說(shuō)C一堂課講授的內(nèi)容Matlab一句話就可以搞定了,看來(lái)不是假的。四是這門(mén)語(yǔ)言確實(shí)很有用,信號(hào)與系統(tǒng)課上學(xué)的很多內(nèi)容都可以用Matlab來(lái)仿真,另外這門(mén)語(yǔ)言在很多其他的領(lǐng)域也都很有用,所以,我打算好好學(xué)習(xí)這門(mén)語(yǔ)言。
第一次交作業(yè)時(shí)我還只交上了兩道題,那時(shí)候?qū)@門(mén)語(yǔ)言接觸得還比較少,但是就在交作業(yè)的那天我打算好好學(xué)習(xí)這門(mén)語(yǔ)言,而且在寫(xiě)作業(yè)的時(shí)候我確實(shí)喜歡上了這門(mén)語(yǔ)言。雖然第一次由于時(shí)間倉(cāng)促只交上了兩道題,可是那都是我自己寫(xiě)的,我覺(jué)得只有這樣才能學(xué)到東西。第二天,在別人都在做第二次作業(yè)的時(shí)候,我卻仍然在做第一次作業(yè),我打算把第一次的作業(yè)完整的寫(xiě)一遍,即使這對(duì)我的分?jǐn)?shù)一點(diǎn)幫助也沒(méi)有。第二次作業(yè)我提前好幾天就寫(xiě)完了,雖然沒(méi)有完成全部的題目。我把第一第二次作業(yè)一起交了上去,我希望老師能幫我看一看。
上面只是對(duì)這門(mén)課程的一些懷念,課程已經(jīng)結(jié)束了,不過(guò)我會(huì)繼續(xù)學(xué)習(xí)這門(mén)語(yǔ)言的。下面就針對(duì)這次作業(yè)的要求,給這門(mén)課提一些看法,畢竟這才是正題。MATLAB 產(chǎn)品族可以用來(lái)進(jìn)行以下各種工作:
● 數(shù)值分析
● 數(shù)值和符號(hào)計(jì)算
● 工程與科學(xué)繪圖
● 控制系統(tǒng)的設(shè)計(jì)與仿真
● 數(shù)字圖像處理
● 數(shù)字信號(hào)處理
● 通訊系統(tǒng)設(shè)計(jì)與仿真
● 財(cái)務(wù)與金融工程
MATLAB 的應(yīng)用范圍非常廣,包括信號(hào)和圖像處理、通訊、控制系統(tǒng)設(shè)計(jì)、測(cè)試和測(cè)量、財(cái)務(wù)建模和分析以及計(jì)算生物學(xué)等眾多應(yīng)用領(lǐng)域。附加的工具箱(單獨(dú)提供的專用 MATLAB 函數(shù)集)擴(kuò)展了 MATLAB 環(huán)境,以解決這些應(yīng)用領(lǐng)域內(nèi)特定類型的問(wèn)題。說(shuō)實(shí)在的想完全掌握全部的基本上是不可能的,就像dsp一樣,應(yīng)用的范圍很廣,想一口吃可能不行,所以要結(jié)合專業(yè)來(lái)學(xué)習(xí)才好!
對(duì)于我們這些學(xué)習(xí)了C語(yǔ)言的學(xué)生,編程基本的語(yǔ)法學(xué)習(xí)起來(lái)很快的,和c語(yǔ)言很類似,而且是支持c語(yǔ)言函數(shù)的,或者說(shuō)函數(shù)就是用c語(yǔ)言編的,完全是解釋性的語(yǔ)言,像打草稿一樣,可以一句句的編譯,看結(jié)果的。
等我們編到基本的熟悉之后就可以編輯函數(shù)了,-------這個(gè)其實(shí)用的不多,為了應(yīng)用的話,老師建議開(kāi)始編寫(xiě)M文件,也就是把程序都寫(xiě)在m文件里面,然后編譯,調(diào)試,根據(jù)錯(cuò)誤信息來(lái)調(diào)試。
至于和專業(yè)相關(guān)的方面就說(shuō)說(shuō)自動(dòng)化方面吧!和控制理論,fft,用的比較多,根軌跡,相平面,傳遞函數(shù),拉普拉斯變換,奈氏曲線什么的,基本上都可以解決
03310901班
王鴻棟 20090286 對(duì)于授課方式,我覺(jué)得上課時(shí)老師是結(jié)合信號(hào)與系統(tǒng)來(lái)講的,就是說(shuō)課程的定位就是交給我們解決信號(hào)與系統(tǒng)方面問(wèn)題的一個(gè)方法。我覺(jué)得Matlab功能遠(yuǎn)遠(yuǎn)不止于此。而且老師在課上講程序都是一帶而過(guò),我覺(jué)得講授的程序不必很多,一堂課只講幾個(gè)程序,但是對(duì)于每個(gè)程序,如果老師都能給我們進(jìn)行分析,把這個(gè)程序?qū)⒚靼琢耍敲催@堂課我們就能學(xué)到很多東西。而且這樣講課也不會(huì)使我們覺(jué)得枯燥。
對(duì)提高M(jìn)atlab編程能力的方法,我想主要有以下三個(gè): 1.查help 2.多上上論壇,搜索帖子、發(fā)帖子問(wèn)人 3.閱讀別人、特別是牛人的程序
當(dāng)然了,正如所有的程序語(yǔ)言一樣,“3分課本7分上機(jī)”,一定要?jiǎng)邮植判校荒芄饪?。多想、多思考、多嘗試,才是正路。
最后,整理一下常用的快捷鍵(用【】表示)或命令: 1.在命令窗口(Command Window)中:
1)【上、下鍵】――切換到之前、之后的命令,可以重復(fù)按多次來(lái)達(dá)到你想要的命令 2)clc――清除命令窗口顯示的語(yǔ)句,此命令并不清空當(dāng)前工作區(qū)的變量,僅僅是把屏幕上顯示出來(lái)的語(yǔ)句清除掉
3)clear――這個(gè)才是清空當(dāng)前工作區(qū)的變量命令,常用語(yǔ)句clear all來(lái)完成
4)【Tab】鍵――(在command窗口,輸入一個(gè)命令的前幾個(gè)字符,然后按tab鍵,會(huì)彈出前面含這幾個(gè)字符的所有命令,找到你要的命令,回車,就可以自動(dòng)完成。目前討論結(jié)果是:Matlab6.5版本中,如果候選命令超過(guò)100個(gè),則不顯示。而在Matlab7以后版本中,則沒(méi)有這個(gè)限制,均可正常提示
5)【Ctrl+C】(或【Ctrl+Break】)――在Matlab程序運(yùn)行過(guò)程中,可能由于程序編寫(xiě)的失誤,導(dǎo)致程序不停的運(yùn)行,在命令窗口輸入“Ctrl+C”可以將運(yùn)行的程序停下來(lái),而不需要將整個(gè)Matlab程序關(guān)掉。不過(guò)進(jìn)行此操作的前提是能夠激活切換到命令窗口才行,呵呵。
2.在編輯器(Editor)中: 1)【Tab】(或【Ctrl+]】)――增加縮進(jìn)(對(duì)多行有效)2)【Ctrl+[】--減少縮進(jìn)(對(duì)多行有效)
3)【Ctrl+I】--自動(dòng)縮進(jìn)(即自動(dòng)排版,對(duì)多行有效)4)【Ctrl+R】――注釋(對(duì)多行有效)5)【Ctrl+T】――去掉注釋(對(duì)多行有效)
6)【Ctrl+B】――括號(hào)配對(duì)檢查(對(duì)版本6.5有效,但版本7.0無(wú)效,不知道是取消了還是換了另外的快捷鍵,請(qǐng)大牛們指點(diǎn),其他版本沒(méi)有測(cè)試過(guò))
7)【F12】――設(shè)置或取消斷點(diǎn) 8)【F5】――運(yùn)行程序
其余的例如在Debug狀態(tài)下的快捷鍵可以自己看菜單。
就說(shuō)這么多,通過(guò)這個(gè)小學(xué)期,我覺(jué)得自己真的學(xué)到了很多!
03310901班
王鴻棟 20090286
第四篇:matlab學(xué)習(xí)心得體會(huì)
最近在學(xué)習(xí)matlab,一直不入其法門(mén)。從網(wǎng)上看到了一些大蝦的經(jīng)驗(yàn)心得,感觸頗深,轉(zhuǎn)貼過(guò)來(lái),希望給初學(xué)者有一定的指引。
一)寫(xiě)給學(xué)習(xí)matlab 的新手們 作者:eight(八)來(lái)源振動(dòng)論壇
本人接觸matlab已經(jīng)有5年多的時(shí)間了,一直想寫(xiě)點(diǎn)東西,但是之前不知道放在哪里才能發(fā)揮它的最大作用,直到幾天前碰上了這個(gè)論壇(有點(diǎn)像諸葛亮遇見(jiàn)姜維,哈哈)。
廢話不說(shuō),我想借貴論壇寶地,寫(xiě)一些經(jīng)驗(yàn)給使用matlab的新手們,當(dāng)然了,老大們也可以看看,不嫌棄我寫(xiě)得粗糙的話還可以指點(diǎn)一下,先謝過(guò)了~~~~
首先我想說(shuō)的是,matlab跟其他語(yǔ)言不一樣(我用的比較多的編程語(yǔ)言,除了matlab就應(yīng)該是c或c++了,VB和Delphi也接觸過(guò),我想版面(matlab版)大部分人也差不多),如果你抱著“把其他語(yǔ)言的思想運(yùn)用在matlab里面”的話,那么我想,即使程序運(yùn)行不出錯(cuò),也很難把握matlab的精髓,也就很難發(fā)揮matlab的作用了。所以,如果你是希望matlab作為VC的附屬品,即你不想在matlab上面花太多功夫,只純粹想用matlab來(lái)完成VC做不了或很難做成的任務(wù)的話,那么,這篇文章你也不需要再閱讀下去了;如果你是希望掌握一門(mén)語(yǔ)言、一個(gè)工具,使它更有效為你服務(wù)的話,那么,希望本文對(duì)你有所幫助。
Matlab是一個(gè)基于矩陣運(yùn)算的軟件,這恐怕是眾所周知的事情了,但是,真正在運(yùn)用的時(shí)候(就是在編程的時(shí)候),許多人(特別是初學(xué)者)往往沒(méi)有注意到這個(gè)問(wèn)題,因此,for循環(huán)(包括while循環(huán))滿天飛????..這不僅是暴殄天物(沒(méi)有發(fā)揮matlab所長(zhǎng)),還浪費(fèi)了你寶貴的時(shí)間。對(duì)此,版友MVH在他的“MATLAB 小技巧”一文中也有所涉及,雷同的東西我也就不重復(fù)了,matlab的“幫助”里面也有相關(guān)的指示。我這里想說(shuō)的一點(diǎn)是,初學(xué)者往往在初始化矩陣的時(shí)候注意到這個(gè)問(wèn)題,懂得了使用矩陣而不是循環(huán)來(lái)賦值,但是,在其他環(huán)節(jié)上,就很容易疏忽,或者說(shuō),仍然沒(méi)有擺脫C++的思想。舉個(gè)例子吧,下面的代碼是我的一個(gè)師弟寫(xiě)的,我想他接觸matlab也有2、3年時(shí)間了(在此說(shuō)明一下,接觸2、3年并不是表示每天都會(huì)跟matlab打交道,我本人也不是,只是在一年某幾個(gè)時(shí)間段里面連續(xù)使用),但是仍然會(huì)出現(xiàn)類似的問(wèn)題:
J = 0;lt = size(imf1,2);for(i = 1:lt)if(abs(imf1(i))> 1)J = 1;break end end
上面的代碼實(shí)現(xiàn)了一個(gè)目的――檢查信號(hào)imf1(一個(gè)向量)是否存在絕對(duì)值大于1的點(diǎn),這顯然是基于C++的思想寫(xiě)出來(lái)的。如果在matlab下面,其實(shí)用兩個(gè)語(yǔ)句就足夠了(當(dāng)然,可以合并為一個(gè)):
q = find(imf1>1);J = ~isempty(q);
這樣的修改帶來(lái)的好處是很可觀的。
又如:
for j = 1:num imf1(start1+j)= 2*li1(j+1)imf1(start1+1:start1+num);
因此,如果是新手,可以先用循環(huán)(基于C++的思想)來(lái)編寫(xiě)代碼,然后看看能否用matlab的語(yǔ)言(基于矩陣的思想)來(lái)改進(jìn)。當(dāng)然,這樣做的前提是你對(duì)matlab提供的一些函數(shù)比較熟悉才行,這些函數(shù)在matlab的“幫助”那里搜索“Functions Used in Vectorizing”就可以找到一些,其他的也可以找相關(guān)的書(shū)籍(沒(méi)找到?不可能,電子版總可以下載到的)
對(duì)提高matlab編程能力的方法,我想主要有以下三個(gè): 1.查help 2.多上上論壇,搜索帖子、發(fā)帖子問(wèn)人 3.閱讀別人、特別是牛人的程序
當(dāng)然了,正如所有的程序語(yǔ)言一樣,“3分課本7分上機(jī)”,一定要?jiǎng)邮植判?,不能光看。多想、多思考、多嘗試,才是正路。
最后,整理一下常用的快捷鍵(用【】表示)或命令: 1.在命令窗口(Command Window)中:
1)【上、下鍵】――切換到之前、之后的命令,可以重復(fù)按多次來(lái)達(dá)到你想要的命令
2)clc――清除命令窗口顯示的語(yǔ)句,此命令并不清空當(dāng)前工作區(qū)的變量,僅僅是把屏幕上顯示出來(lái)的語(yǔ)句清除掉
3)clear――這個(gè)才是清空當(dāng)前工作區(qū)的變量命令,常用語(yǔ)句clear all來(lái)完成
4)【Tab】鍵――(轉(zhuǎn)自版友心燈)在matlab@hit.edu.cn看到的:在command窗口,輸入一個(gè)命令的前幾個(gè)字符,然后按tab鍵,會(huì)彈出前面含這幾個(gè)字符的所有命令,找到你要的命令,回車,就可以自動(dòng)完成。目前討論結(jié)果是:matlab6.5版本中,如果候選命令超過(guò)100個(gè),則不顯示。而在matlab7以后版本中,則沒(méi)有這個(gè)限制,均可正常提示 5)【Ctrl+C】(或【Ctrl+Break】)――(轉(zhuǎn)自版友yangjin_ren)在matlab程序運(yùn)行過(guò)程中,可能由于程序編寫(xiě)的失誤,導(dǎo)致程序不停的運(yùn)行,在命令窗口輸入“Ctrl+C”可以將運(yùn)行的程序停下來(lái),而不需要將整個(gè)Matlab程序關(guān)掉。不過(guò)進(jìn)行此操作的前提是能夠激活切換到命令窗口才行,呵呵。2.在編輯器(Editor)中:
1)【Tab】(或【Ctrl+]】)――增加縮進(jìn)(對(duì)多行有效)2)【Ctrl+[】--減少縮進(jìn)(對(duì)多行有效)
3)【Ctrl+I】--自動(dòng)縮進(jìn)(即自動(dòng)排版,對(duì)多行有效)4)【Ctrl+R】――注釋(對(duì)多行有效)5)【Ctrl+T】――去掉注釋(對(duì)多行有效)
6)【Ctrl+B】――括號(hào)配對(duì)檢查(對(duì)版本6.5有效,但版本7.0無(wú)效,不知道是取消了還是換了另外的快捷鍵,請(qǐng)大牛們指點(diǎn),其他版本沒(méi)有測(cè)試過(guò))7)【F12】――設(shè)置或取消斷點(diǎn) 8)【F5】――運(yùn)行程序
其余的例如在Debug狀態(tài)下的快捷鍵就不多說(shuō)了,自己看菜單Debug吧
累了,有時(shí)間再寫(xiě)吧。希望大家多交流~~~~~~
Coming:(以下東西都是一年前做的了,不知道能否記起,呵呵)
1)關(guān)于神經(jīng)網(wǎng)絡(luò)的――調(diào)用matlab的nntool命令后的使用問(wèn)題(我做的時(shí)候沒(méi)有看過(guò)其他書(shū)籍或資料,是自己閉門(mén)造車的結(jié)果,如果寫(xiě)之前發(fā)現(xiàn)其他書(shū)籍有相關(guān)介紹的話就不寫(xiě)了)
2)關(guān)于外部接口的――matlab與C++Builder的接口,想詳細(xì)介紹如何利用matcom 4.5在C++Builder中調(diào)用matlab的代碼以及matcom的一些技巧。由于我不是搞項(xiàng)目開(kāi)發(fā)的(搞科研、搞課題的),所以對(duì)VC不熟悉,大學(xué)的時(shí)候?qū)W過(guò)一點(diǎn),不過(guò)我想對(duì)于搞科研來(lái)說(shuō)C++Builder就足夠了,免去很多麻煩,Builder在界面設(shè)計(jì)和數(shù)據(jù)庫(kù)連接上面(我只接觸過(guò)這兩方面)還是做得不錯(cuò)的。同樣,如果發(fā)現(xiàn)其他書(shū)籍上有類似的東西就不寫(xiě)了 3)GUI方面也寫(xiě)寫(xiě)吧,只是一點(diǎn)點(diǎn)心得或者體會(huì),呵呵,這個(gè)相對(duì)簡(jiǎn)單些,篇幅相對(duì)要少些。
真正接觸matlab一年左右,我很喜歡上了matlab的簡(jiǎn)單的語(yǔ)法,易于繪制圖形,gui編
程也非常容易, 并且功能強(qiáng)大的開(kāi)放式的toolbox。因此,盡管我一直沒(méi)有這方面的應(yīng)用,但是我還是對(duì)
它非常感興趣?,F(xiàn)
將個(gè)人的matlab的一點(diǎn)學(xué)習(xí)體會(huì)列在這里,愿能夠?qū)Υ蠹?特別是初學(xué)者)起到一點(diǎn)兒微薄 的作用也好。
1.help:最有效的命令(參閱了瀚海mathtools的 starrynight網(wǎng)友的文章)
其實(shí),可以這樣說(shuō)吧,如果離開(kāi)matlab軟件,我想我自己是基本上什么都不會(huì)。一遇
到什么問(wèn)題,通常
我的第一反應(yīng)是:help,就先說(shuō)說(shuō)自己對(duì)help的一些常用方法吧。1)命令窗口直接敲“help”,你就可以得到本地機(jī)器上matlab的基本的幫助信息。
2)對(duì)于某些不是很明確的命令,只知道大體所屬范圍,譬如說(shuō)某個(gè)工具箱,直接在
命令窗口中敲入
help toolboxname,一幫可以得到本工具箱有關(guān)的信息:版本號(hào),函數(shù)名等。3)知道函數(shù)名,直接用help funname就可以得到相應(yīng)的幫助信息。
2.see also:不可小瞧的關(guān)聯(lián)
在用help命令的時(shí)候,可能因?yàn)槲覀冮_(kāi)始估計(jì)的方向不一定完全正確,在列出的幫
助信息中沒(méi)有直接
給出的我們要找的東西,但是我們一定不要忽略了在幫助的最后列出的see also。譬如:曾經(jīng)遇到一個(gè)畫(huà)橢球的問(wèn)題。剛開(kāi)始我以為這個(gè)命令函數(shù)應(yīng)該在graph3d中給
出的(順帶提一句,只用help的時(shí)候我們就可以看到matlabgraph3dGenerate ellipsoid。
3.lookfor: matlab中的google
當(dāng)我們很多什么頭緒都沒(méi)有的時(shí)候,我們可以求助于它,往往會(huì)收到意想不到的效果。
譬如:曾經(jīng)在gui編程的時(shí)候,遇到過(guò)這樣一個(gè)問(wèn)題:想拖動(dòng)鼠標(biāo)時(shí),要出現(xiàn)一個(gè)方
框,就像你在桌面
上拖動(dòng)鼠標(biāo),會(huì)出現(xiàn)虛線框一樣。當(dāng)初我也剛開(kāi)始一定都不知道該查找什么東西,后來(lái)
想起用它了。于是乎,>> lookfor Rectangle(很不好意思,當(dāng)時(shí)這個(gè)矩形我還是在金山詞霸中搞定的-_-)
。果然,在其中就找到
這樣一條信息:GETRECT Select rectangle with mouse.^_^
4.get,set: GUI object 屬性的幫手
在GUI編程中,我們可能有時(shí)候想改變某些object的屬性,或者想讓它安裝自己的
想法實(shí)現(xiàn),但是我們又不
記得這些object的屬性,更別提怎么設(shè)置他們的值了。這時(shí),可以用 get(handles)得
到此對(duì)象的所有的屬性
及其當(dāng)前值。用set(handles)可以得到對(duì)象所有可以設(shè)置的屬性及其可能的取值。找
到我們需要的屬性名字和
可能的取值之后,就意義用 get(handles,‘propertyname’)取得此屬性的值,用set(handles,‘propertyname’,values)設(shè)置此對(duì)象此屬性的值。
5.Edit: 查看m源文件的助手
在應(yīng)用matlab過(guò)程中,可能我們想看看它的m源文件,當(dāng)然用editor定位打開(kāi)也行,但是我經(jīng)常采用的式直接
在command窗口中用edit funname.m,就省去了定位的麻煩。
6.其他常用命令:which,what等
which:定位指定的函數(shù)和文件,最好帶上參數(shù)-all,以便顯示更加多的信息 what: 獲得指定目錄的m文件,mex文件以及mat文件名列表
7.各個(gè)高校bbs的mathtools版
誰(shuí)都不可能什么都懂,但是永遠(yuǎn)記住這樣一句話:Two heads are better than one.多向他人請(qǐng)教,多相
互討論,這不只是在于解決matlab的問(wèn)題上。我最經(jīng)常去的bbs有:.瀚海星云(http://fbbs.ustc.edu.cn/的mathtools版
.水木清華(http://文宇工作室
5)http://sh.netsh.com/bbs/5186/ matlab語(yǔ)言與應(yīng)用,薛定宇的一個(gè)論壇 6)http://004km.cn/resource/newlk.asp中國(guó)學(xué)術(shù)交流園地,除了matla b有關(guān)外,還有很多其他的 專業(yè)的文章。
最后一條,要大膽的去試,哪怕只有一丁點(diǎn)兒可能。
譬如,早些時(shí)候,有朋友問(wèn)我:我用什么命令可以查找所建立網(wǎng)絡(luò)的屬性的含義,比如說(shuō):我建立網(wǎng)絡(luò)net=newff(minmax(p),[3,1], {'tansig','purelin'},'traingda');想看看net.trainParam。lr_inc屬性是啥含義用什
么命令查看呢?
當(dāng)時(shí),我根本連練習(xí)都沒(méi)有用matlab的神經(jīng)網(wǎng)絡(luò)工具箱的東西練習(xí)過(guò)。我help newff也沒(méi)有結(jié)果,后來(lái)實(shí)在沒(méi)有辦法,就試著help參數(shù)值traingda,沒(méi)有想到還居然真的就找到答案了。
還有,曾經(jīng)有朋友想把waitbar的默認(rèn)顏色的紅色改掉,我用help 沒(méi)有發(fā)現(xiàn)可以改
變其填充色的property,后來(lái)
我看了waitbar.m,發(fā)現(xiàn)其填充色本來(lái)就不試一個(gè)可變參數(shù),但是既然發(fā)現(xiàn)了是什么地方,就可以自己改變的,這都得益于matlab 的開(kāi)放性。這也為我們提供了很大的靈活性(在他的基礎(chǔ)上,我們可以做很少的變換,就自己寫(xiě)一個(gè)填充色可以以屬性輸入而改變的waitbar的)
第五篇:matlab學(xué)習(xí)心得體會(huì)
數(shù)值運(yùn)算
1.cd顯示當(dāng)前的工作目錄,dir列出當(dāng)前目錄下的子文件或子目錄,home將光標(biāo)移動(dòng)到左上角,type列出所有的文件內(nèi)容。
2.特殊矩陣的生成:
3.linspace生成矩陣:
(1)linspace(a,b):生成100個(gè)數(shù)據(jù)的向量;
(2)linspace(a,b,n):生成n個(gè)元素的向量,線性分布; 4.logspace生成矩陣:
(1)logspace(a,b)生成50個(gè)對(duì)數(shù)元素的向量,x(1)=10^a,x(50)=10^b;
(2)logspace(a,b,n):同linspace的用法; 5.指數(shù)與對(duì)數(shù)函數(shù):
6.復(fù)數(shù)函數(shù):
7.基本數(shù)組函數(shù):
8.矩陣變換函數(shù):
9.數(shù)據(jù)的輸出格式由format命令來(lái)控制,但是只是影響其顯示的結(jié)果,對(duì)計(jì)算結(jié)果或者是存儲(chǔ)沒(méi)有影響:
10.常用的變量和常量:
eps:浮點(diǎn)運(yùn)算的精確程度,是MATLAB中的計(jì)算誤差;
realmax:計(jì)算機(jī)能夠顯示的最大的浮點(diǎn)數(shù);realmin:同其相對(duì)應(yīng); 11.一些特殊的標(biāo)識(shí)符:
12.bar條形圖:
13.幾種特殊的圖形顏色矩陣:
14.照相制圖的函數(shù):
15.axis ij:設(shè)置坐標(biāo)為矩陣格式,坐標(biāo)原點(diǎn)在左上角;axis為默認(rèn)值; 16.坐標(biāo)設(shè)置命令:
17.光源設(shè)置:
18.字符處理函數(shù):
19.矩陣分解:
20.矩陣函數(shù):
21.