日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Matlab中的一些小技巧

發(fā)布時(shí)間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab中的一些小技巧 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.chinaunix.net/uid-20551209-id-3202608.html

1. Ctrl+C 中斷正在執(zhí)行的操作

如果程序不小心進(jìn)入死循環(huán),或者計(jì)算時(shí)間太長(zhǎng),可以在命令窗口中使用Ctrl+c來(lái)中斷。MATLAB這時(shí)可能正疲于應(yīng)付,響應(yīng)會(huì)有些滯后。

2. figure命令新建一個(gè)繪圖窗口

figure 可以打開(kāi)一個(gè)空的繪圖窗口,接下的繪圖命令可以將圖畫(huà)在它里面,而不會(huì)覆蓋以前的繪圖窗口。當(dāng)有多個(gè)figure窗口時(shí),在命令窗口中執(zhí)行如Plot等命令將覆蓋當(dāng)前figure窗口中的對(duì)象。所謂的當(dāng)前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)

figure(N),將編號(hào)為N的窗口置為當(dāng)前figure,出現(xiàn)在所有窗口的最前面,如果該窗口不存在,則新建一個(gè)編號(hào)為N的空白figure

3. 注釋掉一段程序:%{%}

經(jīng)典方法是用 if 0,但缺點(diǎn)是不夠直觀,注釋掉的內(nèi)容仍然保持代碼的顏色。現(xiàn)在可以用 %{ 的組合。輸入%{后,后面的代碼都會(huì)變綠,在注釋結(jié)束的地方再加上 %}

也可以選中要注釋內(nèi)容,在右鍵菜單中選擇Comment (Uncomment去掉注釋標(biāo)記),或使用快捷鍵Ctrl+R

將光標(biāo)放在需要注釋的行中,按Ctrl+R,將該行變?yōu)樽⑨尅H∠⑨屢彩且粯拥?#xff0c;快捷鍵為Ctrl+T

4. doc 命令名,打開(kāi)命令的幫助文檔

help命令不同,幫助文檔MATLAB Help中對(duì)命令的描述更詳細(xì),往往還有一些例子,更便于理解。

5. clc 清屏

清除命令窗口中的所有輸入和輸出信息,不影響命令的歷史記錄。

6. clear clear all

clear 變量名:可以清除workspace中的無(wú)用的變量,尤其是一些特別大的矩陣,不用時(shí)及時(shí)清理,可以減少內(nèi)存占用。

clear all 清除所有的變量,使workspace一無(wú)所有,當(dāng)重新開(kāi)始一次算法驗(yàn)證時(shí),最好執(zhí)行一次,讓workspace中的變量一目了然。

7. close all

如果開(kāi)了多個(gè)繪圖窗口,用這個(gè)命令將它們一起關(guān)掉。

8. 上下光標(biāo)鍵↑↓

在命令窗口中,上下光標(biāo)鍵可以將歷史記錄中的命令復(fù)制到輸入位置,便于快速重新執(zhí)行。如果輸入命令的前幾個(gè)字母如 [row, col] =,再使用光標(biāo)鍵,則只會(huì)選擇以這些字母開(kāi)始的命令。

9. Tab補(bǔ)全

對(duì)名稱(chēng)記得不太清楚的命令,可以輸入開(kāi)頭的幾個(gè)字母,然后按Tab鍵,當(dāng)只有一個(gè)以這些字母開(kāi)頭的命令時(shí),將自動(dòng)補(bǔ)全命令名,否則顯示一個(gè)命令名列表,方便從中選擇。當(dāng)然,只在命令窗口中有效。

10. cell模式

在一個(gè)長(zhǎng)長(zhǎng)的腳本m文件中,可能需要對(duì)其中的一段反復(fù)修改,查看執(zhí)行效果,這時(shí),cell模式就非常有用了。cell模式相當(dāng)于將其中的代碼拷貝到命令窗口中運(yùn)行。兩個(gè)%后接一個(gè)空格(%% )開(kāi)始一個(gè)cell。將輸入光標(biāo)放到一個(gè)cell中時(shí),背景將變?yōu)闇\黃色,Ctrl+Enter執(zhí)行cell中的代碼。

執(zhí)行cell中代碼時(shí)不需要保存m文件,該m文件可以不在路徑列表中。

cell模式中,斷點(diǎn)不起作用,當(dāng)然,調(diào)用的子程序中的斷點(diǎn)還是正常的。

