網站首頁 學習教育 IT科技 金融知識 旅遊規劃 生活小知識 家鄉美食 養生小知識 健身運動 美容百科 遊戲知識 綜合知識
當前位置:趣知科普吧 > IT科技 > 

如何用matlab進行矩陣運算

欄目: IT科技 / 發佈於: / 人氣:1.1W

a = [1 2 3; 4 5 6; 7 7 8];b = [1 2 2; 2 3 4];A = prod(a,2)';B = prod(b,2)';[ma,n] = size(a);[mb,n] = size(b);R = zeros(mb,ma);for r = 1:mb R(r,:) = B(r)*A;endR R = 24 480 1568 144 2880 9408

矩陣分析可以解決很多問題,但很多時候矩陣的運算比較繁瑣,特別是高階矩陣運算。這時候如果用matlab來計算就方便快捷得多。下面就爲大家介紹怎麼用matlab進行矩陣運算的步驟

首先可以求點乘,維數肯定要相同; “.*”和“*”的區別: 在進行數之間的運算時“.*”和“*”是沒有區別的,都是表示普通的乘法運算。例:m = 2,n = 3,m.*n = 6, m*n = 6。 在進行矩陣之間的運算時“.*”和“*”的意義就有所不同了。假設a,b表示兩個矩

約定:

     a=[1,3,5;2,4,6;7,9,8]    b=[9,6,4;3,4,5;2,3,4]

用xor函數,比如xor(A,B) 參看http://www.mathworks.com/help/matlab/ref/xor.html?refresh=true

如何用matlab進行矩陣運算

材料/工具

matlab

1,收先開啟Matlab軟件,在軟件界右側點擊鼠標右鍵,選擇“new file”,點擊“script”新建一個檔案: 2、在腳本里隨意輸入一個簡單的矩陣,matlab裏矩陣轉置實現起來比較容易,只需要透過英文的單引號就能實現轉置操作: 3、按回車鍵之後,就可以看

方法

加和減:

加減法的命令很簡單,直接用加或者減號就可以了。如:c=a+b d=a-b

你不可以這麼寫。首先必須將A轉化爲syms,所以你應該這麼寫 >>A=sym(A); >>syms a >>A(1,1)=a; 這樣再試試呢?

如何用matlab進行矩陣運算 第2張

乘法:

一般乘法:c=a*b,要求a的列數等於b的行數。

加和減: 加減法的命令很簡單,直接用加或者減號就可以了。如: c=a+b d=a-b 乘法: 一般乘法:c=a*b,要求a的列數等於b的行數。 如果a,b是一般的向量,如a=[1,2,3] b=[3,4,5] 點積: dot(a,b), 叉積: cross(a,b) 卷積: conv(a,b) 除法:一般

如果a,b是一般的向量,如a=[1,2,3] b=[3,4,5]

矩陣沒有指數和對數運算 數組運算:.^(指數)是對應元素的運算,與矩陣運算完全不同。 矩陣運算:+ - * / -1(求逆) 等運算

點積:dot(a,b),

此題考查特徵值的性質 用常用性質解此題: 1.A的行列式等於A的全部特徵值之積 所以 |A| = -1*1*2 = -2 2.若a是可逆矩陣A的特徵值,則 |A|/a 是A*的特徵值 所以A*的特徵值爲 2,-2,-1 所以|A*| = 2*(-2)*(-1) = 4. 注:當然也可用伴隨矩陣的行列式性

叉積:cross(a,b)

轉自知乎: 原帖連結:http://www.zhihu.com/question/19706331 MATLAB的矩陣計算使用的是Intel自己出的Math kernel library(MKL),這個庫遠比其他的blas/lapack庫要快。C快在循環,要想矩陣計算也和MATLAB一樣快,那就得連結MKL,寫起來免不了

卷積: conv(a,b)

轉自知乎: 原帖連結:http://www.zhihu.com/question/19706331 MATLAB的矩陣計算使用的是Intel自己出的Math kernel library(MKL),這個庫遠比其他的blas/lapack庫要快。C快在循環,要想矩陣計算也和MATLAB一樣快,那就得連結MKL,寫起來免不了

如何用matlab進行矩陣運算 第3張

除法:一般在解線性方程組時會用到

要計算三維矩陣每一層的norm的話,用for是比較合適的,如果必須不用for的話,你可以試試這個流程: >> a = randn( 2, 2, 3 ) a(:,:,1) = 0.3129 -0.0301 -0.8649 -0.1649 a(:,:,2) = 0.6277 1.1093 1.0933 -0.8637 a(:,:,3) = 0.0774 -1.1135 -1

x=ab 如果ax=b,則 x=ab是矩陣方程的解。

