乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用Excel Link實現(xiàn)Excel與Matlab混合編程

       fanssk 2013-11-23

      Excel Link是一個在Windows環(huán)境下實現(xiàn)Excel與Matlab進行鏈接的插件。通過連接Excel和Matlab,用戶可以在Excel工作表空間和宏編程工具中使用Matlab的數(shù)值計算,圖形處理等功能,不需要脫離Excel環(huán)境。同時由Excel Link來保證兩個工作環(huán)境中的數(shù)據(jù)交換和同步更新。

      1. Excel Link的安裝和和設置
      首先,在系統(tǒng)中安裝Excel軟件。然后安裝Matlab和Excel Link,用Matlab安裝盤開始安裝,選擇自定義安裝中,在選中組件ExcelLink,如下圖所示:


      安裝完Excel Link后還需要在Excel中進行一些設置后才能使用。
      啟動Excel,選擇菜單“工具”項下的“加載宏”項,彈出如下對話框:


      選中Excel Link項。如果該項不存在,則通過瀏覽目錄,在目錄%MATLAB%toolboxexlink下找到excllink.xla文件,如下圖示,并確定。


      選中ExcelLink項并確定后,在Excel中多了一個Excel Link工具條,如下圖示:


      經(jīng)過以上的設置后就可以開始使用Excel Link了。

      2. ExcelLink連接管理函數(shù)
      (1) Matlabinit
      該函數(shù)只能在宏子例程中使用。初始化ExcelLink和啟動Matlab進程。只有在MLAutoStart函數(shù)中使用“no”參數(shù),才需要手動使用Matlabinit來初始化ExcelLink和啟動Matlab進程,
      如果使用參數(shù)“yes”,則Matlabinit是自動執(zhí)行的。
      使用語法:Matlabinit
       
      (2) MLAutoStart
      設置自動啟動Matlab和ExcelLink。
      在工作表中的使用語法:
      MLAutoStart("yes")
      MLAutoStart("no")
      在宏中的使用語法:
      MLAutoStart "yes"
      MLAutoStart "no"
      使用“yes”參數(shù),則當Excel啟動時,自動啟動Matlab和ExcelLink;如果使用參數(shù)“no”,則當Excel啟動時,不啟動Matlab和ExcelLink。如果在此之前它們已經(jīng)啟動,則無任何影響。
       
      (3) MLClose
      終止Matlab進程并刪除Matlab工作空間的所有變量。并通知Excel,Matlab不再運行。
      在工作表中的使用語法:
      MLClose()
      在宏中的使用語法:
      MLClose
      (4) MLOpen
      啟動Matlab進程。如果Matlab進程已經(jīng)啟動,則MLOpen函數(shù)不進行任何操作。在使用MLClose關閉Matlab進程后使用MLOpen來重新啟動Matlab。
      在工作表中的使用語法:
      MLOpen()
      在宏中的使用語法:
      MLOpen

       

       


      3. ExcelLink數(shù)據(jù)管理函數(shù)
      (1) Matlabfcn
      根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令。
      在工作表中使用時的語法:
        matlabfcn(command, inputs)
      參數(shù)command,Matlab將執(zhí)行的命令,命令需要寫成“command”(使用雙引號引起來)的形式。
      參數(shù) inputs 傳給Matlab命令的變長輸入?yún)?shù)列表。列表是包含數(shù)據(jù)的工作表單元格范圍。
      函數(shù)返回單一數(shù)值或者是字符串,結(jié)果返回到調(diào)用函數(shù)的單元格中。
      例如matlabfcn(”sum”,B1:B10);把從B1到B10的單元格中數(shù)據(jù)相加,如下圖示:


       并將結(jié)果返回到當前的活動單元格。即A11,結(jié)果如下圖。


      (2) Matlabsub
      根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令,并將結(jié)果返回到指定的單元格中。
      在工作表中的使用語法:
      matlabsub(command,edat,inputs)
      command和inputs參數(shù)的與matlabfcn相同。
      參數(shù)edat,指定返回值寫入在工作表中的位置。如果edat用雙引號引起來,則edat必須是單元格地址或范圍的名字。如果參數(shù)不用引號引起edat的形式,則通過計算獲得矩陣名。
      例如:matlabsub(”sum”,”A1”,B1:B10);把工作表中從單元格B1到B10的數(shù)據(jù)相加,并將結(jié)果返回到單元格A1中。
      注意:edat指定的位置不能包含matlabsub所在的位置。
      (3) MLAppendMatrix
      將Excel工作表中的數(shù)據(jù)追加到Matlab中指定的矩陣中如果該矩陣不存在,則創(chuàng)建矩陣。
      在工作表中使用的語法:
      MLAppendMatrix(var_name,mdat)
      在宏中使用的語法:
      MLAppendMatrix var_name,mdat
      注意要追加的數(shù)據(jù)維數(shù)要和原矩陣中的維數(shù)相匹配,否則出錯。
      例如:MLAppendMatrix(”a”,A1:A2);假設矩陣a是個2行3列的矩陣,如下圖:
       


      將A1:A2中的數(shù)據(jù)追加到矩陣后,如下圖示
       


      成為矩陣的第四列,如下圖示。


      單元格B1中是字符a,函數(shù)MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。

      (4) MLDeleteMatrix
      刪除Matlab空間中指定的矩陣
      在工作表中使用的語法:
      MLDeleteMatrix(var_name);
      在宏中使用的語法:
      MLDeleteMatrix var_name
      Var_name,是要刪除的矩陣名,如果矩陣名在引號內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
      例如,單元格B1中的內(nèi)容為a,MLDeleteMatrix(B1),則表示刪除Matlab工作空間的矩陣a,它等價于MLDeleteMatrix(”a”)
      (5) MLEvalString
      將命令(寫成字符串的形式)傳到Matlab中執(zhí)行。
      在工作表中使用的語法:
      MLEvalString(command);
      在宏中使用的語法:
      MLEvalString command
      參數(shù)command如果是用引號引起來”command”的形式,則是直接指定命令;如果不用引號引起來command的形式,則command必須是包含了命令字符串的工作表的單元格地址或者是范圍。
      例如:MLEvalString(”b=magic(4)”);
      表示在Matlab中執(zhí)行命令b=magic(4);
      (6) MLGetMatrix
      將指定的Matlab矩陣寫入到Excel工作表中的指定位置。
      在工作表中使用的語法:
      MLGetMatrix(var_name,edat)
      在宏中使用的語法:
      MLGetMatrix var_name,edat
      參數(shù)Var_name,是要寫入工作表的矩陣名,如果矩陣名在引號內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
      參數(shù)edat指定了矩陣寫入工組表的位置。如果參數(shù)是用引號引起”edat”的形式,則是直接指定矩陣名,如果參數(shù)不用引號引起edat的形式,則通過計算獲得矩陣名。
      例如:MLGetMatrix(”a”,”sheet1!B1”);
      將矩陣a寫入工作表sheet1以單元格B1起始的位置,如果a是一個2行3列的矩陣,則矩陣占據(jù)sheet1的B1到D2的空間。如果在A1中有字符串a(chǎn),則MLGetMatrix(A1,” sheet1!C1”)的作用與MLGetMatrix(”a”,”sheet1!C1”)相同。函數(shù)運行結(jié)果如圖示。
       

       

       


      (7) MLGetVar
      將MatLab矩陣傳送給Excel VBA變量,只能在宏子例程中使用。
      使用語法:
      MLGetVar ML_var_name,VBA_var_name
      參數(shù)ML_var_name是將獲取的矩陣名。如果矩陣名在引號內(nèi)“ML_var_name”的形式,則直接指定變量名,如果ML_var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
      參數(shù)VBA_var_name,將其Matlab矩陣數(shù)據(jù)傳給的VBA變量名,不用引號將其引起來。
      例如:
      Sub Fetch()
      MLGetVar "J", DataJ
      End Sub
      表示將Matlab矩陣J的數(shù)據(jù)寫入到VBA變量DataJ中。
      (8) MLPutMatrix
      用指定位置的Excel工作表中的數(shù)據(jù),創(chuàng)建或者覆蓋Matlab矩陣。
      在工作表中使用的語法:
      MLPutMatrix(var_name,mdat)
      在宏中使用的語法:
      MLPutString var_name,mdat
      參數(shù)var_name是將有被創(chuàng)建或者被覆蓋的矩陣名。如果指定的矩陣不存在,則創(chuàng)建該矩陣,如果矩陣已經(jīng)存在,則覆蓋該矩陣。
      參數(shù)mdat,指定工作表中的位置。
      例如:工作表中有A1到C2的數(shù)據(jù),使用函數(shù)MLPutMatrix(”c”,A1:C2),則可以將這些數(shù)據(jù)寫到Matlab矩陣c中,如下圖示。
       


      注意:如果修改工作表中的數(shù)據(jù),則Matlab中的矩陣相應發(fā)生變化。如果把數(shù)據(jù)剪切到別的地方,如D1到F2,則函數(shù)MLPutMatrix(”c”,A1:C2)會自動更改為MLPutMatrix(”c”,D1:F2)
       (9) MLPutVar
      使用VBA變量的數(shù)據(jù)創(chuàng)建或者覆蓋Matlab 矩陣。只能在宏子例程中使用。
      使用語法:
      MLPutVar ML_var_name,VBA_var_name
      參數(shù)ML_var_name是將被創(chuàng)建或覆蓋的矩陣名。如果矩陣名在引號內(nèi)“ML_var_name”的形式,則直接指定變量名,如果ML_var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
      參數(shù)VBA_var_name,將其數(shù)據(jù)傳給Matlab矩陣的VBA變量名,不用引號將其引起來。
      如果VBA_var_name變量包含字符串的數(shù)據(jù),則輸出到Matlab為元胞數(shù)組格式。
      例如:
      Sub Put()
      MLPutVar "K", DataK
      End Sub
      用VBA變量DataK中的數(shù)據(jù)創(chuàng)建或著覆蓋Matlab矩陣K。

      4. 補充使用Excel Link的注意事項
      (1) Excel工作表通常以“=”作為起始標記,例如=matlabfcn(”sum”,B1:B10);
      (2) 大多數(shù)的Excel Link函數(shù)中有兩種定義變量的方式:直接定義,即將變量用雙引號標記則是直接定義變量,例如MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定義的變量;間接定義,函數(shù)中的不用雙引號的工作表單元地址或行列名稱被看作是間接變量,函數(shù)對其指引的內(nèi)容進行操作。工作表單元地址可以包含頁表序號,例如MLDeleteMatrix(B1);單元格B1中的內(nèi)容為a,則相當于執(zhí)行MLDeleteMatrix(”a”);
      (3) 建議使用Excel Link的自動計算模式。如果在手動計算模式下使用MLGetMatrix函數(shù),當在單元格中輸入完函數(shù)等式時,需要按F9鍵執(zhí)行,而按下F9鍵將有可能引起其他工作表函數(shù)的重復執(zhí)行,產(chǎn)生不可預料的后果。設置Excel Link自動計算模式方法如下:在Excel“工具”菜單的“選項”,選擇重新計算標簽,圖4.2.13。
      (4) 如果需要在工作表中重新計算Excel Link函數(shù),最好按F2鍵和回車鍵單步執(zhí)行每個函數(shù)。
      (5) 如果在MLGetMatrix函數(shù)中使用了單元的直接地址,那么當刪除了行或列或者將函數(shù)從其他單元復制到新的單元后,一定要重新修改地址。Excel Link不能自動改變MLGetMatrix中的地址。
      (6) 在打開一個包含ExcelLink函數(shù)的Excel數(shù)據(jù)表的時候,Excel會自動從上到下,從左到右地執(zhí)行這些函數(shù),所有有可能出現(xiàn)如“#COMMAND!”或“#NONEXIST”等Excel錯誤提示,只需關閉所有Matlab圖形窗口,然后按F2鍵并回車重新單步執(zhí)行單元格里地函數(shù)就可以了。
       


      5. 在工作表和在宏中使用ExcelLink的例子
      例1 :(在工作表中使用ExcelLink)如下圖所示:
       


      使用mlopen()函數(shù)啟動Matlab,
      使用mlevalstring("load census")載入matlab自帶的數(shù)據(jù)文件census,其中包含矩陣cdate和pop。
      使用mlgetmatrix("cdate","E1"),將Matlab空間的矩陣cdata寫入到工作表中以E1開始的位置;
      mlgetmatrix("pop","F1");將Matlab空間的矩陣pop寫入到工作表中以F1開始的位置;
      運行結(jié)果如下圖所示: 
       


      mlputmatrix("x",E1:E21)
      mlputmatrix("y",F(xiàn)1:F21)
      將E1到E21中的數(shù)據(jù)以及F1到F21中的數(shù)據(jù)分別寫入到Matlab空間的矩陣變量x和y中。
      mlevalstring("z=x-mean(x)./std(x)")
      mlevalstring("[p2,s2]=polyfit(z,y,2)")
      mlevalstring("[pop2,de12]=polyval(p2,z,s2)")
      根據(jù)所給的數(shù)據(jù)擬合多項式并進行偏差計算。
      mlevalstring("plot(x,y,'+',x,pop2,'g-',…
      x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')")
      繪出離散點、擬合曲線圖及偏差曲線圖,結(jié)果如下圖示:

       


      mlclose();
      關閉Matlab。

      例2:在宏中使用Excel Link
      新建一個Excel工作表,打開Visual Basic編輯器,操作如下圖示:

       

       


      然后在工程管理器中插入模塊,如下圖:


      在模塊代碼區(qū)域?qū)懴氯缦麓a,如下圖:


      Function excellinktest()
      MLOpen
      mlevalstring "load census"
      mlgetmatrix "cdate", "E1"
      mlgetmatrix "pop", "F1"
      mlputmatrix "x", Range("E1:E21")
      mlputmatrix "y", Range("F1:F21")
      Matlabrequest
      mlevalstring "z=(x-mean(x))./std(x)"
      mlevalstring "[p2,s2]=polyfit(z,y,2)"
      mlevalstring "[pop2,del2]=polyval(p2,z,s2)"
      mlevalstring "plot(x,y,'+',x,pop2,'g-',x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')"
      End Function
       
      選中模塊1,在“工具”菜單,“引用”選項,如下圖示。


      彈出引用對話框,選擇Excel Link,如下圖:


      確定后,即可運行該程序,結(jié)果與例1相同。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多