11. 獲取文件列表,批處理

MATLAB內(nèi)置了一些文件操作命令,例如cd(切換工作目錄)dir(ls,顯示目錄內(nèi)文件列表)等。dir命令可以返回目錄中的文件和文件夾列表,存在一個(gè)結(jié)構(gòu)體數(shù)組中。如果需要對(duì)一些數(shù)據(jù)文件進(jìn)行批處理,而文件名又沒(méi)有一定的規(guī)律,你可能需要借助于這個(gè)命令。

?

Matlab注釋技巧

1. m文件如果是函數(shù),保存的文件名最好與函數(shù)名一致,這點(diǎn)都很清楚。不過(guò)容易疏忽的是,m文件名的命名盡量不要是簡(jiǎn)單的英文單詞,最好是由大小寫(xiě)英文/數(shù)字 /下劃線等組成。原因是簡(jiǎn)單的單詞命名容易與matlab內(nèi)部函數(shù)名同名,結(jié)果會(huì)出現(xiàn)一些莫名其妙的錯(cuò)誤。例如,寫(xiě)個(gè)m文件,命名為spy,運(yùn)行時(shí)就彈出一個(gè)怪怪的figure,呵呵,我當(dāng)初還以為是什么bug

2. 調(diào)試程序時(shí),經(jīng)常要屏蔽掉一整段程序進(jìn)行,也就是將其標(biāo)示注釋符%。有兩個(gè)辦法:一種是選定后 ctrl+rctrl+t 一種是在段首加 if 0 ,段尾加 end,中間都不執(zhí)行,也就相當(dāng)于注釋掉了

3. 寫(xiě)m文件時(shí),選中某段程序內(nèi)容,ctrl+i matlab幫你自動(dòng)對(duì)齊程序。這樣程序看起來(lái)很有層次,容易發(fā)現(xiàn)程序中的錯(cuò)誤。

4. ctrl+F2作標(biāo)簽,ctrl+g 跳至某一行,這些快捷鍵都很實(shí)用。

5 matlab7中有塊注釋符號(hào)%{ %}

6 多行加標(biāo)注時(shí),也可以選中需要添加標(biāo)注程序,然后在Edit/或者右鍵選擇Comment。或者Uncomment除掉標(biāo)注

?

MATLAB內(nèi)存管理

Matlab 進(jìn)行大規(guī)模科學(xué)計(jì)算或仿真時(shí),內(nèi)存是一個(gè)需要時(shí)常注意的問(wèn)題。在matlab里運(yùn)行

>>system_dependent memstats

就可以看到內(nèi)存的使用狀況。當(dāng)你寫(xiě)的 Matlab 程序跳出“Out of Memory”時(shí),以下幾點(diǎn)措施是需要優(yōu)先考慮的解決方法:

1. 升級(jí)內(nèi)存

2. 升級(jí)64位系統(tǒng)

3. 增加虛擬內(nèi)存

4. 采用3GB開(kāi)關(guān)啟動(dòng)系統(tǒng)

由于32 Windows 操作系統(tǒng)的限制,每個(gè)進(jìn)程只能使用最多 2GB 的虛擬內(nèi)存地址空間,因此 Matlab 的可分配內(nèi)存也受到相應(yīng)的限制。Matlab 7.0.1 引進(jìn)了新的內(nèi)存管理機(jī)制,可以利用 Windows 3GB 開(kāi)關(guān),使用 3GB 開(kāi)關(guān)啟動(dòng)的 Windows 每個(gè)進(jìn)程可以在多分配 1 GB 的虛擬地址空間。具體做法是:修改C盤(pán)根目錄 boot.ini 啟動(dòng)選項(xiàng)加上 /3G,例如:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3G

