懂視移動(dòng)端 視頻1 視頻21 視頻41 視頻61 視頻文章1 視頻文章21 視頻文章41 視頻文章61 推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37 推薦39 推薦41 推薦43 推薦45 推薦47 推薦49 關(guān)鍵詞1 關(guān)鍵詞101 關(guān)鍵詞201 關(guān)鍵詞301 關(guān)鍵詞401 關(guān)鍵詞501 關(guān)鍵詞601 關(guān)鍵詞701 關(guān)鍵詞801 關(guān)鍵詞901 關(guān)鍵詞1001 關(guān)鍵詞1101 關(guān)鍵詞1201 關(guān)鍵詞1301 關(guān)鍵詞1401 關(guān)鍵詞1501 關(guān)鍵詞1601 關(guān)鍵詞1701 關(guān)鍵詞1801 關(guān)鍵詞1901 視頻擴(kuò)展1 視頻擴(kuò)展6 視頻擴(kuò)展11 視頻擴(kuò)展16 文章1 文章201 文章401 文章601 文章801 文章1001 資訊1 資訊501 資訊1001 資訊1501 標(biāo)簽1 標(biāo)簽501 標(biāo)簽1001 關(guān)鍵詞1 關(guān)鍵詞501 關(guān)鍵詞1001 關(guān)鍵詞1501
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 手機(jī) - 正文

如何用matlab進(jìn)行矩陣運(yùn)算

來源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-04-03 21:09:29
導(dǎo)讀如何用matlab進(jìn)行矩陣運(yùn)算,a=[123;456;778];b=[122;234];A=prod(a,2);B=prod(b,2);[ma,n]=size(a);[mb,n]=size(b);R=zeros(mb,ma);forr=1:mbR(r,:)=B(r)*A;endRR=24480156814428809408矩陣分析可以解決很多問題,但很多時(shí)候矩陣的運(yùn)算比較繁瑣,特別是高階矩

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

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

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

約定:

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

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

材料/工具

matlab

1,收先打開Matlab軟件,在軟件界右側(cè)點(diǎn)擊鼠標(biāo)右鍵,選擇“new file”,點(diǎn)擊“script”新建一個(gè)文件: 2、在腳本里隨意輸入一個(gè)簡單的矩陣,matlab里矩陣轉(zhuǎn)置實(shí)現(xiàn)起來比較容易,只需要通過英文的單引號就能實(shí)現(xiàn)轉(zhuǎn)置操作: 3、按回車鍵之后,就可以看

方法

加和減:

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

你不可以這么寫。首先必須將A轉(zhuǎn)化為syms,所以你應(yīng)該這么寫 >>A=sym(A); >>syms a >>A(1,1)=a; 這樣再試試呢?

乘法:

一般乘法:c=a*b,要求a的列數(shù)等于b的行數(shù)。

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

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

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

點(diǎn)積:dot(a,b),

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

叉積:cross(a,b)

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

卷積: conv(a,b)

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

除法:一般在解線性方程組時(shí)會用到。

要計(jì)算三維矩陣每一層的norm的話,用for是比較合適的,如果必須不用for的話,你可以試試這個(gè)流程: >> 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是矩陣方程的解。

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

轉(zhuǎn)置:

轉(zhuǎn)置時(shí),矩陣的第一行變成第一列,第二行變成第二列,。。。

首先,肯定是算法上的優(yōu)化,它沒有直接按照定義去做乘,而是先對矩陣做了一些變換再乘,目的就是減少重復(fù)運(yùn)算的次數(shù)。關(guān)于這個(gè),你可以去看下Knuth的The art of programming的第一卷,那里面有例子說明怎樣算最快; 其次,如果你想看些原代碼,

x=a.'

求逆:

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

可以這樣,m文件不應(yīng)該聲明為函數(shù),也就是上面沒有聲明function的才可以,三個(gè)文件均作為命令腳本運(yùn)行,這樣運(yùn)算的東西都會放到工作區(qū)當(dāng)中,先執(zhí)行T1再執(zhí)行T2 T3就可以了 如果已經(jīng)是m文件函數(shù)的形式可以用global的方法將變量導(dǎo)出

擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。

如何寫出比 MATLAB 更快的矩陣運(yùn)算程序

轉(zhuǎn)自知乎:

原帖鏈接:http://www.zhihu.com/question/19706331

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

我自己在Gentoo上試過源里的所有blas/lapack庫,無一能與MKL匹敵,而且連接近都不可能。甚至我把python的NumPy庫鏈接上MKL后,速度也只是勉強(qiáng)接近。由于Gentoo的MKL庫永遠(yuǎn)是最新的,而每一個(gè)新版本的MKL庫對矩陣計(jì)算都有略微提升,導(dǎo)致可能暫時(shí)NumPy與MATLAB可以匹敵。但是一旦更新版本的MATLAB出來后,它會使用上更新的MKL庫,這種領(lǐng)先優(yōu)勢就又喪失殆盡。你可以在MATLAB文檔搜索中輸入MKL,這樣會被定位到MATLAB release notes,而里面就會含有這么一句話“Upgrade to Intel Math Kernel Libraries”,這就是每一個(gè)版本MATLAB矩陣計(jì)算都越發(fā)*快的原因。