pa = prod(a, 2);pb = prod(b, 2);repmat(pa', numel(pb), 1) - repmat(pb, 1, numel(pa))

x=b/a 如果xa=b,則x=b/a是矩陣方程的解。

對於使用變量的矩陣運算,首先必須要定義變量名稱,在Matlab中透過使用syms來定義非常方便,透過運算後將變量替換爲具體的數值,下面爲具體的一個實例: 1.定義變量 syms x y z; 2.定義矩陣 R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1]; R2=[

如何用matlab進行矩陣運算 第4張

轉置:

轉置時,矩陣的第一行變成第一列,第二行變成第二列,。。。

首先,肯定是算法上的優化,它沒有直接按照定義去做乘,而是先對矩陣做了一些變換再乘,目的就是減少重複運算的次數。關於這個,你可以去看下Knuth的The art of programming的第一卷,那裏面有例子說明怎樣算最快; 其次,如果你想看些原代碼,

x=a.'

如何用matlab進行矩陣運算 第5張

求逆:

要求矩陣爲方陣。x=inv(a)

可以這樣,m檔案不應該聲明爲函數,也就是上面沒有聲明function的纔可以,三個檔案均作爲命令腳本執行,這樣運算的東西都會放到工作區當中,先執行T1再執行T2 T3就可以了 如果已經是m檔案函數的形式可以用global的方法將變量匯出

如何用matlab進行矩陣運算 第6張

擴展閱讀,以下內容您可能還感興趣。

如何寫出比 MATLAB 更快的矩陣運算程序

轉自知乎:

原帖連結:http://www.zhihu.com/question/19706331

MATLAB的矩陣計算使用的是Intel自己出的Math kernel library(MKL),這個庫遠比其他的blas/lapack庫要快。C快在循環,要想矩陣計算也和MATLAB一樣快,那就得連結MKL,寫起來免不了各種折騰。而且,即使你連結上了,編譯時各種優化選項之類的還是比不上人家專業的設定,速度很難接近MATLAB。

我自己在Gentoo上試過源裏的所有blas/lapack庫,無一能與MKL匹敵,而且連接近都不可能。甚至我把python的NumPy庫連結上MKL後,速度也只是勉強接近。由於Gentoo的MKL庫永遠是最新的,而每一個新版本的MKL庫對矩陣計算都有略微提升,導致可能暫時NumPy與MATLAB可以匹敵。但是一旦更新版本的MATLAB出來後,它會使用上更新的MKL庫,這種領先優勢就又喪失殆盡。你可以在MATLAB文檔搜尋中輸入MKL,這樣會被定位到MATLAB release notes,而裏面就會含有這麼一句話“Upgrade to Intel Math Kernel Libraries”,這就是每一個版本MATLAB矩陣計算都越發*快的原因。

當然,剛我提到的python,其矩陣計算速度雖然微微落後於MATLAB,但是在很多其他地方是可以大大強於MATLAB的。例如繪製大規模三維點雲,以及輕鬆調用gpu之類的。因此python在矩陣計算的微小速度劣勢完全可以忽略,可以考慮用於科學計算。

Matlab 三維矩陣操作怎樣用矩陣運算代替for循環

要計算三維矩陣每一層的norm的話,用for是比較合適的,如果必須不用for的話,你可以試試這個流程:

>> a = randn( 2, 2, 3 )

a(:,:,1) =

0.3129 -0.0301

-0.8649 -0.1649

a(:,:,2) =

0.6277 1.1093

1.0933 -0.8637

a(:,:,3) =

0.0774 -1.1135

-1.2141 -0.0068

>> a1 = cellfun( @( x ) norm( x ), num2cell( a, [ 1 2 ] ) );

>> a1 = a1( : )

a1 =

0.9312

1.4482

1.2260

思路就是把三維矩陣轉爲一個元胞序列,元胞裏的每個元素就是原始矩陣的每一層,然後利用cellfun函數進行批量計算。

怎麼用MATLAB實現兩個矩陣之間的運算

pa = prod(a, 2);

pb = prod(b, 2);

repmat(pa', numel(pb), 1) - repmat(pb, 1, numel(pa))

matlab中怎麼用將矩陣當成自變量帶入函數運算?

對於使用變量的矩陣運算,首先必須要定義變量名稱,在Matlab中透過使用syms來定義非常方便,透過運算後將變量替換爲具體的數值,下面爲具體的一個實例:

1.定義變量

syms x y z;

2.定義矩陣

R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1];

R2=[cos(y) 0 sin(y);0 1 0;-sin(y) 0 cos(y)];

R3=[1 0 0;0 cos(z) -sin(z);0 sin(z) cos(z)];

3.求解矩陣

a=R1*R2*R3

4.變量替換

subs(a,{x,y,z},{0,pi/2,0})

則能夠直接求解出矩陣a的具體值。

完整的程序如下,直接儲存爲.m檔案可以直接執行:

syms x y z;

R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1];

R2=[cos(y) 0 sin(y);0 1 0;-sin(y) 0 cos(y)];

R3=[1 0 0;0 cos(z) -sin(z);0 sin(z) cos(z)];

a=R1*R2*R3;

subs(a,{x,y,z},{0,pi/6,pi/3})

PS:關於subs函數的使用 subs(f,{old},{new});

其中f是關於old的變量函數,new爲具體的數值

matlab 矩陣快速運算是怎麼實現的

首先,肯定是算法上的優化,它沒有直接按照定義去做乘,而是先對矩陣做了一些變換再乘,目的就是減少重複運算的次數。關於這個,你可以去看下Knuth的The art of programming的第一卷,那裏面有例子說明怎樣算最快;

其次,如果你想看些原代碼,貌似matlab在很久前就開始用LAPACK這個數學包了,LAPACK是開源的,是個數*算的包。你可以google下。

最後,stackexchange上有差不多的問題,比較了下各語言的速度,我給你粘貼下。

1024x1024 2048x2048 4096x4096

--------------- -------------- ---------------

CUDA C (ms) 43.11 391.05 3407.99

C++ (ms) 6137.10 64369.29 551390.93

C# (ms) 10509.00 300684.00 2527250.00

Java (ms) 9149.90 92562.28 838357.94

MATLAB (ms) 75.01 423.10 3133.90

當然上面的C++用的算法我猜是按定義直接算的。