5. 如果必有必要,不要啟動(dòng)java虛擬機(jī),采用matlab -nojvm啟動(dòng)(在快捷方式屬性里面的 "..../matlab.exe")改為("...../matlab.exe" - nojvm

6. 關(guān)閉Matlab Server

7. Windows中字體、窗口等都是要占用系統(tǒng)資源的,所以在Matlab運(yùn)行時(shí)盡量不要打開(kāi)不用的窗口。

除此以外,更關(guān)鍵的是需要弄清楚以下幾個(gè)問(wèn)題:

問(wèn)題一:Matlab是如何存儲(chǔ)矩陣的?

Matlab中矩陣是以Block,也就是塊的形式存儲(chǔ)的。也就是說(shuō),當(dāng)Matlab在為即將存儲(chǔ)的矩陣劃分塊時(shí),如果沒(méi)有相應(yīng)大小的連續(xù)內(nèi)存,即使實(shí)際內(nèi)存沒(méi)有被完全使用,它還是會(huì)報(bào)告“Out of Memory”。

問(wèn)題二:如何高效使用Memory

Matlab 中數(shù)組必須占用連續(xù)分配的內(nèi)存段,當(dāng)無(wú)法為新建的數(shù)組分配連續(xù)的內(nèi)存段的時(shí)候,”Out of Memory”就會(huì)出現(xiàn)。在使用的過(guò)程中,由于存儲(chǔ)單元的不斷的被分配和清除,反復(fù)分配和釋放數(shù)組會(huì)使內(nèi)存被分割成不連續(xù)的區(qū)域,可用的連續(xù)內(nèi)存段減少,很容易造成“Out of Memory”。因此當(dāng) Matlab 剛剛啟動(dòng)時(shí)其連續(xù)內(nèi)存最多,此時(shí)往往可以新建非常大的數(shù)組,這一點(diǎn)可以用命令 feature(memstats)(在 7.0 版本以上)看出。如果現(xiàn)實(shí)的最大連續(xù)內(nèi)存段很小,但實(shí)際可用內(nèi)存(非連續(xù)的)仍舊很多,則表明內(nèi)存中碎片太多了。此時(shí)可以考慮用 pack 命令,pack 命令的作用就是將所有內(nèi)存中的數(shù)組寫(xiě)入硬盤(pán),然后重新建立這些數(shù)組,以減少內(nèi)存碎片。此外,在命令行或者程序中都可以使用 clear 命令,隨時(shí)減少不必要的內(nèi)存。

因此,治本的方法如下:

1. 在命令行輸入 pack 整理內(nèi)存空間

當(dāng)內(nèi)存被分為很多碎片以后,其實(shí)本身可能有很大的空間,只是沒(méi)有作構(gòu)的連續(xù)空間即大的Block而已。如果此時(shí)Out of Memory,此時(shí)使用pack命令可以很好的解決此問(wèn)題。

2. 使用稀疏矩陣或?qū)⒕仃囖D(zhuǎn)化成稀疏形式 sparse

如果矩陣中有大量的0,最好存儲(chǔ)成稀疏形式。稀疏形式的矩陣使用內(nèi)存更少,執(zhí)行時(shí)間更短。例如:

000×1000的矩陣X,它2/3的元素為0,使用兩種存儲(chǔ)方法的比較:

Name

Size

Bytes

Class

X

1000x1000

8000000

double array

Y

1000x1000

4004000

double array (sparse)

3. 盡量避免產(chǎn)生大的瞬時(shí)變量,把沒(méi)必要的變量clear掉或當(dāng)它們不用的時(shí)候應(yīng)該及時(shí)clear

4. 減少變量,盡量的重復(fù)使用變量(跟不用的clear掉一個(gè)意思)。

5. 把有用的變量先save,后clear 掉,需要時(shí)再讀出來(lái)。

下面介紹一下關(guān)于clearsaveload的特殊用法,這對(duì)在forwhile等多重循環(huán)里出現(xiàn)out of memory非常有效。

for k = 1:N??? % N為循環(huán)次數(shù)

% ---------------------

??? var0 = k; % 獲得變量var0????????????????????????

%----------------------

??? string = [sprintf('var_%d', k) ' = var0;' ];

??? eval(string);????????????????????????????????????????????????????????? % 等價(jià)于 var_k = var0;

??? save(sprintf('var_%d.mat', k), sprintf('var_%d')); % 等價(jià)于 save var_k.mat var_k

??? clear(sprintf('var_%d'));???????????????? ???????????????????????% 等價(jià)于 clear var_k

end

如果要讀取剛才存取的變量var_k, (k = 1,2, ..., N). 那么,可以使用如下用法:

for k = 1:N

?????? load(sprintf('var_%d.mat', k));???? % 等價(jià)于 load var_k.mat??? k = 1,2, ..., N

end

另外,還有一些非常有用的用法。如果用清除剛才讀取的變量 var_k, k = 1, 2, ..., N

clear '-regexp' '^var_'???? % 清除所有以“ var_ ”開(kāi)頭的變量

還有很多關(guān)于saveclearload等用法,具體help一下。

