• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MATLAB GUI彈簧振子仿真模擬

    2015-06-23 13:56:21成海英
    關(guān)鍵詞:振子小球繪制

    成海英, 張 亞

    (1.上海電子信息職業(yè)技術(shù)學(xué)院,上海 201411; 2.北京機(jī)電研究所,北京 100086)

    基于MATLAB GUI彈簧振子仿真模擬

    成海英1, 張 亞2

    (1.上海電子信息職業(yè)技術(shù)學(xué)院,上海 201411; 2.北京機(jī)電研究所,北京 100086)

    典型理論模型虛擬實(shí)驗(yàn)制作以及虛擬實(shí)驗(yàn)室構(gòu)建已經(jīng)成為多媒體教學(xué)的重要發(fā)展趨勢之一。利用MATLAB軟件GUI功能,對彈簧振子基本模型在模型展示、概念說明、仿真動畫、模型規(guī)律繪制等進(jìn)行虛擬實(shí)驗(yàn)制作。結(jié)果表明:仿真結(jié)果規(guī)律正確,仿真生動形象。虛擬實(shí)驗(yàn)的制作過程對物理學(xué)、力學(xué)等其它理論模型的仿真具有重要的參考意義。

    三維彈簧振子;仿真實(shí)驗(yàn);MATLAB GUI

    基本理論問題的仿真作為多媒體教學(xué)的重要支撐,具有生動形象、方便快捷、易于操作,不受場地限制等優(yōu)勢,廣泛地應(yīng)用于物理、數(shù)學(xué)、力學(xué)等教學(xué)實(shí)踐中[1-4]。在多媒體仿真動畫制作中常用網(wǎng)頁設(shè)計(jì)軟件制作動畫(如Flash)和計(jì)算機(jī)語言編程軟件(如MATLAB語言、Fortran、VB、C語言等)制作仿真動畫兩種方式,后者不僅可以真實(shí)地仿真物理過程還可以構(gòu)建虛擬實(shí)驗(yàn),對物理規(guī)律揭示更加透徹,已經(jīng)逐漸成為教學(xué)和科學(xué)研究的重要工具。此外,計(jì)算機(jī)語言仿真已成為科學(xué)問題研究中除實(shí)驗(yàn)研究理論分析外的有力手段[5,6]。MATLAB將矩陣運(yùn)算、數(shù)值分析、圖形處理和編程技術(shù)結(jié)合,其指令代碼與數(shù)學(xué)、工程中常用的形式十分相似,函數(shù)庫以及工具箱極為豐富,進(jìn)行仿真實(shí)驗(yàn)制作較C、FORTRAN等語言更加簡潔方便。MATLAB軟件中圖形用戶界面(GUI模塊)不僅形象生動、互動友善、操控靈活,而且為人們提供了定性和定量的結(jié)合、局域和全域的結(jié)合、時域和頻域的結(jié)合、模擬和數(shù)字結(jié)合的數(shù)據(jù)探索和科學(xué)分析的仿真平臺。該功能和科學(xué)研究、多媒體教學(xué)、虛擬實(shí)驗(yàn)室構(gòu)建等方向高度一致,已在科學(xué)研究領(lǐng)域影響著研究方式的深刻變化[7]。

    現(xiàn)有對彈簧振子模型的研究主要集中在以數(shù)值研究的角度對多彈簧振子耦合、非線性彈簧振子、彈簧振子-單擺等耦合系統(tǒng)的研究[8-13],而對于物理實(shí)驗(yàn)角度研究鮮為報(bào)道。本文以彈簧振子為基本模型,從數(shù)值仿真與多媒體教學(xué)的角度,利用MATLAB中GUI模塊,深入闡述GUI制作中界面設(shè)計(jì)、動畫編程控件編輯等基本問題。

    1 彈簧振子理論模型與基本仿真問題實(shí)現(xiàn)

    1.1 理論模型

    如圖1所示為彈簧振子基本模型,質(zhì)量為m的小球在x方向做簡諧振動。其中O點(diǎn)位置為平衡位置,A、B兩點(diǎn)分別為彈簧振子兩個極限位置,初始狀態(tài)為小球在右極限位置。整個系統(tǒng)的拉格朗日方程為:

    (1)

    圖1 彈簧振子基本模型Fig.1 Basic model of spring oscillator

    由拉格朗日方程求出系統(tǒng)的運(yùn)動微分方程為:

    (2)

    (3)

    (4)

    1.2 微分方程求解實(shí)現(xiàn)

    MATLAB中ode45為解非剛性微分方程命令,中等精度,使用Runge-Kutta的四、五階算法。其格式如下:

    [T,Y]=solver(odefun,tspan,y0,options,p1,p2…)

    其中,odefun為求解的常微分方程文件名,方程形式為y′=odefun(t,y);tspan為單調(diào)遞增(遞減)區(qū)間[t0tfinal]或[t0,t1…tfinal]; y0為初始條件矢量;options為用ode命令建立的優(yōu)化選項(xiàng); p1,p2…為主程序傳遞給oedfun函數(shù)的參數(shù)。

    本文采用ode45命令求解上述微分方程,根據(jù)式(3)、式(4)以及odefun函數(shù)編寫形式,odefun函數(shù)程序如下,并保存為fangz1.m函數(shù)文件。

    functionydot=fangz1(t,y,flag,k,m)

    ydot=[y(2);

    -k/m*y(1)];

    主程序中設(shè)定初始條件為t=0時,y1=0.4,y2=0,即小球在右極限位置,求解語句為:

    [t,y]=ode45(′fangz1′,0:0.05:100*pi*sqrt(m/k),[0.4,0],[],k,m);

    1.3 動畫程序編寫與實(shí)現(xiàn)

    MATLAB主要有彗星軌跡圖動畫、影片動畫和實(shí)時動畫3種形式[4],其中實(shí)時動畫對沒有改變的背景圖案不作更新,只更新運(yùn)動部分的圖案,因此加快了每幅畫面的生成速度。MATLAB利用圖形對象的 “Erasemode”屬性實(shí)現(xiàn)在保持背景不變的條件下擦除舊對象,顯示新對象,“Erasemode”屬性有如下4種,其默認(rèn)方式為“normal”,本文采用默認(rèn)方式。

    normal 重繪整個顯示區(qū),該方式顯示圖形準(zhǔn)確、速度慢。

    none 不做任何擦除,在原圖像上直接繪圖。

    xor 擦除舊對象的點(diǎn),顯示新對象的點(diǎn)。

    background 把舊對象的顏色變?yōu)楸尘吧?/p>

    當(dāng)新對象的屬性修改后,應(yīng)用命令drawnow刷新屏幕,使新對象顯示出來。命令drawnow使Matlab暫停當(dāng)前任務(wù)去刷新屏幕,這樣在循環(huán)下即可實(shí)現(xiàn)動畫效果。

    對于本文研究模型,動畫部分對象為彈簧振子小球和彈簧,參考程序如下。其中,對彈簧的處理采用螺旋線形式,采用參數(shù)方程畫20個導(dǎo)程下的螺旋線,采用plot3命令繪制;小球采用sphere命令繪制。另外,需要注意的是,小球的位置以及彈簧端點(diǎn)位置隨著索引變量i值的改變而改變,以此實(shí)現(xiàn)多個周期的仿真。

    qiu=mesh(0.08*XX+x(1),0.08*YY,0.08*ZZ);

    spring=plot3(xx,yy,zz,′color′,[28/255 150/255 48/255],′linewidth′,1.5);…

    for i=1:length(x)

    tt=0:0.01:40*pi;

    yy=r.*cos(tt);

    zz=r.*sin(tt);

    xx=x(i)./20./2./pi*t;

    [XX,YY,ZZ]=sphere(50);

    set(qiu,′XData′,0.08*XX+x(i),′YData′,0.08*YY,′ZData′,0.08*ZZ);

    set(spring,′XData′,xx,′YData′,yy,′ZData′,zz);

    drawnow

    2 MATLAB GUI設(shè)計(jì)

    2.1 界面設(shè)計(jì)與控件屬性設(shè)置

    GUI設(shè)計(jì)主要分為4個板塊,① 彈簧振子模型圖展示與受力分析;② 基本概念展示;③ 仿真動畫;④彈簧振子能量圖繪制。其中小球質(zhì)量和彈簧勁度系數(shù)作為模型初值可調(diào),并設(shè)定所需的控制按鈕:暫停、繼續(xù)、退出等。主要控件屬性以及各控件主要功能如表1所示。

    2.2 各控件回調(diào)函數(shù)程序與說明

    (1)初值界面繪制

    在function JIANXIEZD_GN_OpeningFcn(hObject, eventdata, handles, varargin)函數(shù)程序中繪制程序的初始界面,其語句同“開始”按鈕回調(diào)函數(shù)按鈕相似。

    表1 主要控件屬性

    (2)“受力分析”按鈕回調(diào)函數(shù)

    function pushbutton1_Callback(hObject, eventdata, handles) global x %定義全局變量x

    axes(handles.axes1) %將axes1設(shè)置為當(dāng)前

    plot([x(1)+0.5 x(1)+0.1],[0 0],′r′,′linewidth′,3); %繪制受力示意圖直線

    fill([x(1)+0.1 x(1)+0.1 x(1)-0.1 x(1)+0.1],[0.025 -0.03 0 0.025],′r′); %填充受力示意圖箭頭

    (3)“能量畫圖”按鈕回調(diào)函數(shù)

    function pushbutton2_Callback(hObject, eventdata, handles)

    axes(handles.axes3); %將坐標(biāo)軸3設(shè)為當(dāng)前

    k=str2double(get(handles.edit1,′string′)); %從文本框中獲得k值

    m=str2double(get(handles.edit2,′string′)); %從文本框中獲得m值

    [t,y]=ode45(′fangz1′,0:0.05:100*pi*sqrt(m/k),[0.4,0],[],k,m); %求解微分方程

    EK=1/2*m*(y(:,2)).^2; EP=1/2*k*(y(:,1)).^2; %計(jì)算動能、勢能

    E=EP+EK; %計(jì)算機(jī)械能

    plot(t,EK,t,EP,t,E,′linewidth′,2); %繪制能量曲線

    legend(′動能-時間′,′勢能-時間′,′機(jī)械能-時間′) %設(shè)置圖例

    xlabel(′時間t/(s)′) ylabel(′E(J)′) %設(shè)置x,y標(biāo)簽

    axis([0 6 0 1]) %設(shè)置坐標(biāo)軸顯示范圍

    (4)“開始”按鈕回調(diào)函數(shù)

    function pushbutton3_Callback(hObject, eventdata, handles)

    delete(allchild(handles.axes2));%刪除axes2中由JIANXIEZD_GN_OpeningFcn下繪制所有對象。

    axes(handles.axes2) %選定axes2為當(dāng)前坐標(biāo)軸

    L0=1;g=9.8;r=0.07 %設(shè)定初值

    k=str2double(get(handles.edit3,′string′)); %從文本框中獲得k值

    m=str2double(get(handles.edit4,′string′)); %從文本框中獲得m值

    [t,y]=ode45(′fangz1′,0:0.05:100*pi*sqrt(m/k),[0.4,0],[],k,m,g); %求解微分方程xmax=max(abs(y(:,1)+L0)); % 計(jì)算坐標(biāo)系范圍x軸最大值

    axis([0 1.2*(xmax) -1 1,-1 1]); %設(shè)置坐標(biāo)系顯示范圍

    set(gca,′Xtick′,0:0.1:2,′Xticklabel′,{′-1′,″,″,″,′-0.5′,″,″,″,″,′0′,″,″,″,″,′0.5′,″,″,″,″,′1′}) %自定義x軸坐標(biāo)刻度

    t=0:0.01:40*pi; %選定運(yùn)行時間為40π s。

    view(20,20) %設(shè)定視角

    line([0 1.8],[0 0],[0 0],′color′,[23/255 58/255 103/255],′linewidth′,2); %畫中心線

    X=[0 0 0 0 0];Y=[0.5 0.5 -0.5 -0.5 0.5];Z=[0.5 -0.5 -0.5 0.5 0.5]; %設(shè)置左側(cè)平面邊框坐標(biāo)

    C=[0 0 0 0 0]; %填充顏色向量

    fill3(X,Y,Z,C,′EdgeColor′,′blue′); %繪制左側(cè)平面

    yy=r.*cos(t);zz=r.*sin(t);x=L0+y(:,1); xx=x(1)./20./2./pi*t;%計(jì)算彈簧數(shù)據(jù)

    text(x(1),0,-0.15,′B′,′fontsize′,12) %標(biāo)記右極限位置

    text(L0,0,-0.15,′O′,′fontsize′,12) %標(biāo)記平衡位置

    text(L0-(x(1)-L0),0,-0.15,′A′,′fontsize′,12) %標(biāo)記左極限位置

    spring=plot3(xx,yy,zz,′color′,[28/255 150/255 48/255],′linewidth′,1.5); %繪制彈簧

    [XX,YY,ZZ]=sphere(50); hold on %繪制小球數(shù)據(jù)及打開疊加繪圖

    lighting phong %設(shè)置光照屬性

    qiu=mesh(0.08*XX+x(1),0.08*YY,0.08*ZZ); %繪制小球

    axis equal %設(shè)定縱、橫坐標(biāo)軸等長刻度

    light(′Position′,[x(1)-0.3 -0.6 1],′Style′,′local′) %設(shè)置光源位置

    material shiny %設(shè)置小球材質(zhì)屬性

    colormap (gray) %設(shè)置顏色條屬性

    set(qiu,′FaceLighting′,′phong′,′FaceColor′,′interp′,′AmbientStrength′,0.3);%設(shè)置小球自身屬性

    for i=1:length(x) %仿真循環(huán)開始

    tt=0:0.01:40*pi; yy=r.*cos(tt);zz=r.*sin(tt);xx=x(i)./20./2./pi*t; %計(jì)算彈簧數(shù)據(jù)

    [XX,YY,ZZ]=sphere(50); %計(jì)算小球數(shù)據(jù)

    set(qiu,'′XData′,0.08*XX+x(i),′YData′,0.08*YY,′ZData′,0.08*ZZ); %設(shè)置小球句柄坐標(biāo)值

    set(spring,′XData′,xx,′YData′,yy,′ZData′,zz);%設(shè)置彈簧句柄坐標(biāo)值

    drawnow %刷新屏幕

    (5)“暫?!卑粹o回調(diào)函數(shù)

    function pushbutton4_Callback(hObject, eventdata, handles)

    uiwait(gcf) %圖形界面暫停

    (6)“繼續(xù)”按鈕回調(diào)函數(shù)

    function pushbutton5_Callback(hObject, eventdata, handles)

    uiresume(gcf) %圖形界面繼續(xù)

    (7)“退出”按鈕回調(diào)函數(shù)

    function pushbutton6_Callback(hObject, eventdata, handles)

    close %關(guān)閉圖形界面

    3 實(shí)驗(yàn)結(jié)果與討論

    圖2所示為程序運(yùn)行結(jié)果,由運(yùn)行結(jié)果可知,仿真動畫連續(xù)生動,三維效果逼真,達(dá)到了預(yù)期效果,通過教學(xué)實(shí)踐,在課堂上取得較好的效果。同時,本文所提出的仿真實(shí)驗(yàn)也可作為虛擬實(shí)驗(yàn)使用,通過測量不同k和m值可以得到彈簧振子周期與k值成正比與m成反比的結(jié)論。另外,該運(yùn)行程序可以通過mcc命令編譯生成可執(zhí)行文件,方便在常用電腦上運(yùn)行。

    圖2 彈簧振子實(shí)驗(yàn)仿真界面Fig.2 Simulation interface of spring oscillator test

    4 結(jié) 論

    本文主要以彈簧振子為基本模型,設(shè)計(jì)了MATLAB GUI仿真實(shí)驗(yàn),該虛擬實(shí)驗(yàn)將抽象復(fù)雜的概念用生動仿真表現(xiàn)出來,并可作為虛擬實(shí)驗(yàn)使用。本文提出基本物理模型的GUI虛擬實(shí)驗(yàn)設(shè)計(jì)方法,可以使通過虛擬實(shí)驗(yàn)對物理概念、物理規(guī)律以及能量轉(zhuǎn)化理解更深入。虛擬實(shí)驗(yàn)制作以及虛擬實(shí)驗(yàn)室平臺構(gòu)建將是多媒體教學(xué)的一個重要發(fā)展方向,具有廣闊的應(yīng)用前景。

    [1] 蒙成舉,蘇安.Matlab輔助磁場描繪實(shí)驗(yàn)教學(xué)研究[J].河池學(xué)院學(xué)報(bào),2010(S1):108-111.

    [2] 朱衛(wèi)娟,孔祥鯤.磁感應(yīng)強(qiáng)度仿真實(shí)驗(yàn)——MATLAB在物理教學(xué)中的應(yīng)用[J].電腦知識與技術(shù)(學(xué)術(shù)交流),2007(16):1 119-1 120.

    [3] 陳胤,劉加海.基于Matlab的數(shù)值模擬和動畫仿真在多媒體教學(xué)中的應(yīng)用[J].計(jì)算機(jī)時代,2006(8): 60-61.

    [4] 彭芳麟.理論力學(xué)計(jì)算機(jī)模擬[M].北京: 清華大學(xué)出版社, 2001.

    [5] 成海英,陳冬冬,張亞.基于MATLAB的圓孔衍射實(shí)驗(yàn)?zāi)M[J].鹽城工學(xué)院學(xué)報(bào):自然科學(xué)版,2011(2):11-13.

    [6] 成海英,張亞,陳冬冬.基于彈簧耦合的橢圓擺的仿真研究[J].淮海工學(xué)院學(xué)報(bào):自然科學(xué)版,2011(2):23-27.

    [7] 張志涌.精通MATLAB R2011a[M].北京:北京航空航天大學(xué)出版社,2011.

    [8] 何松林,黃焱,戴祖誠.對稱雙彈簧振子橫向振動的復(fù)雜性研究[J].昆明學(xué)院學(xué)報(bào),2010(3):86-88.

    [9] 楊正波,夏清華,劉思平.多彈簧振子耦合系統(tǒng)運(yùn)動研究[J].大學(xué)物理,2010(4):29-32.

    [10] 楊正波,夏清華.耦合彈簧振子系統(tǒng)的研究[J].高等函授學(xué)報(bào):自然科學(xué)版,2008(1):15-17.

    [11] 錢忠華,周莉英,董慎行.一類非線性彈簧振子的周期性振動[J].物理與工程,2003(4):13-15.

    [12] 陳清梅,顏素榮,安紅.一種新的“彈簧振子-單擺”耦合擺研究[J].力學(xué)與實(shí)踐,2008(6):93-95.

    [13] 謝善娟.用MATLAB分析非線性彈簧振子的振動[J].赤峰學(xué)院學(xué)報(bào):自然科學(xué)版,2009(4): 7-8.

    (責(zé)任編輯:張英健)

    Simulation of Spring Oscillator Based on MATLAB GUI

    CHENG Haiying1, ZHANG Ya2

    (1.Shanghai Technical Institute of Electronics & Information, Shanghai 201411, China;2.Beijing Rerearch Institute of Mechnical and Electrial Technology, Beijing 100086, China)

    The making of virtual test with typical theory model and the establishment of virtual laboratory have become one of the important trends of multimedia teaching. The virtual experiment of spring oscillator, which contains several aspects, such as model display, concept explanation, simulation animation and model’s rule drawing, was made by using the GUI function of MATLAB software in this paper. The results show that the simulation results law are correct and vivid, The production process of virtual experiment in this paper, has the important reference significance on other theory model test simulation in physics and mechanics.

    3D spring oscillator; simulation experiment; MATLAB GUI

    10.16018/j.cnki.cn32-1650/n.201504005

    2015-07-12

    上海市教育委員會2013年度教育信息技術(shù)應(yīng)用研究項(xiàng)目

    成海英(1977-),女,江蘇鹽城人,高級講師,碩士生,主要研究方向?yàn)槲锢韱栴}數(shù)值模擬。

    O32

    A

    1671-5322(2015)04-0017-05

    猜你喜歡
    振子小球繪制
    Art on coffee cups
    彈簧振子問題的分析與求解
    聯(lián)想等效,拓展建模——以“帶電小球在等效場中做圓周運(yùn)動”為例
    小球進(jìn)洞了
    小球別跑
    小球別跑
    家教世界(2020年10期)2020-06-01 11:49:26
    放學(xué)后
    童話世界(2018年17期)2018-07-30 01:52:02
    非線性Duffing擾動振子共振機(jī)制的研究
    基于近似熵和混沌振子的電力諧波檢測與估計(jì)
    電磁彈簧振子實(shí)驗(yàn)裝置的改進(jìn)
    开封县| 朝阳县| 白玉县| 监利县| 南城县| 沧州市| 西宁市| 景东| 沧州市| 晋城| 渑池县| 莆田市| 临西县| 元谋县| 高邑县| 新丰县| 普兰店市| 泗洪县| 清涧县| 扎鲁特旗| 吐鲁番市| 锦屏县| 沽源县| 海南省| 济南市| 乌什县| 阜新市| 鸡泽县| 鄂托克旗| 榆林市| 宁蒗| 东辽县| 元氏县| 海林市| 新野县| 南召县| 育儿| 澄城县| 镇远县| 巩义市| 韩城市|