當(dāng)然,剛我提到的python,其矩陣計(jì)算速度雖然微微落后于MATLAB,但是在很多其他地方是可以大大強(qiáng)于MATLAB的。例如繪制大規(guī)模三維點(diǎn)云,以及輕松調(diào)用gpu之類的。因此python在矩陣計(jì)算的微小速度劣勢完全可以忽略,可以考慮用于科學(xué)計(jì)算。

Matlab 三維矩陣操作怎樣用矩陣運(yùn)算代替for循環(huán)

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

>> 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

思路就是把三維矩陣轉(zhuǎn)為一個(gè)元胞序列,元胞里的每個(gè)元素就是原始矩陣的每一層,然后利用cellfun函數(shù)進(jìn)行批量計(jì)算。

怎么用MATLAB實(shí)現(xiàn)兩個(gè)矩陣之間的運(yùn)算

pa = prod(a, 2);

pb = prod(b, 2);

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

matlab中怎么用將矩陣當(dāng)成自變量帶入函數(shù)運(yùn)算?

對于使用變量的矩陣運(yùn)算,首先必須要定義變量名稱,在Matlab中通過使用syms來定義非常方便,通過運(yùn)算后將變量替換為具體的數(shù)值,下面為具體的一個(gè)實(shí)例:

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文件可以直接運(yùn)行:

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:關(guān)于subs函數(shù)的使用 subs(f,{old},{new});

其中f是關(guān)于old的變量函數(shù),new為具體的數(shù)值

matlab 矩陣快速運(yùn)算是怎么實(shí)現(xiàn)的

首先,肯定是算法上的優(yōu)化,它沒有直接按照定義去做乘,而是先對矩陣做了一些變換再乘,目的就是減少重復(fù)運(yùn)算的次數(shù)。關(guān)于這個(gè),你可以去看下Knuth的The art of programming的第一卷,那里面有例子說明怎樣算最快;

其次,如果你想看些原代碼,貌似matlab在很久前就開始用LAPACK這個(gè)數(shù)學(xué)包了,LAPACK是開源的,是個(gè)數(shù)*算的包。你可以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

當(dāng)然上面的C++用的算法我猜是按定義直接算的。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

標(biāo)簽: 大眾
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

iphone6s怎么安裝xy助手提示未受信任的企業(yè)級開發(fā)者 如何在word中使文檔分頁 優(yōu)酷緩存的視頻如何導(dǎo)出 如何將qq音樂里的歌曲快速導(dǎo)入到ipod shuffle 360瀏覽器出現(xiàn)亂碼的解決方法是什么 3dmax彎曲怎么用?彎曲命令詳解是什么 ps中涂抹工具和模糊工具怎么用 c盤哪個(gè)文件夾可以刪 怎么用手機(jī)號查詢ems快遞 蘋果手機(jī)電量百分比顯示如何設(shè)置! 電腦打不出漢字是什么原因? 家庭無線局域網(wǎng)怎么組建 怎么批量提取文件名到excel表 新版微博應(yīng)該怎么看好友在線 adobe audition cs6怎么使用錄音 ipad應(yīng)該怎樣升級系統(tǒng) 163郵箱怎么登陸 coreldraw:[1]coreldraw應(yīng)該怎么修改背景顏色 移動(dòng)硬盤上的文件夾加密方法是什么 如何添加或刪除pdf中的文字和圖片內(nèi)容 怎么將excle表格中的圖片批量居中對齊 怎么解決winxp訪問win10共享打印機(jī)提示憑據(jù)不足 個(gè)人簡歷模版怎么制作 如何把多個(gè)pdf文件合并 小技巧教你怎么解決此windows副本不是正版的問題 iphone徹底清除緩存的方法是什么 嗨氏電腦按鍵設(shè)置教程是什么 iphone手機(jī)怎么清理垃圾 怎么查看電腦顯卡信息 怎么給視頻文件添加片頭片尾 怎么在ps中載入圖案 如何用上古卷軸5的mod管理器mo 怎樣用美圖秀秀手動(dòng)摳圖 蘋果官網(wǎng)怎么查序列號,蘋果6序列號官網(wǎng)查詢 gx developer安裝教程是什么 如何查看cad中某點(diǎn)的坐標(biāo) 添加打印機(jī)提示操作無法完成應(yīng)該怎么辦 object error解決方法是什么 cutterman官網(wǎng)下載 word文檔字體如何變大
Top