6. 使用單精度 single 短整數(shù)替代雙精度 double

Matlab 默認(rèn)的數(shù)字類(lèi)型是雙精度浮點(diǎn)數(shù) (double),每個(gè)雙浮點(diǎn)數(shù)占用 8 個(gè)字節(jié)。對(duì)于一些整數(shù)操作來(lái)說(shuō),使用雙浮點(diǎn)數(shù)顯得很浪費(fèi)。在 Matlab 中可以在預(yù)先分配數(shù)組時(shí)指定使用的數(shù)字類(lèi)型如以下命令:zero(10, 10, uint8) 。對(duì)于浮點(diǎn)數(shù),在很多精度要求不高的情況下,可以使用4個(gè)字節(jié)的單浮點(diǎn)數(shù) (single),可以減少一半的內(nèi)存。關(guān)于單、雙浮點(diǎn)數(shù)的精度對(duì)照如下,以便根據(jù)需要選擇使用:

single: 精度 (1.1921e-007) 最大數(shù) (3.4028e+038)

double: 精度 (2.2204e-016) 最大數(shù) (1.7977e+308)

7. 為矩陣變量預(yù)制內(nèi)存而不是動(dòng)態(tài)分配

在動(dòng)態(tài)分配的過(guò)程中,由于開(kāi)始Matlab所用的Block隨著矩陣的增大而連續(xù)的為此矩陣分配內(nèi)存,但是由于Block的不連續(xù)性,很有可能最開(kāi)始分配的Block不能滿足存儲(chǔ)的需要,Matlab只好移動(dòng)此Block以找到更大的Block來(lái)存儲(chǔ),這樣在移動(dòng)的過(guò)程中不但占用了大量的時(shí)間,而且很有可能它找不到更大的塊,導(dǎo)致Out of Memory。而當(dāng)你為矩陣變量預(yù)制內(nèi)存時(shí),Matlab會(huì)在計(jì)算開(kāi)始前一次性找到最合適的Block,此時(shí)就不用為變量連續(xù)的分配內(nèi)存。比較下面兩個(gè)程序:

for k = 2:1000

??? x(k) = x(k-1) + 5;

end

x = zeros(1, 1000);

for k = 2:1000

??? x(k) = x(k-1) + 5;

end

顯然,第二個(gè)更好!!!最好的方法是,在程序一開(kāi)始就位所有大的矩陣變量預(yù)制存存儲(chǔ)單元!!!

8. 盡量早的為大的矩陣變量預(yù)制內(nèi)存

Matlab使用heap method管理內(nèi)存。當(dāng)在Matlab heap中沒(méi)有足夠的內(nèi)存使用時(shí),它會(huì)向系統(tǒng)請(qǐng)求內(nèi)存。但是只要內(nèi)存碎片可以存下當(dāng)前的變量,Matlab會(huì)重新使用內(nèi)存。比如:

a = rand(1e6,1);

b = rand(1e6,1);

使用大約15.4 MB RAM

c = rand(2.1e6,1);

使用近似16.4 MB RAM

a = rand(1e6,1);

b = rand(1e6,1);

clear

c = rand(2.1e6,1);

使用32.4 MB RAM

Matlab不能使用abclear的空間,因?yàn)樗鼈兙∮?span style="font-family:Calibri;">2.1 MB,而同時(shí)它們也很可能是不連續(xù)的。最好的方法:

c = rand(2.1e6,1);

clear

a = rand(1e6,1);

b = rand(1e6,1);

使用16.4 MB RAM

9. 如果可行的話,將一個(gè)大的矩陣劃分為幾個(gè)小的矩陣,這樣每一次使用的內(nèi)存減少。

?

?Matlab中的保存數(shù)據(jù)語(yǔ)句比較

Matlab中,我們經(jīng)常遇到需要將一些中間數(shù)據(jù)或者最終結(jié)果保存為文本形式(*.txt);其中提供了多種保存數(shù)據(jù)的語(yǔ)句,應(yīng)該如何選擇喃?

在此,小弟在使用了fprintfsavedlmwrite的基礎(chǔ)上,對(duì)這三種方法進(jìn)行了一個(gè)比較:

fprintf(fid, format, A, ...),將數(shù)據(jù)Aformat表示的格式寫(xiě)入fid(文件)中,fidfopen函數(shù)返回得到。

實(shí)例:? x = 0:.1:1;

A = [x; exp(x)];

