第一篇:Matlab與Simulink系統(tǒng)仿真學(xué)習(xí)心得 馬楠
Matlab與Simulink系統(tǒng)仿真學(xué)習(xí)心得
班級:07610
學(xué)號:072019
姓名:馬楠
第一部分:Matlab學(xué)習(xí)心得以及實踐
Matlab是迄今為止我所見到過的功能最為強大實用范圍寬廣的軟件。的確Matlab適用于教學(xué),航天,網(wǎng)絡(luò)仿真等等。而且提供了很多功能強大的工具箱,并且最為突出的是它自帶的很全面細(xì)致的幫助文檔,無論你是初學(xué)者還是老手都會驚嘆于此,你也不必去花很多時間去熟悉那些繁雜的命令,并且很容易通過這些幫助文檔得到關(guān)于這些函數(shù)最精準(zhǔn)的用法。
Matlab是一個建立在矩陣操作上的軟件,我想要想真正懂得并理解Matlab與一般的語言比如C或者java的區(qū)別,那么你就應(yīng)該真正理解矩陣的思想。而且要熟悉Matlab對矩陣存儲的方式(在下文中我會詳細(xì)解釋與之相關(guān)的內(nèi)容),這樣對提高你的代碼執(zhí)行效率與易懂性都有很大的幫助。
但是Matlab究竟應(yīng)該怎么定位呢?一個編程軟件,一個數(shù)學(xué)工具,一個工具箱,一個開發(fā)引擎,一個仿真工具,一個虛擬現(xiàn)實軟件…… 的確要精準(zhǔn)的說出Matlab的作用很難,或許去定義這個東西到底是用來干什么的并不重要,It is just a tool。
關(guān)于Matlab的學(xué)習(xí)方法,我想與別的語言有很大不同,對于匯編或者C,我們應(yīng)當(dāng)很注重底層的一些操作,比如?;蛘哧犃写鎯?shù)據(jù)的方式,int或者double類型轉(zhuǎn)換的時候產(chǎn)生的數(shù)據(jù)丟失,或者指針方面很頭疼的一些東西,但是對于Matlab你根本不必去注重這些東西,也不必去清除的記得那個函數(shù)的具體調(diào)用方式,那個函數(shù)的內(nèi)容與結(jié)構(gòu)等等。你需要的只是相當(dāng)用一個筆記本寫下你一步一步實現(xiàn)目標(biāo)的步驟而已。一種草稿紙式的語言。你所學(xué)的東西很大部分都是為你要做的目標(biāo)來服務(wù)的,也許這就是當(dāng)初面向?qū)ο笫秸Z言產(chǎn)生的原因,但是Matlab就是這種語言的一個代表。
好了,就說到這里了,接下來是我自己學(xué)習(xí)中對Matlab的一些應(yīng)用中所遇到的問題以及思考方式和解決辦法。離散信號卷積:
N1=input('N1=');%輸入N1 N2=input('N2=');%輸入N2 k1=0:(N1-1);%定義序列f1的對應(yīng)序號向量 k2=0:(N2-1);% 序列f2的對應(yīng)序號向量 f1=ones(1,N1);%f1為階躍序列 f2=0.5*k2;%f2為斜坡序列
[f,k]=dconv(f1,f2,k1,k2)%求離散卷積
其中dconv函數(shù)的代碼為:
function [f,k]=dconv(f1,f2,k1,k2)
%The function of compute f=f1*f2 % f: 卷積和序列f(k)對應(yīng)的非零樣值向量 % k:
序列f(k)的對應(yīng)序號向量 % f1: 序列f1(k)非零樣值向量 % f2: 序列f2(k)的非零樣值向量 % k1: 序列f1(k)的對應(yīng)序號向量 % k2: 序列f2(k)的對應(yīng)序號向量 f=conv(f1,f2)
%計算序列f1與f2的卷積和f k0=k1(1)+k2(1);
%計算序列f非零樣值的起點位置 k3=length(f1)+length(f2)-2;
%計算卷積和f的非零樣值的寬度
k=k0:k0+k3
%確定卷積和f非零樣值的序號向量 subplot(2,2,1)stem(k1,f1)title('f1(k)')xlabel('k')ylabel('f1(k)')subplot(2,2,2)
%在子圖1繪序列f1(k)時域波形圖
stem(k2,f2)
%在圖2繪序列f2(k)時波形圖 title('f2(k)')xlabel('k')ylabel('f2(k)')subplot(2,2,3)stem(k,f);
%在子圖3繪序列f(k)的波形圖 title('f(k)f1(k)與f2(k)的卷積和f(k)')xlabel('k')ylabel('f(k)')h=get(gca,'position');
h(3)=2.5*h(3);set(gca,'position',h)%將第三個子圖的橫坐標(biāo)范圍擴為原來的2.5倍一次物理實驗中的數(shù)據(jù)處理,關(guān)于非線性電阻。
x=[12.042 11.844 11.644 11.444 11.244 11.043 10.843 10.645 10.447 10.240 10.054 9.843 9.640 9.447 8.950 8.448 7.946 7.441 6.940 6.444 5.942 5.446 4.946 4.445 3.944 3.447 2.942 2.442 2.246 2.045 1.846 1.643 1.464 1.252 1.038 0.849 0.642 0.448 0.208 0 ];y=[0.601 0.915 1.349 1.742 2.152 2.572 2.994 3.414 3.840 4.285 4.678 4.612 4.526 4.447 4.246 4.043 3.846 3.635 3.433 3.232 3.028 2.827 2.625 2.442 2.220 2.018 1.814 1.614 1.535 1.455 1.376 1.235 1.101 0.950 0.791 0.642 0.491 0.341 0.158 0.001]
p1=polyfit(x(1:11),y(1:11),1);p2=polyfit(x(11:31),y(11:31),1);p3=polyfit(x(31:end),y(31:end),1);Y1=vpa(poly2sym(p1,'x'),6)Y2=vpa(poly2sym(p2,'x'),6)Y3=vpa(poly2sym(p3,'x'),6)
x1=min(x(1:11)):0.1:max(x(1:11));x2=min(x(11:31)):0.1:max(x(11:31));x3=min(x(31:end)):0.1:max(x(31:end));y1=polyval(p1,x1);y2=polyval(p2,x2);y3=polyval(p3,x3);
plot(x,y,'o',x1,y1,x2,y2,x3,y3);xlabel('電壓值U/v');ylabel('電流值I/mA');title('非線性電阻伏安特性曲線');grid on 54.543.532.521.510.5002468101214
3:三維立體圖形燈光效果 [x,y]=meshgrid(-8:0.5:8);R=sqrt(x.^2+y.^2)+eps;z=sin(R)./R;surf(x,y,z,'FaceColor','interp','EdgeColor','none','FaceLighting','phong');axis tight;daspect([5 5 1]);camlight left view(-50,30)
10.80.60.40.204-0.2-8-6-4-202468-8-6-4-20268
4:地形模擬:
A=[ 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 20 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2 19 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2 18 0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2 17 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4 16 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4 15 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5 14 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3 13 0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.8 0.4 12 0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3 11 0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5 10 0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8 9 0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9 8 0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 1 0.7 7 0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6 6 0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4 5 0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3 4 0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4 3 0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4 2 0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3 1 0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 0.2 0 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.3];z=A(2:end,2:end)[x,y]=meshgrid(0:20,20:-1:0);surf(x,y,z)xlabel('x')[X,Y]=meshgrid(0:0.3:20,20:-0.3:0);Z=interp2(x,y,z,X,Y,'spline')figure surf(X,Y,Z)1.41.210.80.60.40.2020******161820x
1.41.210.80.60.40.20-0.220******161820
第二部分:Simulink學(xué)習(xí)心得以及實踐
Simulink是Matlab最重要的組件之一,它提供一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境。在該環(huán)境中,無需大量書寫程序,而只需要通過簡單直觀的鼠標(biāo)操作,就可構(gòu)造出復(fù)雜的系統(tǒng)。Simulink具有適應(yīng)面廣、結(jié)構(gòu)和流程清晰及仿真精細(xì)、貼近實際、效率高、靈活等優(yōu)點,并基于以上優(yōu)點Simulink已被廣泛應(yīng)用于控制理論和數(shù)字信號處理的復(fù)雜仿真和設(shè)計。同時有大量的第三方軟件和硬件可應(yīng)用于或被要求應(yīng)用于Simulink。
最開始的仿真是沒有圖形化輸入的,所謂模型化圖形輸入是指SIMULINK提供了一些按功能分類的基本的系統(tǒng)模塊,用戶只需要知道這些模塊的輸入輸出及模塊的功能,而不必考察模塊內(nèi)部是如何實現(xiàn)的,通過對這些基本模塊的調(diào)用,再將它們連接起來就可以構(gòu)成所需要的系統(tǒng)模型(以.mdl文件進行存取),進而進行仿真與分析。
現(xiàn)在來想其實要用Simulink去仿真一個系統(tǒng)不是很麻煩,只是實現(xiàn)一些拖拽或者參數(shù)設(shè)置什么的,但是要真正的去設(shè)計完善一個系統(tǒng)的確需要很多知識以及精力。我們必須了解這個系統(tǒng)的每一個步驟以及需要什么樣的組件與之匹配。而且在仿真出現(xiàn)錯誤之后去分析也是很麻煩的一件事情,我們必須有對系統(tǒng)詳細(xì)的分析和充分了解以及對Simulink每個組件充分的了解才能真正找到錯誤所在并且修正。所以學(xué)好計算機仿真重在理論知識。
接下來是一些自己做的Simulink仿真。
1:階躍信號的積分 仿真圖
仿真結(jié)果:
房屋產(chǎn)熱的一個實例
該問題是模擬一個戶外條件下一所房屋能夠產(chǎn)生的熱量的例子
這是仿真結(jié)果圖
第二篇:Matlab與Simulink仿真學(xué)習(xí)心得
Matlab與Simulink仿真學(xué)習(xí)心得
班級:07610 學(xué)號:072016 姓名:呂天雄
一 Matlab學(xué)習(xí)心得體會與編程實踐
<1>學(xué)習(xí)Matlab的心得體會
真正開始接觸Matlab是大二上就開始了,到現(xiàn)在已經(jīng)一年多了,在此之間,Matlab的確為我提供了很多便利。Matlab的確不愧成為是草稿紙上的語言。我們不必去為很簡單的顯示效果圖形去找一些什么其他軟件或者研究比較復(fù)雜的計算機圖形學(xué),一個plot或者別的函數(shù)往往就可以得到很滿意的效果。
其實最初開始學(xué)習(xí)matlab的時候感覺這個東西和C沒什么兩樣,但是后來具體到一些 東西,比如信號處理和數(shù)學(xué)建模上以后才感覺到使用matlab編寫程序去驗證結(jié)果比C要節(jié) 省很多時間,而且matlab寫東西基本都是按照自己的思路平鋪直敘很少去考慮什么函數(shù)的 嵌套調(diào)用或者指針等等很頭疼的東西。
關(guān)于matlab的學(xué)習(xí),我感覺其實百度和matlab自帶的help基本能夠解決絕大數(shù)問題,而且一些比較好的論壇比如004km.cn都會為你產(chǎn)生很大的幫助,關(guān)鍵是在于多動手實踐,多思考。但是matlab畢竟只是一個工具,原理和一些基本的編程素質(zhì)還是必須有的,否則matlab最多也只能是驗證一些別人的東西而已,根本幫不上什么忙的。
<2>遇到的一些問題的思考方式與解決辦法
最開始用matlab的時候是在大物實驗,實驗要求去根據(jù)測量得到的數(shù)據(jù)作出圖。但是 手動用鉛筆去畫確實很麻煩,所以用matlab確實可以省去很大的麻煩。但是第一次遇到問 的時候是有關(guān)極化坐標(biāo)下的曲線擬合。
首先是一個物理實驗的問題;在做一個關(guān)于光的偏振的實驗的時候,最后的結(jié)果要在一個極化坐標(biāo)下顯示出來;因為數(shù)據(jù)是離散的,所以顯示出來的圖像是一個折來折去的一個東東; 然后很自然的想法是對這個曲線進行插值處理。
但是極化坐標(biāo)下MATLAB并未提供插值處理的函數(shù),interp1這個函數(shù)只能在笛卡爾坐標(biāo)系,也就是直角坐標(biāo)系下使用。
然后就想到把極坐標(biāo)的數(shù)據(jù)轉(zhuǎn)換的直角坐標(biāo)系下,pol2cart可以實現(xiàn)這個想法,但是隨后而來,也就是最后導(dǎo)致整個問題失敗的關(guān)鍵也在這里。
pol2cart以后產(chǎn)生的一串?dāng)?shù)據(jù)中出現(xiàn)了重復(fù)的數(shù)據(jù),那么interp1這個東西也就無能為力了,因為interp1不能處理一串?dāng)?shù)據(jù)中有重復(fù)出現(xiàn)的情況。最后的處理辦法是把這些數(shù)據(jù)c os,sin這些東西變換一下后,使其大致規(guī)則,然后再用polar畫出極坐標(biāo)下的圖形。
接下來這個問題就有點超過我的范圍了,可能會有點敘述不清楚。問題可以概要為:人臉網(wǎng)格插值。
這是一個用三角形網(wǎng)格表示的一個人臉模型。需要通過插值使其變得光滑,當(dāng)然問題的復(fù)雜之處在于,插值會改變原本的網(wǎng)格結(jié)構(gòu)。
對于這個問題許多人都給出了解決的辦法,當(dāng)然是一些關(guān)于人臉識別技術(shù)和運動圖像處理的范疇之內(nèi)的。
主要有兩種,第一種是face—ls算法。這種算法是基于RBF(徑向插值函數(shù))和loop細(xì)分原則的一種算法,當(dāng)然其精確程度比較差點。但是速度挺好。原理是:基于網(wǎng)格上的點,產(chǎn)生出頂點的迭代函數(shù),從而產(chǎn)生出新的定點,進行細(xì)化。然后進行插值。也就是引進新的頂點。分為兩個過程內(nèi)部插值和邊緣插值。具體可以去看蘭州大學(xué)信息工程學(xué)院的學(xué)報。
第二種也就是基本的老辦法RBF。首先解釋一下什么叫做徑向插值 徑向基函數(shù)
主要是考慮多維空間的數(shù)據(jù)插值問題,徑向基函數(shù)在三維圖形的變形中常常被采用,用其來變分三維人臉的時候還應(yīng)結(jié)合人臉的固有特征。確定該方法來實現(xiàn)三維人臉變形是可行的,但要構(gòu)造好的基函數(shù),以及解這些高維方程的解仍是難點。插值方法:
假設(shè)大多數(shù)人臉的形狀都可以由一個拓?fù)湓妥兓脕?,那么,通過調(diào)整一個一般模型的構(gòu)造參數(shù)可以建立不同的面部模型。但是,這種參數(shù)模型僅僅局限于那些構(gòu)造參數(shù)已知的情況,并且對特定人臉參數(shù)的調(diào)整非常困難。在離散數(shù)據(jù)的多變量插值問題方面,徑向基函數(shù)(radial basis function,RBF)插值方法是一個行之有效的工具,所以也適用于類似人臉這樣高維曲面的近似或平滑插值?,F(xiàn)有的許多方法使用了基于RBF的插值技術(shù),將一般人臉網(wǎng)格變化到特定人臉的形狀。這種方法的優(yōu)點在于:(1)通過插值可以得到丟失的數(shù)據(jù)點,所以源網(wǎng)格和目標(biāo)網(wǎng)格不需要相同數(shù)目的結(jié)點;(2)如果選擇了合適的匹配點,數(shù)學(xué)上可以保證能夠?qū)⒃淳W(wǎng)格變形到目標(biāo)網(wǎng)格。
當(dāng)然我也不是很懂,只是理解了部分。這種方法的關(guān)鍵是找到一個很好的核函數(shù)來計算出新的頂點。
最后問題解決的方式是查著了一些圖書館的學(xué)報。然后而且在網(wǎng)上找到了部分代碼。然后做出來的。這是我校大四一個同學(xué)畢設(shè)中的一個東西。
其實這個事件最好的解決辦法是在3D-MAX中,不過因為沒能找到MATLAB與3D-MAX是怎么接口的,所以作罷了。
第三次遇到的問題是我在數(shù)學(xué)建模課上遇到的一個關(guān)于矩陣LU分解的問題:
Matlab作出的結(jié)果和手算的結(jié)果竟然不一樣。
10??1????1???1?
U=?1? ?一個矩陣 A=? 經(jīng)過三角分解為L=101????????11?因為1/?為一個極大數(shù) 則1—1/?可以看成—1/?;
設(shè)?=0.***000000001%10的負(fù)24次方
從而L*U=則最后一位1沒有了 變成了0
其中L=
U=Matlab 程序為
epusino=0.***000000001;U=[epusino 1;0-1/epusino];L=[1 0;1/epusino 1];L*U ans =
0.***
1.***
1.***
0 而直接用lu函數(shù)對矩陣A分解的結(jié)果為
A=[epusino 1;1 1] A =
0.0000
1.0000
1.0000
1.0000
>> [L,U]=lu(A)L =
0.0000
1.0000
1.0000
0
U =
0 我們老師當(dāng)時的解釋是這是由于我們所用matlab是破解版的緣故,破解版的計算精度 沒正版的高所以導(dǎo)致運算結(jié)果的錯誤,后來我看了一些LU這個函數(shù)的help文檔 psychologically lower triangular matrix"(i.e.a product of lower triangular and permutation matrices)in L。翻譯過來是L是一個心理上的下三角矩陣,其實是下三角矩陣和置換矩陣也就是最后的結(jié)論。P*A = L*U.。由此可見這并不是什么精度的問題導(dǎo)致的結(jié)果只是LU分解的矩陣意義和書本上的不同而已。
以下是我自己寫的一些程序的代碼
1:網(wǎng)絡(luò)隨機拓?fù)鋱D
目的是要生成一個度數(shù)隨機、權(quán)值隨機的拓?fù)鋱D。首先的理解是利用鄰接矩陣,先隨機生成一個矩陣,該矩陣為一個對稱矩陣。然后畫出這個矩陣就行了。
隨機拓?fù)鋱D10026516398191 ***0430 ***065
%產(chǎn)生數(shù)組A用來存放表示兩點之間權(quán)值的矩陣A,也就是臨接矩陣,那么兩點之間權(quán)值不為零元素的個數(shù)即為該點的度數(shù)
DEF=5;%設(shè)定一個東東 方便改變隨機點的個數(shù) A=rand(DEF,DEF);%產(chǎn)生DEF*DEF的隨機矩陣 for i=1:DEF A(i,i)=0%將對角線上的數(shù)置為0 end A=10*A;A=floor(A);%向下去整 for i=1:DEF for j=1:i A(j,i)=A(i,j)%將A矩陣變?yōu)橐粋€上三角或者下三角矩陣 end end x=100*rand(1,DEF);y=100*rand(1,DEF);%產(chǎn)生10個隨機的點 plot(x,y,'r+');
for i=1:DEF a=find(A(i,:)>0)%將A矩陣每行大于0的數(shù)的在該行的地址找出來放在a中
for j=1:length(a)
c=num2str(A(i,j));%將A中的權(quán)值轉(zhuǎn)化為字符型
if c~='0'%不顯示為0的值 因為A矩陣為零代表兩點不相連 text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',18);%將權(quán)值顯示在兩點連線中間 end hold on;
line([x(i)x(a(j))],[y(i)y(a(j))]);%連線 end end
title('隨機拓?fù)鋱D');e=num2str(DEF);legend(e);%左上角顯示節(jié)點的個數(shù) for m=1:DEF A(m,m)=m;f=num2str(A(m,m));hold on;text((x(m)+x(m))/2,(y(m)+y(m))/2,f,'Fontsize',18);%將權(quán)值顯示在兩點連線中間 end 接下來是一個在信息安全課上寫的一個關(guān)于256色圖分層的程序,一副圖像有m*n個像素然后每個像素是一個8bit的二進制數(shù)據(jù)換算為十進制是0-255之間。要做的就是把每bit的信息提取出來。
I=imread('bupt副本.bmp');%讀入源圖像
I=double(I);%將圖像轉(zhuǎn)換為double類型便于MATLAB中的計算 %確定圖像的長寬 M=size(I,1);%長 N=size(I,2);%寬 l=M*N;%圖像長寬之積 for n=1:8;%剔除每層 for i=1:M
for j=1:N
B=numdec2bin(I(i,j),8);%先將每個像素轉(zhuǎn)換為8位2進制序列
B(n)=[];%刪除相應(yīng)位置的元素
y(i,j)=numbin2dec(B);%將剩下的7個元素轉(zhuǎn)換為10進制數(shù)放入y矩陣中
end end
y=uint8(y);%將10進制的矩陣轉(zhuǎn)換為無符號整形
subplot(4,2,9-n);%顯示n個圖像,每層是相應(yīng)的剔除該層的結(jié)果
imshow(y);%顯示這個圖像
title(strcat('去除第',num2str(9-n),'層后的結(jié)果'));%顯示標(biāo)題 end
附帶的兩個函數(shù):
function y=numdec2bin(x,n);%從函數(shù)將十進制數(shù)x轉(zhuǎn)化為n位二進制 y=zeros(1,n);a=x;i=n;while a>0 y(i)=mod(a,2);a=floor(a/2);i=i-1;end function y=numbin2dec(x)%將二進制數(shù)轉(zhuǎn)換為十進制數(shù) a=0;lx=length(x);for i=1:lx a=a+x(i)*2^(lx-i);end y=a;
去除第1層后的結(jié)果去除第2層后的結(jié)果去除第3層后的結(jié)果去除第4層后的結(jié)果去除第5層后的結(jié)果去除第6層后的結(jié)果去除第7層后的結(jié)果去除第8層后的結(jié)果
Matlab的RGB轉(zhuǎn)換為YCbCr之后轉(zhuǎn)換回來和原圖不符
這個是做JPEG圖像壓縮的時候遇到的一個問題,當(dāng)時的代碼是用C寫的但是結(jié)果不對,后來想到用matlab進行驗證結(jié)果發(fā)現(xiàn)通過公式轉(zhuǎn)換得到的圖是錯的。
原理:BMP圖像壓縮為JPEG的第一步是將RGB色彩空間通過這個公式映射到Y(jié)CbCr空間上。
Y=0.299 R + 0.587 G + 0.114 B Cb =0.3313G + 0.5 B + 128 Cr = 0.5 R0.0813 B + 128 然后再進行量化,DCT,編碼等等步驟。JPEG解壓時需要將YCbCr空間的圖像又轉(zhuǎn)化回來到RGB上。
R = Y + 1.402(Cr0.34414(Cb-128)128)
B = Y + 1.772(Cb-128)
但是通過書上給的公式和網(wǎng)上大部分公式卻發(fā)現(xiàn)根本轉(zhuǎn)化不會來。下面是寫的程序代碼以及測試得到的結(jié)果圖像。
clc,clear;Source=imread('hl.jpg');%讀入原始RGB圖像
figure(1);subplot(1,2,1);imshow(Source):title('original image');%顯示圖像 [r c d]=size(Source);%計算圖像大小 %------計算紅色分量并顯示分解圖------% R(:,:,1)=Source(:,:,1);R(:,:,2)=zeros(r,c);R(:,:,3)=zeros(r,c);R=uint8(R);whos;figure(2);subplot(1,3,1);imshow(R)title('Red Component');%-------計算綠色分量并顯示分解圖-------% G(:,:,2)=Source(:,:,2);G(:,:,1)=zeros(r,c);G(:,:,3)=zeros(r,c);G=uint8(G);figure(2);subplot(1,3,2);imshow(G)title('Green Component');%--------計算藍色分量并顯示分解圖-------% B(:,:,3)=Source(:,:,3);B(:,:,1)=zeros(r,c);B(:,:,2)=zeros(r,c);B=uint8(B);figure(2);subplot(1,3,3)imshow(B)title('Blue Component');%------------合成-------------% Comp(:,:,1)=R(:,:,1);Comp(:,:,2)=G(:,:,2);Comp(:,:,3)=B(:,:,3);figure(1);subplot(1,2,2);imshow(Comp):title('composition image');Y=0.229*R+0.587*G+0.114*B;Cb=0.5*B-0.1687*R-0.3313*G+128;Cr=0.5*R-0.4187*G-0.0813*B+128;red=Y+1.402*(Cr-128);green=Y-0.34414*(Cb-128)-0.71414*(Cr-128);blue=Y+1.772*(Cb-128);Comp2(:,:,1)=red(:,:,1);Comp2(:,:,2)=green(:,:,2);Comp2(:,:,3)=blue(:,:,3);figure(3);imshow(Comp2);title('RGB轉(zhuǎn)換為YCrCb后又轉(zhuǎn)換為RGB的圖像');RD=R(:,:,1)-red(:,:,1);GD=G(:,:,2)-green(:,:,2);BD=B(:,:,3)-blue(:,:,3);figure(4);subplot(1,3,1);imshow(RD);title('紅色分量差異');subplot(1,3,2);imshow(GD);title('綠色分量差異');subplot(1,3,3);imshow(BD);title('藍色分量差異');
然而可以通過figure(4)的圖像清楚看到R 和G分量轉(zhuǎn)換后恢復(fù) 與以前的差別很大。而且看了一下matlab自帶的rgb2ycbcr和ycbcr2rgb并且用了這兩個函數(shù)測試后圖像是一樣的。很是不解
實驗得到的圖為: original imagecomposition image
將源圖像分為RGB三個部分。
Red ComponentGreen ComponentBlue Component
將源圖像的RGB分量轉(zhuǎn)換到Y(jié)CbCr上后又轉(zhuǎn)化為RGB得到的三個分量差異的圖。
紅色分量差異綠色分量差異藍色分量差異 公式轉(zhuǎn)換的y分量公式轉(zhuǎn)換的cb分量公式轉(zhuǎn)換的Cr分量matlab函數(shù)轉(zhuǎn)換的y分量matlab函數(shù)轉(zhuǎn)換的Cb分量matlab函數(shù)轉(zhuǎn)換的Cr分量
從最后的結(jié)果可以看出原圖轉(zhuǎn)換到Y(jié)CbCr空間之后又轉(zhuǎn)化回來得到的圖像與原圖不符….RGB轉(zhuǎn)換為YCrCb后又轉(zhuǎn)換為RGB的圖像
以上只是我自己用Matlab做過的部分問題,還有一些比如場聲源定位Music算法仿真,DES加密算法。神經(jīng)網(wǎng)絡(luò)濾波器等等,鑒于代碼量太大,就不再敖述。二 Simulink學(xué)習(xí)心得與編程實踐
SIMILINK模塊庫按功能進行分類,包括以下8類子庫: Continuous(連續(xù)模塊)Discrete(離散模塊)
Function&Tables(函數(shù)和平臺模塊)Math(數(shù)學(xué)模塊)
Nonlinear(非線性模塊)
Signals&Systems(信號和系統(tǒng)模塊)Sinks(接收器模塊)Sources(輸入源模塊)
對于simulink來說其實沒什么好說的,需要什么就把什么拖到Model里面,連線之后設(shè)定參數(shù)。不是很麻煩的。但是重要的是對于系統(tǒng)的設(shè)計與仿真思想才是最重要的。而且里面的S-Function也是比較好的一個設(shè)計,用S-Function可以自定義一些組件,使自己的仿真看上去更加清晰與精簡。
Simulink的工作方式:
(1)模塊內(nèi)的參數(shù)值首先會送到Matlab中進行計算,得到的參數(shù)值會用來當(dāng)做以后需要調(diào)用的參數(shù)。
(2)模型系統(tǒng)中的各個層級將被平展開來,每一個子系統(tǒng)將被相應(yīng)的模塊所代替。(3)模塊按被處理的順序排列,此時代數(shù)回路結(jié)構(gòu)也被檢查出來,此種排列產(chǎn)生一個列表,以確保具有代數(shù)回路的模塊驅(qū)動輸入的模塊被更新后才更新。
(4)檢查塊之間的鏈接,是否每一個塊的輸出端口與它所連接的模塊輸入端口有相同的信號寬度。
現(xiàn)在可以準(zhǔn)備執(zhí)行仿真操作,仿真時使用數(shù)值迭代求的的結(jié)果,每種數(shù)值積分模型提供的連續(xù)狀態(tài)的微分能力。
Simulink中的模型都是分級的,因此可以通過自上而下或者自下而上的方式建立模型。定義了一個模型以后,就可以通過Simulink的菜單或者在Matlab的Command中輸入命令進行仿真。
關(guān)于學(xué)習(xí)的心得就寫到這里了,接下來是一些自己做的仿真。
1:觀察一個信號與積分之后的區(qū)別,目的是了解Scope的功能和用法。
仿真結(jié)果,左邊為原始信號,右邊為積分后的信號。
用XYGraph看到的對比
Rossler吸引子產(chǎn)生仿真:
Rossler 吸引子產(chǎn)生是服從下面這個方程的 1
212 331
仿真圖 ???(x?x)x??x?axx??b?x(x?c)xa?b?0.2c?5.7
仿真結(jié)果
LMS自適應(yīng)濾波器: 仿真圖:
遇到的問題
問題的解決辦法:
將Spectrum Scope中的buffer input打勾就行了。
仿真結(jié)果圖形:
1:Spectrum Scope的輸出圖形
2:Vector Scope的輸出結(jié)果
3:Scope的輸出結(jié)果圖形
第三篇:MATLAB實驗六《SIMULINK交互式仿真》
《計算機仿真及應(yīng)用》實驗教案
實驗六 SIMULINK交互式仿真
一、實驗?zāi)康?/p>
1、熟悉SIMULINK交互式仿真集成環(huán)境。
2、掌握連續(xù)時間系統(tǒng)建模的方法。
二、實驗主要儀器與設(shè)備
裝配有MATLAB7.6軟件的計算機
三、預(yù)習(xí)要求
做實驗前必須認(rèn)真復(fù)習(xí)第七章SIMULINK交互式仿真集成環(huán)境。
四、實驗內(nèi)容及實驗步驟
示的SIMULINK模塊庫瀏覽器。
《計算機仿真及應(yīng)用》實驗教案
圖7.2 SIMULINK模塊庫瀏覽器
4、開啟空白(新建)模型窗
單機Simulink模塊庫瀏覽器工具條上的圖標(biāo)“去的)。
5、從模塊庫復(fù)制所需模塊到空白(新建)模型窗(見圖7.3)
把連續(xù)模塊子庫中的積分器
”;或在選擇下拉菜單項{File:
New},引出如圖7.3所示的空白模型窗(注:窗中的模塊是后一個步驟復(fù)制進
《計算機仿真及應(yīng)用》實驗教案
7.3 制進庫模塊的新建模型窗
6、新建模型窗中的模型再復(fù)制
在該新建模型窗中,可以通過再復(fù)制,產(chǎn)生建模所需的2個積分模塊和2個增益 模塊。具體操作方法是:按住[Ctrl]鍵,用鼠標(biāo)“點亮并拖拉”積分模塊
見一個所需的增益模塊,可采用類似方法獲得。
7、模塊連接線的形成方法隨信號起始端位置不同而不同,具體如下。
起始端位于模塊輸出口的信號線生成法。使光標(biāo)靠近模塊輸出口;待光標(biāo)變 為“單線十字叉”時,按下鼠標(biāo)左鍵;移動十字叉,拖出一根“虛連線”;光標(biāo) 與另一個模塊輸出口靠近到一定程度,單十字叉變?yōu)殡p十字叉;放開鼠標(biāo)左鍵,”虛連線”便變?yōu)閹Ъ^的信號連線。
起始端位于其他信號線上的信號線生成法。使光標(biāo)置于已經(jīng)存在的其他信號線 之上;按下鼠標(biāo)右鍵,光標(biāo)變?yōu)椤皢尉€十字叉”;運動鼠標(biāo),引出”虛連線”;當(dāng) 鼠標(biāo)與待連接模塊輸入口靠得足夠近,單十字叉變?yōu)殡p十字叉;放開鼠標(biāo)右鍵,“虛連線”便變?yōu)閹Ъ^的信號連線。
雙擊相應(yīng)的信號線,給信號線作標(biāo)注,如x’’,x’,x等。
《計算機仿真及應(yīng)用》實驗教案
圖7.4
已構(gòu)建完成的新建模型窗
8、根據(jù)理論數(shù)學(xué)模型設(shè)置模塊參數(shù)
為使構(gòu)造的Simulink模型與理論數(shù)學(xué)模型一致,須對模塊進行如下參數(shù)設(shè)置。
設(shè)置增益模塊
《計算機仿真及應(yīng)用》實驗教案
修改求和模塊輸入口的代數(shù)符號:雙擊求和模塊,引出如圖7.1-6所示的參數(shù)設(shè)置窗; 把符號列表欄中的默認(rèn)符號(++)修改成代數(shù)符號(--);單擊【OK】鍵,完成設(shè)置;
圖7.6 改變輸出入口符號的求和模塊參數(shù)設(shè)置窗
據(jù)初始位移x(0)=0.05m對積分模塊
《計算機仿真及應(yīng)用》實驗教案
圖7.7 實現(xiàn)初始化位移0.05設(shè)置的Integrator1設(shè)置窗
9仿真運行參數(shù)采用默認(rèn)解算器“ode45”、默認(rèn)“變步長”和默認(rèn)仿真終止時間10.10把新建模型保存為exm070101.mdl.11試運行,以便發(fā)現(xiàn)問題加以改善。
雙擊
”仿真啟動鍵,使該模型運行;在示波器上呈現(xiàn)
圖7.8 坐標(biāo)范圍設(shè)置不當(dāng)時的信號
《計算機仿真及應(yīng)用》實驗教案
單擊Scope顯示窗上的縱坐標(biāo)范圍自動設(shè)置圖標(biāo)“”,示波器顯示窗改變?yōu)閳D7.9所
示。在顯示窗中,可以看到位移x(t)的變化曲線。同時可以發(fā)現(xiàn):縱坐標(biāo)的適當(dāng)范 圍大致在【-0.06,0.06】;仿真時間取【0,5】即可;顯示的曲線不夠光滑。
圖7.9 采用軸自動設(shè)置功能的信號顯示
12、據(jù)試運行結(jié)果,進行仿真參數(shù)的再設(shè)置
示波器縱坐標(biāo)設(shè)置:用鼠標(biāo)單擊示波器的黑色顯示屏,在彈出菜單中選擇Axes Properties,引出縱坐標(biāo)設(shè)置對話窗7.10所示;把縱坐標(biāo)的下限、上限分別設(shè)置為(-0.06)和(+0.06);單 擊【OK】,完成設(shè)置。
示波器時間顯示范圍的修改:單擊示波器的參數(shù)設(shè)置圖標(biāo)“
”,引出示波器參數(shù)設(shè)置窗;
在General卡片的Axes區(qū)的Time range欄中,填寫5或auto;單擊【OK】,完成設(shè)置。
圖7.10 對顯示屏的縱坐標(biāo)范圍進行設(shè)置
7.11 對示波器時間顯示范圍的設(shè)置
·仿真終止時間最簡捷的修改方法:在exam070101模型窗“仿真終止時 間”欄“
”中的默認(rèn)值10改變?yōu)?。
《計算機仿真及應(yīng)用》實驗教案
·顯示曲線的光滑化設(shè)置:選中exam070101模型窗的下拉菜單項SimulationConfiguration Parameters,引出仿真參數(shù)配置窗,如圖7.12所示;再在該窗左側(cè)的選擇欄中,選中Data Import/Export項,與之相應(yīng)的參數(shù)設(shè)置欄便出現(xiàn)在窗口的右側(cè);把右半窗下方Save options 區(qū)中Refine factor欄中的默認(rèn)值1改為5;單擊OK,完成設(shè)置。
7.12 通過仿真參數(shù)配置窗設(shè)置輸出光滑因子
《計算機仿真及應(yīng)用》實驗教案
完成以上修改后的模型窗如圖7.13所示。再運行exam070101,可得比較滿意的位移變化曲線(見圖7.14所示)。順便指出:模型運行后,在模塊輸出口的信號線上會出現(xiàn)double字樣。這 表示該信號是采用“雙精度”類型數(shù)據(jù)運算。如果用戶不希望這類標(biāo)識出現(xiàn),那么應(yīng)取消對下 拉菜單項FormatPort signal DisplaysPort Data Types的勾選。
圖7.13
仿真參數(shù)調(diào)整運行后的exam070101模型
在模型窗中,x’’,x’,x等信號名稱是模型創(chuàng)建者根據(jù)需要寫入的。標(biāo)識信號名稱的操作方法 是:用鼠標(biāo)雙擊信號附近的適當(dāng)位置后,就會出現(xiàn)一個虛線框,該虛線框中允許輸入任何 文字。
13、仿真結(jié)果顯示
原本比較稀疏的解計算器數(shù)據(jù),經(jīng)設(shè)定的“光滑因子”下的插值,增加了用于描繪曲線的 數(shù)據(jù)點數(shù),因此使示波器顯示出更為光滑的曲線,如圖7.14所示。
《計算機仿真及應(yīng)用》實驗教案
圖7.14 適當(dāng)?shù)仫@示仿真所得的位移變化曲線
五、實驗小結(jié)
第四篇:電子信息MATLAB系統(tǒng)仿真與設(shè)計
電子信息系統(tǒng)仿真與設(shè)計
課程設(shè)計報告
設(shè)計課題: 油價變化系統(tǒng)的模型 姓 名:
學(xué) 院: 機電與信息工程學(xué)院
專 業(yè): 電子信息科學(xué)與技術(shù)
班 級: 09級 2班
學(xué) 號: 日 期 2010-2011第三學(xué)期
指導(dǎo)教師: 李光明 張軍蕊
山東大學(xué)威海分校信息工程學(xué)院 建模:
1背景
設(shè)某一星期的油價為p,其中n表示年份,它與上一星期的油價、油價升值速率以及新增資源所能滿足的個體數(shù)目之間的動力學(xué)方程由如下的差分方程所描述:
從此差分方程中可以看出,此油價變化系統(tǒng)為一非線性離散系統(tǒng)。如果設(shè)油價初始值、油價升值速率、新增資源所能滿足的個體數(shù)目,要求建立此油價動態(tài)變化系統(tǒng)的系統(tǒng)模型,并分析油價在未來100個星期內(nèi)之間的變化趨勢。2 建立油價變化系統(tǒng)的模型
(1)Discrete模塊庫Unit Delay模塊:其主要功能是將輸入信號延遲一個采樣時間,它是離散系統(tǒng)的差分方程描述以及離散系統(tǒng)仿真的基礎(chǔ)。在仿真時只要設(shè)置延遲模塊的初始值便可計算系統(tǒng)輸出。
(2)Discrete模塊庫Zero-Order Hold模塊:其主要功能是對信號進行零階保持。使用Simulink對離散系統(tǒng)進行仿真時,單位延遲是Discrete模塊庫中的Unit Delay模塊來完成的。對于油價變化系統(tǒng)模型而言,需要將作為Unit Delay模塊的輸入以得到,然后按照系統(tǒng)的差分方程來建立人口變化系統(tǒng)的模型。
1.05ProductGainScope1zUnit DelayGain1-K-1Constant 系統(tǒng)參數(shù)設(shè)置
系統(tǒng)模型建立之后,首先需要按照系統(tǒng)的要求設(shè)置各個模塊的參數(shù),如下所述:(1)增益模塊Gain表示油價升值速率,故取值為1.05。
(2)模塊Gain1表示新增資源所能滿足的個體數(shù)目,故取值為1000000。(3)油價初始值設(shè)為10$/L(4)Unit Delay模塊參數(shù)設(shè)置。
(5)仿真時間設(shè)置:按照系統(tǒng)仿真的要求,設(shè)置系統(tǒng)仿真時間范圍為0~100。(6)離散求解器與仿真步長設(shè)置:對離散系統(tǒng)進行仿真需要使用離散求解器。
實驗總結(jié)及心得體會 MATLAB是一件很強大的工具,在模擬仿真方面有著不可比擬的優(yōu)勢。不僅可以通過語言腳本可以幫助我們解決很多問題,而且simulink也是十分強大的。通過十分直觀的方式直接按放各模塊,很明顯地顯示出各種邏輯關(guān)系,方便快捷,思路清晰。在實際應(yīng)用中。Simulink起到了重要作用。通過對simulink的學(xué)習(xí),我發(fā)現(xiàn)我們所學(xué)的課本知識是很重要的,只要通過理解變通,就很容易解決實際問題。但是,有個前提就是你要有著扎實的理論知識。所以,我們千萬不能忽略了課本知識的重要性,不要浮躁,理解透徹。Simulink對我來說是很陌生的一個東西,通過幾天的摸索,我漸漸摸到了他的奇妙之處,其實不如我們想象那么難,只要沒仔細(xì)分析好,它會是我們工作學(xué)習(xí)的一個強力助手。當(dāng)然,由于時間短暫,我還需要更多時間的學(xué)習(xí),才能徹底掌握這個仿真軟件。
附錄
1.利用simulink仿真來實現(xiàn)攝氏溫度到華氏溫度的轉(zhuǎn)換 Tf?9Tc?32 5
?y??x?y2.設(shè)系統(tǒng)微分方程為?,試建立系統(tǒng)模型并仿真
y(1)?2?
3.利用simulink仿真x(t)?
11(cos?t?cos3?t?cos5?t),取A=1, ??2? 2925?8A
-K-ClockGain3cosTrigonometricFunctioncosTrigonometricFunction21/9GainSum ofElements-K-Gain1-K-Gain2Scope-K-Clock1Gain4-K-Clock2Gain5cosTrigonometricFunction1
4.建立如圖1所示的仿真模型并進行仿真,改變增益,觀察x-y圖形變化,并用浮動的scope模塊觀測各點波形。
1sSine WaveIntegratorXY Graph1SliderGainFloatingScope 圖1.題目4
改變增益:
繼續(xù)增大增益:
5. 有初始狀態(tài)為0的二階微分方程x???0.5x??0.4x?2u(t)其中u(t)是單位階躍函數(shù),試建立系統(tǒng)模型并仿真。
6. 通過構(gòu)造SIMULINK模型求y?cos(t)dt的結(jié)果,其中初值分別為y1(0)=0, y2(0)=1
?
當(dāng)y1(0)=0時:
當(dāng) y1(0)=1時:
7.分析二階動態(tài)電路的零輸入響應(yīng)
圖2為典型的二階動態(tài)電路,其零輸入響應(yīng)有過阻尼、臨界阻尼和欠阻尼三種情況,已知L=0.5H, C=0.02F, R=1, 2, 3, …, 13?, 初始值uc(0)?1V,iL(0)?0求uc(t)和iL(t)的零輸入響應(yīng)并畫出波形。(1用simulink的方法,2用腳本文件的方法)
LRC 圖2 題目5 二階動態(tài)電路
(1)用simulink的方法
1sIntegrator50Gain21sIntegrator1Scope-u-K-Gain3AddUnary Minus2Gain1Scope1
(2)用腳本文件的方法 定義函數(shù)文件funcforex123.m
function xdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);
xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);xdot(2)=1/C*x(1);function in=f(t)in=0;腳本文件:
L=0.5;C=0.02;
for R=[1 2 3 4 5 6 7 8 9 10 11 12 13]
[t,x]=ode45('funcforex123',[0 7],[0;1],[],R,L,C);figure(1);plot(t,x(:,1));hold on;
xlabel('timesec');
text(0.9,0.07,'leftarrowi-L(t)');grid;figure(2);plot(t,x(:,2));hold on;
xlabel('timesec');
text(0.5,0.3,'leftarrowu-C(t)');grid;end
電壓圖:
10.80.60.4leftarrowu-C(t)0.20-0.2-0.4-0.6-0.801234timesec567
電流圖:
0.150.1leftarrowi-L(t)0.050-0.05-0.1-0.15-0.201323timesec345673
8.一池中有水2000m,含鹽 2 kg,以 6m/ 分 的速率向池中注入濃度為 0.5 kg / m 的3m鹽水,又以 4 / 分的速率從池中流出混合后的鹽水,問欲使池中鹽水濃度達到 0.2 kg / m3,需要多長時間?(1用simlink的方法,2用腳本文件的方法)【附加:試畫出濃度vs時間的曲線】
2Constant3ClockGain1-K-Gain2Gain34Gain2ProductAdd1sIntegratorScope
9.任意選擇一個待仿真的實際問題,建立模型并分析仿真結(jié)果,或者MATLAB Simulink demo里面一個模塊進行分析
10.利用Simulink畫出以下微分方程組的框圖:
dx/dt=-x^2+y,dy/dt=-x-x*y;x(0)=0,y(0)=0 運行結(jié)果要求傳到工作空間中,并畫出相位圖(橫坐標(biāo)為x,縱坐標(biāo)為y)。
11.搭建特定的信號源,建立SIMULINK仿真模型、顯示仿真結(jié)果。
ClockProduct>=Clock1RelationalOperator0ConstantSwitch 基于MATLAB Simulink的平面四連桿機構(gòu)仿真 基于MATLAB/Simulink的平面四連桿機構(gòu)仿真 一、題目及自由度分析 如圖1所示,該平面四桿機構(gòu)中有三根運動的均質(zhì)鋼桿,其中有兩根鋼桿的一端與接地點連接,第三根桿就與這兩根桿剩下的端點連接起來,兩個接地點就可認(rèn)為是第四桿,機構(gòu)中相關(guān)尺寸如圖2所示。 計算結(jié)構(gòu)自由度,三個運動桿被限制到平面內(nèi)運動,因此每個桿都有兩個移動和一個轉(zhuǎn)動,即在考慮約束之前,自由度為: 3×(2+1)=9 但是由于每個桿都受到約束,所以并不是每個自由度都是獨立的。在二維狀態(tài)下,剛體間的連接或者剛體與接地點的連接就會增加兩個約束。這樣就會使得剛體其中一端不能夠作為獨立的自由運動點,而是要受到鄰近剛體的約束。該題中有四個剛體--剛體或剛體—接地點的連接,這就隱含8個約束。 那么最后的自由度為9-8=1.雖然有四個轉(zhuǎn)動自由度,但是,其中三個都是非獨立的,只要確定其中一個,就可確定其余三個。 二、模型建立及參數(shù)設(shè)置 1應(yīng)用MATLAB/Simulink建立初始模型 2在初始模型的基礎(chǔ)上添加Joint Sensor模塊 3依題意設(shè)置相關(guān)參數(shù) ⑴配置Ground模塊 由圖2可得系統(tǒng)的基本尺寸為: ①固定構(gòu)件長86.7厘米 ②Ground_1表示接地點,在World CS坐標(biāo)軸原點右邊43.3cm處 ③Ground_2表示接地點,在World CS坐標(biāo)軸原點左邊43.4cm處 ④最下端的鉸處于X-Z平面內(nèi)原點以上4cm 圖5Ground_1模塊參數(shù)設(shè)置圖6Ground_2模塊參數(shù)設(shè)置 4配置Joint模塊 三個沒有接地的聯(lián)桿都是在X-Y平面內(nèi)的,所以Revolute軸必須是Z軸。 ⑴依次打開Revolute參數(shù)對話框,保持默認(rèn)值,即Axis of rotation[x y z]默認(rèn)設(shè)置為[001],Reference csys都是WORLD。 圖7Revolute坐標(biāo)設(shè)置 ⑵根據(jù)連接情況依次設(shè)置Revolute參數(shù)對話框中的Connection parameters參數(shù) 圖8Revolute模塊參數(shù)對話框Connection parameters參數(shù) 圖9Revolute模塊參數(shù)對話框Connection parameters參數(shù) 圖10Revolute模塊參數(shù)對話框Connection parameters參數(shù) 圖11Revolute模塊參數(shù)對話框Connection parameters參數(shù)5配置Body模塊 本題中Body模塊(即Bar)定位方式不是直接相對于WORLD坐標(biāo)系統(tǒng),而是采用相對坐標(biāo)形式,Bar1的CS1相對于Ground_1,Bar2的CS1相對于Bar1,以此類推。 以下為每個Body模塊的詳細(xì)參數(shù)設(shè)置,其中包括質(zhì)量(Mass)、慣性矩(Inertia)、重心坐標(biāo)原點、CS1坐標(biāo)原點、CS2坐標(biāo)原點和重心的方向。 圖12Bar1的模塊參數(shù)設(shè)置 圖13Bar2的模塊參數(shù)設(shè)置 圖14Bar3的模塊參數(shù)設(shè)置三、檢測運動,運行模型 圖15仿真結(jié)果動畫顯示 圖16Revolute2和Revolute3的轉(zhuǎn)角時程曲線 三、小結(jié) 目前較為主流的動力學(xué)仿真軟件是Adams,但鑒于本人對該軟件接觸較少,且MATLAB也具有該功能,故本題采用Simulink中的SimMechanics工具箱對平面四桿機構(gòu)進行建模仿真,并利用其可視化窗口進行系統(tǒng)運動可視化。 通過仿真結(jié)果可以看到,使用已有的計算機仿真軟件包Matlab/Simulink來建立機構(gòu)的仿真模型,仿真求解機構(gòu)力學(xué)和運動參數(shù),可以把用戶從復(fù)雜煩瑣的數(shù)學(xué)計算中解放出來,提高了求解速度,保證了求解精度。第五篇:2021基于MATLAB Simulink的平面四連桿機構(gòu)仿真