奇迹觉醒角色重生:tag 標簽: matlab

相關帖子

版塊 作者 回復/查看 最后發表
matlab求最大值問題 MATLAB 基礎討論 lancelot9234 2012-1-26 2 3407 WHUT小王 2012-2-2 19:38
【請教】數據保存問題——帶括號,數據列數不一樣 attach_img MATLAB 基礎討論 歐拉 2012-1-26 0 2654 歐拉 2012-1-26 11:51
matlab編程中遇到問題,請求解 MATLAB 并行計算 annylsxy 2012-1-26 5 3087 meatbird 2012-2-6 11:45
求助:matlab三維圖像怎么保存成tiff圖片 MATLAB 圖像處理與計算機視覺 sc527 2012-1-27 2 2965 xinyangq 2013-1-1 23:25
求助mac下如何安裝matlab MATLAB 基礎討論 lyastc 2012-1-27 2 4805 blueskyjiangzhe 2012-4-15 19:21
轉向的matlab的最小二乘優化 MATLAB 數學、統計與優化 sn4187189 2012-1-27 1 3338 sn4187189 2012-1-27 15:02
菜鳥求助:這個方程能用matlab解么 MATLAB 數學、統計與優化 sc527 2012-1-28 1 3012 WHUT小王 2012-2-2 19:30
跪求改進的FCM算法,用于彩圖和灰度圖像的matlab源代碼。 會議&論文 pli210 2012-1-28 2 4578 余勝威 2016-3-6 11:54
matlab中如何實現用圖像顯示讀取的數據? MATLAB/Simulink 項目外包 huangminbigc 2012-1-28 5 4660 簡單吟唱 2013-6-13 16:56
求matlab濾波器設計中衰減和波紋的含義 attach_img MATLAB 信號處理與通信 nimingzhe2008 2012-1-29 1 3587 baiwei19890914 2013-3-10 01:14
matlab 2010b版本64位的ActiveX控件和書上不同? attach_img 《MATLAB GUI設計學習手記》含第二、三版 wuqian4139 2012-1-29 3 4472 dongshaofeng 2012-8-28 10:14
求助matlab球轉換面 MATLAB 數學、統計與優化 hemiro 2012-1-29 0 2022 hemiro 2012-1-29 21:44
請教matlab向量化問題 MATLAB 基礎討論 lqshera 2012-1-30 2 4444 lqshera 2012-1-30 13:54
如何減少Matlab通過采集卡輸入輸出的耗時 MATLAB 測試&測量 alberich 2012-1-30 1 2882 雪_真落 2012-12-7 08:21
信號采樣,濾波器設計用matlab如何編程 MATLAB 信號處理與通信 Apirl 2012-1-30 6 4122 1831249703qaz 2014-5-5 22:19
在用matlab做com組建出錯 MATLAB 基礎討論 omig001 2012-1-30 0 1698 omig001 2012-1-30 21:57
請教matlab無放回隨機抽樣 MATLAB 數學、統計與優化 wqp89324 2012-1-31 8 11664 zega15 2014-4-17 15:39
請教matlab如何從網絡接收文件 MATLAB 基礎討論 lqshera 2012-1-31 3 3396 愛問功夫 2013-3-9 13:17
matlab真奇了怪了,a quick question MATLAB 基礎討論 臺風眼 2012-1-31 5 2787 gxtzhuxi 2012-2-6 00:44
急征高人解matlab積分 MATLAB 基礎討論 hola11 2012-1-31 1 2284 hola11 2012-1-31 15:01

相關日志