fid = fopen('exp.txt', 'wt');

fprintf(fid, '%6.2f %12.8f\n', A);

fclose(fid)

save filename.txt A? -format,將數(shù)據(jù)Aformat表示的格式寫(xiě)入filename文本文件中。

實(shí)例:? x = 0:.1:1;

A = [x; exp(x)];

save? data.txt A -ASCII

dlmwrite('filename.txt', A, 'D', R, C),從矩陣A的第R行、第C列開(kāi)始,使用分隔符D分割數(shù)據(jù)(“\t”表示tab分割,“,”為默認(rèn)分割符),存儲(chǔ)到filename文本文件中。

實(shí)例:? x = 0:.1:1;

A = [x; exp(x)];

dlmwrite(‘data.txt', A, 'delimiter', '\t', 'precision', 6);

使用時(shí),save保存的數(shù)據(jù)是以科學(xué)計(jì)數(shù)法的方式存儲(chǔ)的;fprintfdlmwrite則是可以選擇存儲(chǔ)數(shù)據(jù)的方式,fprintf的格式設(shè)置跟C語(yǔ)言中的用法一致,dlmwrite可以設(shè)置有效位位數(shù),比如上面實(shí)例中6表示有效位位數(shù)是6位,dlmwrite中對(duì)數(shù)據(jù)中的小數(shù)就采用浮點(diǎn)數(shù)存儲(chǔ),整數(shù)就采用整型存儲(chǔ)形式。

在使用時(shí),可根據(jù)自己實(shí)際情況的需要選擇適合的一種。個(gè)人覺(jué)得matlab本身的這種以科學(xué)計(jì)數(shù)法來(lái)表示數(shù)據(jù),有時(shí)不方便于查看。還有一點(diǎn)就是fprintf是按照矩陣列存儲(chǔ)。

?

MATLAB Out of memory問(wèn)題總結(jié)(轉(zhuǎn)載)

首先,我要聲明,matlab自帶的Help才是最權(quán)威的Matlab學(xué)習(xí)資料,如果有時(shí)間好好學(xué)習(xí)一下或是可以高效的使用的話,一定受益匪淺!比如說(shuō)像 Out of Memory這個(gè)問(wèn)題,最開(kāi)始我都是用Help memory,幾乎得不到任何信息;然后就是去網(wǎng)上搜索此類(lèi)問(wèn)題的解決方法,一般有這幾種:

除了升級(jí)內(nèi)存和升級(jí)64位系統(tǒng)外,下面幾個(gè)方法也是解決之道。

# 增加虛擬內(nèi)存

# 采用PACK (在命令行輸入 pack 整理內(nèi)存空間)

# 采用3GB 開(kāi)關(guān)啟動(dòng)系統(tǒng)(修改 c盤(pán)根目錄 boot.ini 啟動(dòng)選項(xiàng)加上 /3G 例如:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3G

# 優(yōu)化程序,減少變量(使用稀疏矩陣 sparse save 保存變量 load 變量,需要時(shí)再讀出來(lái)

# 如果必有必要,不要啟動(dòng)java虛擬機(jī),采用matlab -nojvm啟動(dòng)(在快捷方式屬性里面的 "..../matlab.exe")改為("...../matlab.exe" - nojvm

#關(guān)閉Matlab Server?

# 使用單精度 single 短整數(shù)替代雙精度。

現(xiàn)在看來(lái)這些解決方法對(duì)于我的問(wèn)題來(lái)說(shuō)根本就是“治標(biāo)不治本”,不能解決實(shí)際問(wèn)題,后來(lái)在一個(gè)師兄的提醒下Help out of memory,終于找到了解決此類(lèi)問(wèn)題的方法。在此感謝這位師兄啊!

重申――MatlabHelp才是Matlab的最權(quán)威的指導(dǎo)材料!!!

其實(shí)我的所謂原創(chuàng)就是對(duì)Help out of memory的一些歸納總結(jié)而已,有興趣的話大家可以自己去看!!!

問(wèn)題一:Matlab是如何存儲(chǔ)矩陣的

Matlab中矩陣是以Block,也就是塊的形式存儲(chǔ)的。也就是說(shuō),當(dāng)Matlab在為即將存儲(chǔ)的矩陣劃分塊時(shí),如果沒(méi)有相應(yīng)大小的連續(xù)內(nèi)存,即使實(shí)際內(nèi)存沒(méi)有被完全使用,他還是會(huì)報(bào)告“Out of Memory”。

問(wèn)題二:如何高效使用Memory

由于在使用的過(guò)程中,由于存儲(chǔ)單元的不斷的被分配和清除,內(nèi)存會(huì)被分割成不連續(xù)的區(qū)域,這是很容易造成“Out of Memory”。

1

為矩陣變量預(yù)制內(nèi)存而不是動(dòng)態(tài)分配

在動(dòng)態(tài)分配的過(guò)程中,由于開(kāi)始Matlab所用的Block隨著矩陣的增大而連續(xù)的為此矩陣分配內(nèi)存,但是由于Block的不連續(xù)性,很有可能最開(kāi)始分配的Block不能滿足存儲(chǔ)的需要,Matlab只好移動(dòng)此Block以找到更大的Block 來(lái)存儲(chǔ),這樣在移動(dòng)的過(guò)程中不但占用了大量的時(shí)間,而且很有可能它找不到更大的塊,導(dǎo)致Out of Memory。而當(dāng)你為矩陣變量預(yù)制內(nèi)存時(shí),Matlab會(huì)在計(jì)算開(kāi)始前一次性找到最合適的Block,此時(shí)就不用為變量連續(xù)的分配內(nèi)存。

比較下面兩個(gè)程序:

for k = 2:1000

x(k) = x(k-1) + 5;

end

x = zeros(1, 1000);

for k = 2:1000

x(k) = x(k-1) + 5;

end

顯然,第二個(gè)更好!!!最好的方法是,在程序一開(kāi)始就位所有大的矩陣變量預(yù)制存存儲(chǔ)單元!!!

1

盡量早的分配大的

Matlab使用heap method管理內(nèi)存。當(dāng)在Matlab heap中沒(méi)有足夠的內(nèi)存使用時(shí),它會(huì)向請(qǐng)求內(nèi)存。但是只要內(nèi)存碎片可以存下當(dāng)前的變量,Matlab會(huì)重新使用內(nèi)存。

比如:

a = rand(1e6,1);

b = rand(1e6,1);

使用大約15.4 MB RAM

c = rand(2.1e6,1);使用近似16.4 MB RAM:

a = rand(1e6,1);

b = rand(1e6,1);

clear

c = rand(2.1e6,1);

使用32.4 MB RAM。因?yàn)?span style="font-family:Calibri;">Matlab不能使用abclear的空間,因?yàn)樗鼈兙∮?span style="font-family:Calibri;">2.1 MB,而同時(shí)它們也很可能是不連續(xù)的。

