Subscript indices musteither be real positive integers or logicals
中文解釋:下標(biāo)索引必須是正整數(shù)類(lèi)型或者邏輯類(lèi)型
出錯(cuò)原因:在訪問(wèn)矩陣(包括向量、二維矩陣、多維數(shù)組,下同)的過(guò)程中,下標(biāo)索引要么從0 開(kāi)始,要么出現(xiàn)了負(fù)數(shù)。注:matlab的語(yǔ)法規(guī)定矩陣的索引從1 開(kāi)始,這與 C 等編程語(yǔ)言的習(xí)慣不一樣。
解決辦法:自己調(diào)試一下程序,把下標(biāo)為0 或者負(fù)數(shù)的地方修正。關(guān)于矩陣的各種訪問(wèn)方式。
舉例:
【錯(cuò)誤代碼】:
1. for s = 0:0.2:2
2. a(s) = 4 * s - 1;
3. end
復(fù)制代碼
【正確代碼】:
1.
2. for s = 1:10
3. a(s) = 4 * s - 1;
4. end
復(fù)制代碼
當(dāng)然,這樣的賦值使用循環(huán)是低效的,因此不提倡
Undefined function or variable"a"
中文解釋:函數(shù)或變量a 沒(méi)有定義
出錯(cuò)原因及解決辦法:
1. 如果 a是變量,則參見(jiàn) [原創(chuàng)]寫(xiě)給學(xué)習(xí) matlab 的新手們 一貼中技巧 6 后半部分
2. 如果 a是函數(shù),則這是因?yàn)閙atlab在所有已添加的路徑中都無(wú)法找到該函數(shù)對(duì)應(yīng)的m文件而導(dǎo)致的,對(duì)此,把該m文件移動(dòng)到當(dāng)前路徑下再運(yùn)行便可。(注:何謂“所有已添加的路徑”——在命令窗口中輸入pathtool 可以查看;何謂“當(dāng)前路徑”——在命令窗口中輸入 pwd 可以查看)
舉例:
myPlus.m:
1. function d = myPlus(a,b)
2. d = a + b;
復(fù)制代碼
【錯(cuò)誤調(diào)用】:
命令窗口:
1. >> z = myPlus(a,b)
復(fù)制代碼
【正確調(diào)用】:
命令窗口:
1. >> x = 2;
2. >> y = 5;
3. >> z = myPlus(x,y)
復(fù)制代碼
Input argument "x" isundefined
中文解釋:輸入變量x 沒(méi)有定義
出錯(cuò)原因及解決方法:參見(jiàn) [原創(chuàng)]寫(xiě)給學(xué)習(xí) matlab 的新手們 一貼中技巧 6
舉例:
1. function y = myTest(x)
2. y = x * 2;
復(fù)制代碼
【錯(cuò)誤調(diào)用】:
直接在m文件編輯窗口運(yùn)行程序,或者命令窗口:
1. >>a = myTest;
復(fù)制代碼
【正確調(diào)用】:
1. >>b = 4;
2. >>a = myText(b);
復(fù)制代碼
Matrix dimensions must agree
Inner matrix dimensions must agree
中文解釋:矩陣的維數(shù)必須一致
出錯(cuò)原因:這是由于運(yùn)算符(= + - / * 等)兩邊的運(yùn)算對(duì)象維數(shù)不匹配造成的,典型的出錯(cuò)原因是錯(cuò)用了矩陣運(yùn)算符。matlab 通過(guò)“.”來(lái)區(qū)分矩陣運(yùn)算和元素運(yùn)算,對(duì)此可以參閱:[原創(chuàng)]寫(xiě)給學(xué)習(xí)matlab 的新手們 一貼中技巧 1
解決辦法:自己調(diào)試一下程序,保證運(yùn)算符兩邊的運(yùn)算對(duì)象維數(shù)一致
舉例:
【錯(cuò)誤代碼】:
1. b = [1,2];
2. a = [-1,1];
3. c = a*b;
復(fù)制代碼
【正確代碼】:
1.
2. b = [1,2];
3. a = [-1,1];
4. c = a.*b;
復(fù)制代碼
Attempt to execute SCRIPT conv as afunction
出錯(cuò)原因及解決辦法:參見(jiàn)[原創(chuàng)]寫(xiě)給學(xué)習(xí) matlab的新手們一貼中技巧2
如果經(jīng)過(guò)上述檢測(cè)后仍然出現(xiàn)錯(cuò)誤,則請(qǐng)把m 文件的路徑設(shè)置為常規(guī)的試試,即不使用中文的路徑、不使用數(shù)字作為m文件名的開(kāi)頭等等
Function definitions are notpermitted at the prompt or in scripts
中文解釋:不能在命令窗口或者腳本文件中定義函數(shù)
出錯(cuò)原因:一旦在命令窗口寫(xiě)function c = myPlus(a,b),此錯(cuò)誤就會(huì)出現(xiàn),因?yàn)楹瘮?shù)只能定義在m 文件中。關(guān)于腳本文件和 m 文件的區(qū)別請(qǐng)查閱matlab基礎(chǔ)書(shū)。簡(jiǎn)言之:
1) 如果你寫(xiě)成 function 的形式,那么必須寫(xiě)在 m 文件中,且以 function 開(kāi)頭(即 function 語(yǔ)句前不能包含其他語(yǔ)句,所有語(yǔ)句必須放在 function 中,當(dāng)然,function 的定義可以有多個(gè),各 function 之間是并列關(guān)系,不能嵌套);
2) 如果你寫(xiě)成腳本的形式,則既可以寫(xiě)在命令窗口中,也可以寫(xiě)在 m文件中,但兩者均不能包含 function 語(yǔ)句(即不能進(jìn)行函數(shù)的定義)
解決辦法:新建一個(gè)m文件,然后再進(jìn)行函數(shù)的定義
1. X must have one or twocolumns
2. Vectors must be the samelengths
中文解釋:
1.X 必須是 1 或者 2 列
2. 向量長(zhǎng)度必須一致
出錯(cuò)原因:
1. 實(shí)際輸入不滿足該條件。至于如何判斷矩陣的行、列,請(qǐng)參閱高等代數(shù)或者 matlab 的基礎(chǔ)書(shū)籍
2. 輸入的兩個(gè)(或幾個(gè))變量長(zhǎng)度不滿足該條件。例如 plot 函數(shù)的前兩個(gè)輸入變量,如果一個(gè)是1*2,另一個(gè)是1*3,則會(huì)出錯(cuò)
解決方法:都需要自己調(diào)試一下
1. 把 X 的維數(shù)改為1 或者 2 列
2. 按照函數(shù)的語(yǔ)法要求把向量的長(zhǎng)度設(shè)置為一樣
舉例:
【錯(cuò)誤代碼】:
1. a = [-1,-2,-3];
2. b = [1,2];
3. plot(a,b);
復(fù)制代碼
【正確代碼】:
1.
2. a = [-1,-2];
3. b = [1,2];
4. plot(a,b);
復(fù)制代碼
One or more output arguments notassigned during call to '...'
中文解釋:在調(diào)用...函數(shù)過(guò)程中,一個(gè)或多個(gè)輸出變量沒(méi)有被賦值
出錯(cuò)原因:函數(shù)如果帶有輸出變量,則每個(gè)輸出在返回的時(shí)候都必須被賦值。容易出現(xiàn)這個(gè)錯(cuò)誤的兩個(gè)地方是:
1) 在部分條件判斷語(yǔ)句(如 if )中沒(méi)有考慮到輸出變量的返回值。例子:多輸入多輸出報(bào)錯(cuò)
2) 在循環(huán)迭代過(guò)程中部分變量的維數(shù)發(fā)生了變化。例子:請(qǐng)幾位版主看看這個(gè)程序什么錯(cuò)誤
解決辦法:調(diào)試程序,仔細(xì)查看函數(shù)返回時(shí)各輸出變量的值。更好的方法是:在條件判斷或者執(zhí)行循環(huán)之前對(duì)所使用的變量賦初值
??? Error using ==>mpower
Matrix must be square
中文解釋:錯(cuò)誤使用mpwoer函數(shù),要求矩陣必須是方陣
錯(cuò)誤原因:在使用向量乘法運(yùn)算的時(shí)候,沒(méi)有用點(diǎn)乘。
解決辦法:在涉及向量乘法的語(yǔ)句中用.*代替*,更多的請(qǐng)參考本帖5 樓的描述
Explicit integral could not befound.
中文解釋:顯式解沒(méi)有找到
出錯(cuò)原因:并非每個(gè)函數(shù)的積分都有顯式解,這是由于原函數(shù)沒(méi)有解析結(jié)果而給出的警告
解決辦法:改用數(shù)值積分(quad、quadl等)即可
Index exceeds matrixdimensions.
Attempted to access b(3,2); index out of bounds becausesize(b)=[2,2].
中文解釋:索引超出矩陣的范圍
出錯(cuò)原因:在引用矩陣元素的時(shí)候,索引值超出矩陣應(yīng)有的范圍
解決辦法:檢查所定義數(shù)組的維數(shù),和引用的范圍。
舉例:
【錯(cuò)誤代碼】:
1. b = zeros(2,2);
2. a = b(3,2);
復(fù)制代碼
【正確代碼】:
1.
2. b = zeros(2,2);
3. a = b(1,2);
復(fù)制代碼
In anassignmentA(I) = B, the numberof elements in B and I must be the same
中文解釋:在賦值語(yǔ)句A(I) = B 中,B 和 I 的元素個(gè)數(shù)必須相同
出錯(cuò)原因:I 和B的維數(shù)、大小不一樣。這正如“把5 個(gè)水果放到 6 個(gè)籃子”、或者“把6 個(gè)水果放到 5 個(gè)籃子”,均無(wú)法實(shí)現(xiàn)
解決辦法:自己設(shè)置斷點(diǎn)調(diào)試一下,看看 I 和 B 的維數(shù)、大小是否相同,不同的話就要修改成兩者一致
舉例:
【錯(cuò)誤代碼】:
1. b = [1,2];
2. s(1) = b;
復(fù)制代碼
【正確代碼】:
1.
2. b = [1,2];
3. for i = 1:2
4. s(i) = b(i);
5. end
復(fù)制代碼
當(dāng)然,這樣的賦值使用循環(huán)是低效的,因此不提倡
To RESHAPE the number of elementsmust not change
中文解釋:矩陣變換時(shí),變換前和變換后的總元素不能改變
出錯(cuò)原因:變換時(shí)語(yǔ)句使用不恰當(dāng)。例如,變換前是[2,3] 的6個(gè)元素的矩陣,變換后可以是[3,2]、[1,6]的6元素矩陣,但不能是[2,4]的8元素矩陣
解決辦法:自己設(shè)置斷點(diǎn)調(diào)試一下,看看變換前后的矩陣大小是否相同,不同的話就要修改成兩者一致
舉例:(出錯(cuò)原因中已提及)
[原創(chuàng)]寫(xiě)給學(xué)習(xí) matlab的新手們
本人接觸matlab已經(jīng)有5年多的時(shí)間了,一直想寫(xiě)點(diǎn)東西,但是之前不知道放在哪里才能發(fā)揮它的最大作用,直到幾天前碰上了這個(gè)論壇(有點(diǎn)像諸葛亮遇見(jiàn)姜維,哈哈)。
廢話不說(shuō),我想借貴論壇寶地,寫(xiě)一些經(jīng)驗(yàn)給使用matlab的新手們,當(dāng)然了,老大們也可以看看,不嫌棄我寫(xiě)得粗糙的話還可以指點(diǎn)一下,先謝過(guò)了~~~~
首先我想說(shuō)的是,matlab跟其他語(yǔ)言不一樣(我用的比較多的編程語(yǔ)言,除了matlab就應(yīng)該是c或c++了,VB和Delphi也接觸過(guò),我想版面(matlab版)大部分人也差不多),如果你抱著“把其他語(yǔ)言的思想運(yùn)用在matlab里面”的話,那么我想,即使程序運(yùn)行不出錯(cuò),也很難把握matlab的精髓,也就很難發(fā)揮matlab的作用了。所以,如果你是希望掌握一門(mén)語(yǔ)言、一個(gè)工具,使它更有效為你服務(wù)的話,那么,希望本文對(duì)你有所幫助,請(qǐng)精讀;如果你是希望matlab作為VC的附屬品,即你不想在matlab上面花太多功夫,只純粹想用matlab來(lái)完成VC做不了或很難做成的任務(wù)的話,那么,本文你也應(yīng)該至少瀏覽一下。
瀏覽
Matlab是一個(gè)基于矩陣運(yùn)算的軟件,這恐怕是眾所周知的事情了,但是,真正在運(yùn)用的時(shí)候(就是在編程的時(shí)候),許多人(特別是初學(xué)者)往往沒(méi)有注意到這個(gè)問(wèn)題,因此,for循環(huán)(包括while循環(huán))滿天飛…………..這不僅是暴殄天物(沒(méi)有發(fā)揮matlab所長(zhǎng)),還浪費(fèi)了你寶貴的時(shí)間。對(duì)此,版友MVH在他的“MATLAB 小技巧”一文中也有所涉及,雷同的東西我也就不重復(fù)了,matlab的“幫助”里面也有相關(guān)的指示。我這里想說(shuō)的一點(diǎn)是,初學(xué)者往往在初始化矩陣的時(shí)候注意到這個(gè)問(wèn)題,懂得了使用矩陣而不是循環(huán)來(lái)賦值,但是,在其他環(huán)節(jié)上,就很容易疏忽,或者說(shuō),仍然沒(méi)有擺脫C++的思想。舉個(gè)例子吧,下面的代碼是我的一個(gè)師弟寫(xiě)的,我想他接觸matlab也有2、3年時(shí)間了(在此說(shuō)明一下,接觸2、3年并不是表示每天都會(huì)跟matlab打交道,我本人也不是,只是在一年某幾個(gè)時(shí)間段里面連續(xù)使用),但是仍然會(huì)出現(xiàn)類(lèi)似的問(wèn)題:
J = 0;
lt = size(imf1,2);
for (i = 1:lt)
if (abs(imf1(i)) >1)
J = 1;
break
end
end
上面的代碼實(shí)現(xiàn)了一個(gè)目的――檢查信號(hào)imf1(一個(gè)向量)是否存在絕對(duì)值大于1的點(diǎn),這顯然是基于C++的思想寫(xiě)出來(lái)的。如果在matlab下面,其實(shí)用兩個(gè)語(yǔ)句就足夠了(當(dāng)然,可以合并為一個(gè)):
q = find(imf1>1);
J = ~isempty(q);
這樣的修改帶來(lái)的好處是很可觀的。
又如:
for j = 1:num
imf1(start1+j) = 2*li1(j+1) -imf1(start1+j);
end
這是一個(gè)對(duì)稱翻折的問(wèn)題,它完全可以用以下這個(gè)語(yǔ)句簡(jiǎn)潔表示:
imf1(start1+1:start1+num) = 2*li1(2:num+1) -imf1(start1+1:start1+num);
因此,如果是新手,可以先用循環(huán)(基于C++的思想)來(lái)編寫(xiě)代碼,然后看看能否用matlab的語(yǔ)言(基于矩陣的思想)來(lái)改進(jìn)。當(dāng)然,這樣做的前提是你對(duì)matlab提供的一些函數(shù)比較熟悉才行,這些函數(shù)在matlab的“幫助”那里搜索“FunctionsUsed inVectorizing”就可以找到一些,其他的也可以找相關(guān)的書(shū)籍(沒(méi)找到?不可能,電子版總可以下載到的)
對(duì)提高matlab編程能力的方法,我想主要有以下三個(gè):
1. 查help
如何查?抽絲剝繭法,具體請(qǐng)看此貼2樓:matlab畫(huà)的三維圖的怎么使x軸的label標(biāo)注平行于x軸
2. 多上上論壇,搜索帖子、發(fā)帖子提問(wèn)
3. 閱讀別人、特別是牛人的程序
當(dāng)然了,正如所有的程序語(yǔ)言一樣,“3分課本7分上機(jī)”,一定要?jiǎng)邮植判?,不能光看。多想、多思考、多嘗試,才是正路。
以下技巧就是平日動(dòng)手編程、閱讀別人的帖子后整理出來(lái)的(不斷添加中):
·1. matlab的運(yùn)算是基于矩陣的,但是也提供了對(duì)應(yīng)元素的運(yùn)算,即在運(yùn)算符前面加上“點(diǎn)”。例如:
>> a = [1,2;3,4]
a =
12
34
>> b = [-1,-2;-3,0]
b =
-1 -2
-30
>> a * b
ans =
-7 -2
-15 -6
>> a .* b
ans =
-1 -4
-90
也就是說(shuō),沒(méi)有加“點(diǎn)”的運(yùn)算是對(duì)整個(gè)矩陣而言的,稱為矩陣運(yùn)算(整體運(yùn)算),而加了“點(diǎn)”的運(yùn)算是對(duì)每個(gè)元素而言的,稱為點(diǎn)運(yùn)算(局部運(yùn)算)。另外,一般情況下,matlab作點(diǎn)運(yùn)算(理解為左右兩個(gè)對(duì)象(矩陣)的對(duì)應(yīng)元素參與該運(yùn)算)時(shí),兩個(gè)矩陣的維數(shù)和長(zhǎng)度都要求是同大小的,且此時(shí)要在運(yùn)算法前面添加“點(diǎn)”,但是在某些情況下該“點(diǎn)”可以省略,例如一個(gè)標(biāo)量a和一個(gè)向量b(或者矩陣)相加、相減、相乘、b/a時(shí)都可以不需要加點(diǎn),表示b中每個(gè)元素都和a進(jìn)行運(yùn)算(即點(diǎn)運(yùn)算的效果)
·2.強(qiáng)烈建議大家在命名自己的函數(shù)名(更加準(zhǔn)確應(yīng)該說(shuō)m文件名)時(shí),在名稱前面加上 my 等個(gè)人專用標(biāo)識(shí),即假如你要把你的函數(shù)命名為conv,則最好寫(xiě)成 myConv,否則容易與matlab自帶的函數(shù)(m文件)名字重復(fù)而導(dǎo)致“Attempt to execute SCRIPT conv as afunction”的錯(cuò)誤!當(dāng)你碰到這個(gè)錯(cuò)誤時(shí),可以在命令窗口中輸入which conv all來(lái)看看到底有否重復(fù)命名了該函數(shù),有的話,建議把自己命名的文件改名,保留matlab自帶的文件。此外,命名文件名時(shí),必須符合標(biāo)識(shí)符的規(guī)范,即不能以數(shù)字開(kāi)頭等等,否則會(huì)出現(xiàn)莫名其妙的錯(cuò)誤!
·3.在條件判斷中,y==0, a-b==0這類(lèi)語(yǔ)句應(yīng)該盡量避免使用,除非你可以保證y、a、b在整個(gè)計(jì)算過(guò)程中是整數(shù),否則兩個(gè)浮點(diǎn)數(shù)相減、或者一個(gè)浮點(diǎn)數(shù)不可能完全等于0。因此,對(duì)浮點(diǎn)數(shù)進(jìn)行條件判斷時(shí),最好采用 abs(a-b) <= 1e-005這種方式來(lái)進(jìn)行等值比較
·4.循環(huán)變量遞減時(shí)必須顯式給出步長(zhǎng),即i = 5:-1:-5(假設(shè)步長(zhǎng)為-1),如果遞增時(shí)且步長(zhǎng)為1,則可以省略,簡(jiǎn)寫(xiě)作 i =-5:5
·5.在引號(hào)環(huán)境下的語(yǔ)句中,如果需要使用單引號(hào),則要寫(xiě)成兩個(gè)單引號(hào)的形式,不能用一個(gè)雙引號(hào)代替!例如:...'callback','[imp,Fs,bits]=wavread(''temp.wav'');'文件名temp.wav外面的是兩個(gè)單引號(hào)
·6. 如果你編寫(xiě)的函數(shù)帶有輸入?yún)?shù)(例如 x),則跟其他語(yǔ)言一樣,這只是形式參數(shù),所以不能通過(guò)直接運(yùn)行該函數(shù)(或者m文件)來(lái)測(cè)試,這樣會(huì)出現(xiàn) ??? Input argument "x" isundefined. 的錯(cuò)誤。一定要從其他地方(如命令窗口或者其他函數(shù)對(duì)其調(diào)用)來(lái)傳遞真實(shí)值,此時(shí) x 才是實(shí)際參數(shù)。如果你有C語(yǔ)言的編程經(jīng)驗(yàn),命令窗口就相當(dāng)于main函數(shù);如果沒(méi)有,以下是舉例:
myPlus.m:
此外,和每一種編程語(yǔ)言一樣,所有定義的變量都有一定的作用域。雖然matlab宣稱變量不需要定義即可以直接使用,但是,事實(shí)上任何編程語(yǔ)言的變量都需要先定義才能使用,所以matlab也不例外(看來(lái)真的是“ matlab宣稱變量不需要定義”惹的禍),只不過(guò)所不同的是并非使用int x 這種方式來(lái)定義,而是使用一個(gè)簡(jiǎn)單的賦值語(yǔ)句包含定義+初始化。因此,如果直接使用未定義的變量(最常用的是在“=”右邊首次出現(xiàn)),則會(huì)出現(xiàn)“Undefined function orvariable” 的錯(cuò)誤!例如:
則運(yùn)行時(shí)matlab會(huì)報(bào)錯(cuò):Undefined function or variablet!此時(shí)當(dāng)實(shí)際參數(shù)傳遞給輸入變量x 后, x、z 就被定義了,但是 t卻沒(méi)有。
因此,強(qiáng)烈建議在使用變量之前(特別是循環(huán)中使用數(shù)組),先預(yù)分配空間,這樣容易減少很多莫名其妙的錯(cuò)誤,具體做法參見(jiàn)以下圖片:
·7. 如何調(diào)試程序:編好程序(先保證代碼沒(méi)有語(yǔ)法錯(cuò)誤),設(shè)置斷點(diǎn)(m文件編輯窗口中菜單 Debug 有 Set/Clear breakpoint),運(yùn)行程序(菜單 Debug 有 Run 或 Save &Run),此時(shí) matlab會(huì)停在斷點(diǎn)處,各變量的值可以通過(guò)鼠標(biāo)停留在變量名上觀察到,或者在命令窗口中敲入變量名后得到
·8. 對(duì)于matlab自帶函數(shù)(命令)的問(wèn)題,請(qǐng)多利用matlab的幫助功能。即在命令窗口中輸入: help eval 或者 doceval。更多的幫助指令請(qǐng)參閱以下鏈接的帖子:[轉(zhuǎn)帖]MATLAB中的幫助指令
·9. 對(duì)于 mat文件的讀取,由于存放的是結(jié)構(gòu)體數(shù)組,因此調(diào)用 A =load('*.mat') 后,得到的 A 并非原始數(shù)據(jù),而是一個(gè)結(jié)構(gòu)體,此時(shí)需要使用".域名" 才能正確得到數(shù)據(jù),例如:
后得到:
A =
Signal:[85x7794x64 single]
TargetChar: [1x85 char]
Flashing:[85x7794 single]
StimulusCode: [85x7794single]
StimulusType: [85x7794single]
則用:
·此外,不建議使用load *; 這種方式讀取mat文件(讀取dat等其他格式的文件也是類(lèi)似),因?yàn)榇藭r(shí)讀取后的變量名是存儲(chǔ)時(shí)設(shè)定的,假若文件并非您本人存儲(chǔ),則無(wú)法獲悉這個(gè)變量名,通過(guò)這種方式是無(wú)法在讀取時(shí)候指定數(shù)據(jù)存放在哪個(gè)變量中的,這樣將會(huì)導(dǎo)致下文不知道使用哪個(gè)變量名,甚至?xí)?dǎo)致出錯(cuò)!因此,強(qiáng)烈建議采用A = load('*.mat');方式進(jìn)行讀取,當(dāng)然了,如果文件是您本人存儲(chǔ)的,則用前面的方式比較簡(jiǎn)便,這另當(dāng)別論。下面以 dat 文件作為例子說(shuō)明:
clear all
>> a = magic(4);b =ones(2, 4) * -5.7;c = [8 6 42];
>> save -ascii 1_data.dat
>> load 1_data.dat
因?yàn)檫@種方式的讀取是把數(shù)據(jù)默認(rèn)存放在以“不含后綴的文件名”命名的變量中(這里為 1_data),但是由于 1_data 不是合法的標(biāo)識(shí)符,因此 matlab 自動(dòng)改成 X1_data(不同版本的matlab可能不同),即讀取出來(lái)的數(shù)據(jù)事實(shí)上是存放在 X1_data 變量中。如果使用 m 文件方式編程(即 load 1_data.dat后有分號(hào)),則這個(gè)變量名根本不會(huì)顯示出來(lái),也就是說(shuō),對(duì)它的改名你是毫不知情的,這時(shí)候下文繼續(xù)使用 1_data 的話,就會(huì)產(chǎn)生錯(cuò)誤。
·10. matlab 對(duì)中文的文件路徑(不光是文件名)不太支持,特別是6.5 版本。
·11. 函數(shù)不能在命令窗口中定義,只能在 m文件中定義。否則出現(xiàn): ???Error: Function definitions are notpermitted at the prompt or in scripts. 的錯(cuò)誤!
最后,整理一下常用的快捷鍵(用【】表示)或命令:
1. 在命令窗口(CommandWindow)中:
1) 【上、下鍵】――切換到之前、之后的命令,可以重復(fù)按多次來(lái)達(dá)到你想要的命令
2)clc――清除命令窗口顯示的語(yǔ)句,此命令并不清空當(dāng)前工作區(qū)的變量,僅僅是把屏幕上顯示出來(lái)的語(yǔ)句清除掉
3) clear――這個(gè)才是清空當(dāng)前工作區(qū)的變量命令,常用語(yǔ)句clear all來(lái)完成
4) 【Tab】鍵――(轉(zhuǎn)自版友心燈)在matlab@hit.edu.cn看到的:在command窗口,輸入一個(gè)命令的前幾個(gè)字符,然后按tab鍵,會(huì)彈出前面含這幾個(gè)字符的所有命令,找到你要的命令,回車(chē),就可以自動(dòng)完成。目前討論結(jié)果是:matlab6.5版本中,如果候選命令超過(guò)100個(gè),則不顯示。而在matlab7以后版本中,則沒(méi)有這個(gè)限制,均可正常提示
5) 【Ctrl+C】(或【Ctrl+Break】)――(轉(zhuǎn)自版友yangjin_ren)在matlab程序運(yùn)行過(guò)程中,可能由于程序編寫(xiě)的失誤,導(dǎo)致程序不停的運(yùn)行,在命令窗口輸入“Ctrl+C”可以將運(yùn)行的程序停下來(lái),而不需要將整個(gè)Matlab程序關(guān)掉。不過(guò)進(jìn)行此操作的前提是能夠激活切換到命令窗口才行,呵呵。
2. 在編輯器(Editor)中:
1) 【Tab】(或【Ctrl+]】)――增加縮進(jìn)(對(duì)多行有效)
2) 【Ctrl+[】--減少縮進(jìn)(對(duì)多行有效)
3) 【Ctrl+I】--自動(dòng)縮進(jìn)(即自動(dòng)排版,對(duì)多行有效)
4) 【Ctrl+R】――注釋(對(duì)多行有效)
5) 【Ctrl+T】――去掉注釋(對(duì)多行有效)
6) 【Ctrl+B】――括號(hào)配對(duì)檢查(對(duì)版本6.5有效,但版本7.0以上無(wú)效,matlab把這項(xiàng)功能自動(dòng)集成到編輯器里面了,即在m文件編輯窗口中會(huì)自動(dòng)進(jìn)行括號(hào)配對(duì)檢查,并在窗口右側(cè)有紅橙綠三燈提示,具體請(qǐng)參考以下帖子:http://www.simwe.com/forum/thread-746722-1-4.html)
7) 【F12】――設(shè)置或取消斷點(diǎn)
8) 【F5】――運(yùn)行程序
其余的例如在Debug狀態(tài)下的快捷鍵就不多說(shuō)了,自己看菜單Debug吧
累了, 有時(shí)間再寫(xiě)吧。希望大家多交流~~~~~~
Coming: (以下東西都是一年前做的了,不知道能否記起,呵呵)——已經(jīng)全部完成
1) 關(guān)于神經(jīng)網(wǎng)絡(luò)的――調(diào)用matlab的nntool命令后的使用問(wèn)題(我做的時(shí)候沒(méi)有看過(guò)其他書(shū)籍或資料,是自己閉門(mén)造車(chē)的結(jié)果,如果寫(xiě)之前發(fā)現(xiàn)其他書(shū)籍有相關(guān)介紹的話就不寫(xiě)了)
2) 關(guān)于外部接口的――matlab與C++Builder的接口,想詳細(xì)介紹如何利用matcom 4.5在C++Builder中調(diào)用matlab的代碼以及matcom的一些技巧。由于我不是搞項(xiàng)目開(kāi)發(fā)的(搞科研、搞課題的),所以對(duì)VC不熟悉,大學(xué)的時(shí)候?qū)W過(guò)一點(diǎn),不過(guò)我想對(duì)于搞科研來(lái)說(shuō)C++Builder就足夠了,免去很多麻煩,Builder在界面設(shè)計(jì)和數(shù)據(jù)庫(kù)連接上面(我只接觸過(guò)這兩方面)還是做得不錯(cuò)的。同樣,如果發(fā)現(xiàn)其他書(shū)籍上有類(lèi)似的東西就不寫(xiě)了
3) GUI方面也寫(xiě)寫(xiě)吧,只是一點(diǎn)點(diǎn)心得或者體會(huì),呵呵,這個(gè)相對(duì)簡(jiǎn)單些,篇幅相對(duì)要少些。
matlab程序報(bào)錯(cuò)意思釋疑
1.Subscript indices must either be real positive integersor logicals
中文解釋:下標(biāo)索引必須是正整數(shù)類(lèi)型或者邏輯類(lèi)型
愛(ài)華網(wǎng)本文地址 » http://www.klfzs.com/a/25101012/106940.html
愛(ài)華網(wǎng)