分享 matlab中for循環改矢量運算的技巧
熱度 1 halleyhit 2018-7-5 14:17
前言:這是一個很有matlab特色的事情,matlab的for循環實在很慢,而矢量(矩陣)運算又很快,因此很多時候,可以對代碼進行優化,盡可能去掉for循環。本篇將討論for循環能否去掉,以及如何去掉。 1.概念 for循環:語法在最基礎教程中已經說過,這里僅舉一例 for i=1:3 a(1,i)=i^2; end 最后獲得一個向量a= 矢量運算:語法見最基礎教材中的賦值和數值型變量運算部分,這里同樣舉一例 a= .^2 獲得同樣的計算結果a= 2.去掉for循環的前提 如果需要的結果(一個矩陣或向量),每個元素有通項公式,則可以去掉for循環。反之,若每個元素只有遞推公式,則不可以去掉for循環。 這里結合幾個通項公式的例子進行說明: 1)向量,a(i)=i^2 與上一部分的例子一樣,可以矢量運算去掉for循環 2)向量,a(i)=i^2*(i2)+i*(i=2) 這個是if的矢量化,只要if判據可以寫成通項公式,則依然可以用矢量運算 a0= a=a0.^2.*(a02)+a0.*(a0=2) 這里a02的邏輯運算,語法規則是:a0是矩陣,與1*1元素進行比較,則返回結果是與a0同維度矩陣,元素為a0元素單獨邏輯計算的結果。 3)向量,a0=1:n,a(i)=a0(i)-a0(i-1) 這里,a0是一個已知的向量,需要基于a0,計算一個向量a,而a的通項公式是與a0有關的。更特別的是,a(i)的計算中,不僅與a0(i)有關,還與前一項有關,當然這里僅計算a(2)到a(n),a(1)我們強制定義成0。則這樣的算法可以去for循環,寫成 n=3 a0=1:n a= 當然,對數值運算熟悉的用戶,也可以直接寫成a= 4)矩陣,灰度圖像均值5格濾波 簡單說,灰度圖像可以表示為一個矩陣,矩陣中每個點表示一個像素的灰度,然后這些像素排列在一起就是一副圖像了。有一種簡單的濾波,其算法是將圖像中的每一個像素,與該像素相鄰的上下左右四個像素,一共五個像素的灰度取平均值,然后作為濾波后圖像在該位置的灰度。當然,對圖像最靠邊的一行或列,因為相鄰像素不足4個,所以可以不進行濾波計算。這樣的算法當然可以寫成for循環: n=5 A=rand(n,n) %假定圖片A的大小是n*n B=A %假定濾波后的圖片為B,由于邊緣無需濾波,所以直接賦值,后續for循環修改非邊緣值 for i=2:n-1 for j=2:n-1 B(i,j)=0.2*(A(i,j)+A(i-1,j)+A(i,j-1)+A(i+1,j)+A(i,j+1)) end end 而此時,我們注意到B(i,j)=那行,其實正是通項公式,于是就可以進行矢量化 B(2:n-1,2:n-1)=0.2*(A(2:n-1,2:n-1)+A(1:n-2,2:n-1)+A(2:n-1,1:n-2)+A(3:n,2:n-1)+A(2:n-1,3:n)) 3.去掉for循環的方法 從上述例子中,我們也可以總結出去掉for循環的方法,大概的步驟如下: 1)寫出通項公式 2)將通項公式中的循環變量i或j等,替換成1:end 3)如果通項公式中有循環變量i,使用等差數列賦值1:n代替,比如例子1。對于多個循環變量,代替時需要repmat。 4)由于matlab矩陣索引中,1:end可以直接寫成冒號,尤其是,如果被索引的是向量,則只有一個維度,有沒有冒號都一樣,所以此時就成了例子2的情況。 5)對于通項公式中,索引中有類似i+1這類的情況,則計算結果不可能全部用通項,肯定有邊緣部分是另外的,如例3的情況。 6)對于通項公式中,索引中有類似i+1這類的情況,則通項公式中,左側需要新的索引,右側的索引也同樣變更,如例4的情況。 4.不能去掉for循環的情況 很明顯,不能寫成通項公式,即不滿足前提條件,那么就只能for循環了。這里需要對“沒有通項公式”做一點說明,沒有的意思,一種是真的沒有,另一種是很難獲得。比如斐波那契數列,遞推公式很容易寫成for循環,但通項公式就很復雜了,所以有時會選擇用for循環而放棄矢量運算?;褂幸恢智榭鍪莍f的條件非常復雜,如果寫成通項公式會很麻煩,也會考慮用for循環去做。對于真的沒有通項公式的,那就不必多言了。 5.后序 去掉for循環,需要用戶對matlab的矩陣運算非常熟悉,這或許才是真正的“前提”吧
個人分類: 新分類|924 次閱讀|1 個評論
分享 MATLAB算法加速技術
熱度 4 柚籽 2014-7-14 16:12
算法加速方法很多,看你的編程經驗如何了,或者是你用了怎樣的算法,硬件。 文章: //www.mathworks.cn/discovery/matlab-acceleration.html?s_v1=804elq_cid=1591528 Top 5 使用高效的編程方式 - 預定義存儲空間與向量化編程 It’s a good practice to optimize your serial code for performance before considering other approaches. Two effective programming techniques for MATLAB acceleration are preallocation and vectorization . 使用優化的算法版本 - 如專門工具箱 MATLAB and related toolboxes have already been optimized for performance. For example, System objects are object-oriented implementations of MATLAB algorithms that can accelerate MATLAB code, particularly for signal processing and communications applications. 使用并行運算 Multicore CPUs, GPUs , and clusters can accelerate MATLAB code. High-level parallel constructs in Parallel Computing Toolbox let you take advantage of high-performance hardware with minimal programming effort. The toolbox also enables the parallel computing support found in many functions and algorithms in MATLAB products. MATLAB代碼生成C代碼 - 運行速度更快 To accelerate some MATLAB algorithms, you can generate readable and portable C code and compile it into a MATLAB executable. Much of the MATLAB language and several toolboxes support code generation through MATLAB Coder . 以上結合 For some applications, you can combine these methods for additional MATLAB acceleration . 詳情包括案例點擊: //www.mathworks.cn/discovery/matlab-acceleration.html?s_v1=804elq_cid=1591528 推薦案例: //www.mathworks.cn/company/newsletters/articles/accelerating-matlab-algorithms-and-applications.html
個人分類: MATLAB|1539 次閱讀|0 個評論
分享 matlab如何生成dll文件
熱度 3 柚籽 2014-5-12 17:08
matlab如何生成dll文件
1. m腳本,保存為addmatrix.m文件: function a = addmatrix(a1, a2) a = a1 + a2; 2. 打開MATLAB Compiler: 從APP列表里找到,或者deploytool,選擇shared library 3. 編譯結束之后,在 \for_redistribution_files_only下 新建一個cpp文件: #include "addmatrix.h" int run_main(int argc, char **argv) { if (!mclInitializeApplication(NULL,0)) //初始化MCR運行環境 { std::cerr "could not initialize the application properly" std::endl; return -1; } if( !addmatrixInitialize() ) //初始化程序 { std::cerr "could not initialize the library properly" std::endl; return -1; } try { // 定義輸入變量 double data[] = {1,2,3,4,5,6,7,8,9}; mwArray in1(3, 3, mxDOUBLE_CLASS, mxREAL); mwArray in2(3, 3, mxDOUBLE_CLASS, mxREAL); in1.SetData(data, 9); in2.SetData(data, 9); // 定義輸出變量 mwArray out; // mwArray,是MATLAB所編譯的代碼所使用的類 // 作為MATLAB編譯出來的代碼的函數數據交換接口 // 調用dll函數 addmatrix(1, out, in1, in2); std::cout "The value of added matrix is:" std::endl; std::cout out std::endl; } catch (const mwException e) { std::cerr e.what() std::endl; return -2; } catch (...) { std::cerr "Unexpected error thrown" std::endl; return -3; } addmatrixTerminate(); //釋放程序所使用的資源 mclTerminateApplication(); //釋放MCR環境所使用的資源 return 0; } int main() { mclmcrInitialize(); //初始化MCR環境 return mclRunMain((mclMainFcnType)run_main,0,NULL); //新建一個線程運行程序 } 4. mbuild addmatrix.cpp addmatrix.lib Building with 'Microsoft Visual C++ 2010'. MEX completed successfully. 5. 運行addmatrix.exe
個人分類: MATLAB|1847 次閱讀|0 個評論
分享 Matlab plot函數用法
熱度 8 藤~~~ 2013-8-21 16:48
1 plot ( x ): x 為長度為 n 的數值向量,坐標的縱坐標是向量 x ,橫坐標為 matlab 系統根據 x 向量的元素序號自動生成的從 1 開始的向量。 2 plot ( x , y ): 縱坐標是 y ,橫坐標是 x 。 x , y 向量的數目必須相等。 3 axis ( ) :設定坐標軸的范圍。 4 plot ( x ): x 為 m*n 的矩陣, plot(x) 命令為矩陣的每一列畫出一條線,共 n 條,曲線的橫坐標為向量 1 : m , m 是矩陣的行數。 5 plot(z): 可以復制復向量曲線它與( plot(real(z),imag(z)) 等效,以實部為橫坐標,虛部為縱坐標。 6 plot(x1,y1,x2,y2...) : 繪制多條曲線 繪制圖形的一般步驟: 1 曲線數據備份 對于二維曲線,橫坐標和縱坐標數據變量; 對于三維曲面,矩陣參變量和對應的函數值 2 指定圖形窗口和子圖位置: 默認時,打開 Figure No.1 窗口或當前窗口,當前子圖; 也可以打開指定的圖形窗口和子圖 3 設置曲線的繪制方式: 線型,色彩,數據點形 4 設置坐標軸: 坐標的范圍,刻度和坐標分格 5 圖形注釋 圖名,坐標名,圖例,文字說明 6 著色,明暗,燈光,材質處理(僅對三維圖形處理) 7 視點,三度(橫,縱,高)比(僅對三維圖形處理) 8 圖形的精細修飾 (圖形句柄操作): 利用對象屬性值設置 利用圖形窗工具條進行設置 說明: 1 ) 步驟 1 和 3 是最基本的繪圖步驟, matlab 一般只需要這 2 步就可以繪制出圖形。 2 )步驟 2 一般在圖形較多的情況下,需要制定圖形窗口,子圖時使用。 3 ) 除了 1 2 3 的其他步驟,用戶可以根據自己的需要改變前后次序。 多個圖形繪制的方法: 1 指定圖形窗口 需要多個圖形窗口同時打開時,可以使用 figure 語句: figure ( n ): figure ( 1 ), figure ( 2 ) ... 2 同一個窗口多個子圖 可以通過在 plot 命令前加上 subplot 命令來實現 subplot ( m,n,k) % 使 m*n 幅子圖中的第 k 幅成為當前圖 說明:將圖形窗口劃分為 m*n 幅子圖, k 是當前子圖的編號。 同一個窗口多次疊繪 為了在一個坐標系中增加新的圖形對象,可以使用 hold 命令來保留原圖形對象 hold on % 使用當前坐標系和圖形保留 hold off % 使用當前坐標系和圖形不保留 hold % 在以上 2 個命令中切換 說明:在設置了 hold on 后,如果畫多個圖形對象,則在生成新的圖象時保留當前坐標系中已經存在的圖象, matlab 會根據新圖形的大小,重新改變坐標系的比例。 雙坐標軸圖 plotyy :實現同一圖形中使用左,右雙坐標來繪制曲線 plotyy ( x1,y1,x2,y2) % 以左右不同縱軸繪制 2 條曲線 說明:左縱軸用于( x1,y1) 的數據,右縱軸用于 (x2,y2) 數據來繪制 2 條曲線,坐標軸的范圍可刻度都自動產生 曲線的線形,顏色和數據點形 顏色 數據點間連線 數據點形 類型 符號 類型 符號 類型 符號 黃色 y ( yellow ) 實線 — 實點標記 . 紫色 m ( magenta ) 點線 : 圓圈標記 o 青色 c ( cyan ) 點畫線 _. 叉號形 x 紅色 r ( red ) 虛線 —— 十字形 + + 綠色 g ( green ) 星號 * 藍色 b ( blue ) 方塊 s 白色 w ( white ) 鉆石形 d 黑色 k ( black ) 向下三角形 v 向上三角形 ^ 向左 向右 五角星標記 p 六連形標記 h 語法為: plot(x,y,s) 說明: x 為橫坐標矩陣, y 為縱坐標矩陣, s 為類型說明字符串參數。 設置坐標軸和文字標注 1 坐標軸的控制( axis ) axis auto :默認設置 axis manual :使當前坐標范圍不變 axis off :取消軸背景 axis on :使用軸背景 axis ij : 矩陣式坐標,原點在左上方 axis xy :普通直角坐標,原點在左下方 axis ( ):設定坐標的范圍,可以取 inf , -inf axis equal 縱坐標采用等長刻度 axis fill : 在 manual 方式下起作用,使坐標充滿整個繪圖區 axis image :縱橫坐標采用等長刻度,且坐標框緊貼數據范圍 axis normal :默認矩形坐標系 axis square : 產生正方形坐標系 axis tight :把數據范圍直接設為坐標范圍 axis vis3d : 保持高 寬比不變,用于三維旋轉時避免圖形大小變化 2 分格線和坐標框 1 )使用 grid 命令顯示分格線 grid on % 顯示分格線 grid off % 不顯示分格線 grid % 在以上 2 個命令間切換 2 )使用 box 命令顯示坐標框 box on % 使當前坐標框呈封閉形式 (默認) box off % 使當前坐標框呈開啟形式 box % 在以上 2 個命令間切換 文字標注 圖名( Title ),坐標軸名( label ),文字注釋( text ),圖例( legend ) 1 )添加圖名 title ( s ) % 書寫圖名 2 )添加坐標軸名 xlabel ( s ) ylabel ( s ) 3 )添加圖例 legend ( s , pos ) % 在指定位置建立圖例 legend off % 擦除當前圖中的圖例 說明: s 是圖例中的文字注釋,如果多個注釋可以用 's1','s2',... 的方式; pos 是圖例在圖上位置的指定符: pos 取值 0 1 2 3 4 -1 圖例位置 自動最佳位置 右上角 ( 默認) 左上角 左下角 右下角 圖右側 4 )添加文字注釋 text ( xt,yt,s) % 在圖形的 (xt,yt) 坐標處書寫文字注釋 在圖形中的文字中可以用特殊字符 希臘字母或者數學符號都有特殊的命令,這個可以查到 需要對文字進行上下設置,或者字體大小的設置,必須在文字標示前先使用文字設置值: fontname{s} 字體的名稱 s 為 Times New Roman 、 Courier 、宋體等 fontsize{n} 字號大小, n 為整數,默認為 10 ( points ) s 字體風格, s 可為 bf (黑體), it (斜體一)、 s1 (斜體二)、 rm (正體)等 ^{s} 將 s 變為上標 _{s} 將 s 變為下標 如 figure(1) title('fontsize{16}y(omega)=int^{infty}_{0}y(t)e^{-jomegat}dt') 交互式圖形命令 在 matlab 中還可以通過鼠標進行圖形操作,主要有 ginput 和 gtext 命令 1 ginput 僅使用于二維圖形 =ginput(n) % 用鼠標從圖形上獲取 n 個點的坐標( x,y) 2 gtext 把字符串放置到圖形中鼠標所指定的位置上,對二維,三維圖形都使用 gtext('s') % 用鼠標把字符串放置到圖形上
個人分類: 常用函數|9455 次閱讀|1 個評論
返回頂部