最好的方法:

c = rand(2.1e6,1);

clear

a = rand(1e6,1);

b = rand(1e6,1);

使用16.4 MB RAM

2

盡量避免產(chǎn)生大的瞬時(shí)變量,當(dāng)它們不用的時(shí)候應(yīng)該及時(shí)clear

3

盡量的重復(fù)使用變量(跟不用的clear掉一個(gè)意思)

4

將矩陣轉(zhuǎn)化成稀疏形式

如果矩陣中有大量的0,最好存儲(chǔ)成稀疏形式。稀疏形式的矩陣使用內(nèi)存更少,執(zhí)行時(shí)間更短。

例如:

1000×1000的矩陣X,它2/3的為0,使用兩種存儲(chǔ)方法的比較:

Name

Size

Bytes

Class

X

1000x1000

8000000

double array

Y

1000x1000

4004000

double array (sparse)

5

使用pack

當(dāng)內(nèi)存被分為很多碎片以后,其實(shí)本身可能有很大的空間,只是沒(méi)有作構(gòu)的連續(xù)空間即大的Block而已。如果此時(shí)Out of Memory,此時(shí)使用pack命令可以很好的解決此問(wèn)題。

6

如果可行的話,將一個(gè)大的矩陣劃分為幾個(gè)小的矩陣,這樣每一次使用的內(nèi)存減少。

7

增大內(nèi)存

問(wèn)題三: Increase the size of the swap file.

wap space的與使用的操作系統(tǒng)有關(guān),具體的如下:

1.

UNIX

Information about swap space can be procured by typing pstat -s at the UNIX command prompt. For detailed information on changing swap space, ask your system administrator.

2.

Linux

Swap space can be changed by using the mkswap and swapon commands. For more information on the above commands, type man followed by the command name at the Linux prompt.

3.

Windows NT

Follow the steps shown here: Right-click the My Computer icon, and select Properties. Select the Performance tab and click the Change button to change the amount of virtual memory.

4.

Windows 2000

右鍵“我的電腦”->屬性->高級(jí)->性能->設(shè)置,從而改變其虛擬內(nèi)存。

5.

Windows XP

右鍵“我的電腦”->屬性->高級(jí)->性能->設(shè)置,從而改變其虛擬內(nèi)存。

問(wèn)題四:盡量少時(shí)用系統(tǒng)資源(對(duì)于Windows

Windows中字體、窗口等都是要占用系統(tǒng)資源的,所以在Matlab時(shí)盡量不要打開(kāi)不用的窗口。

問(wèn)題五:Reloading Variables on UNIX Systems

由于我不使用UNIX系統(tǒng),這里不介紹,直接從Help中粘過(guò)來(lái)

On UNIX systems, MATLAB does not return memory to the operating system even after variables have been cleared. This is due to the manner in which UNIX manages memory. UNIX does not accept memory back from a program until the program has terminated. So, the amount of memory used in a MATLAB session is not returned to the operating system until you exit MATLAB.

To free up the memory used in your MATLAB session, save your workspace variables, exit MATLAB, and then load your variables back in.

總結(jié)

以上是生活随笔為你收集整理的Matlab中的一些小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻换人妻仑乱 | 亚洲一区二区三区麻豆 | 中文字幕在线播放av | 欧美成人免费一级 | 一道本在线 | 一区二区在线免费观看 | 国产欧美一区二区三区视频 | 非洲一级片 | 色欧美综合 | 电影91久久久 | 日韩欧美高清 | 日本精品在线观看 | 97精品视频在线观看 | 就爱av| av免费视屏| 少妇熟女一区二区三区 | 69精品国产 | 黄色a级片网站 | 国产精品久久久久久久久久辛辛 | 亚洲黄色在线看 | 久久伊人一区二区 | 中文字幕1区2区 | 韩国伦理片在线看 | 日日躁夜夜躁狠狠久久av | 午夜视频一区 | 自拍偷拍校园春色 | 国产精品免费大片 | 97超碰在线播放 | gogo亚洲国模私拍人体 | 看个毛片 | 永久免费看成人av的动态图 | 风韵少妇性饥渴推油按摩视频 | 成年人福利 | 欧美成人免费观看视频 | 国产丝袜久久 | 亚洲色图14p | 免费毛毛片| 天天干天天色综合 | 秋霞影院午夜 | 女人被狂躁c到高潮喷水电影 | 日韩国产二区 | 成人在线精品 | 无遮挡在线观看 | 日本黄色三级视频 | 国产日批视频 | 久久精品国产亚洲AV高清综合 | 香港三日本8a三级少妇三级99 | 婷婷久久五月 | 蜜桃久久久aaaa成人网一区 | 毛片日本| 久久夜夜夜 | 国产精品午夜在线观看 | 免费视频久久 | 久久合合| 亚洲欧美日本在线观看 | 国产精品自拍在线观看 | 激情xxxx| 日韩国产精品久久 | 91在线精品秘密一区二区 | 给我免费观看片在线电影的 | 偷拍欧美另类 | 91影院在线免费观看 | 久草国产在线视频 | 伊人久久av| 蜜臀av色欲a片无码精品一区 | 我们2018在线观看免费版高清 | 浮力影院国产第一页 | 伊人色播| 国产精品福利一区二区三区 | 美女久久久| 日韩一区在线观看视频 | 亚洲成av人片在线观看无码 | 欧美一级淫片免费 | 免费成人蒂法网站 | 成人免费无遮挡无码黄漫视频 | 老司机午夜精品视频 | 欧美人与性动交α欧美片 | 久久不射电影网 | 欧美妞干网 | 抽插丰满内射高潮视频 | 少妇aaaa| 小萝莉末成年一区二区 | 欧美熟妇精品久久久久久 | 大陆av在线| 亚洲精品中文字幕成人片 | 青青久在线视频 | 毛片基地站 | 成人区人妻精品一区二区网站 | 99视频导航 | 狠狠操在线观看 | 亚洲精品视频免费观看 | 国产乱淫a∨片免费观看 | av色图在线| 黄色网免费看 | 老外黄色一级片 | 欧美黄色录像视频 | 婷婷射丁香 | 777国产成人入口 | 免费看国产曰批40分钟粉红裤头 |