呼叫函数的表达方式
在另一帖http://forum.vibunion.com/thread-75433-1-1.html回覆了网友, 怕说不清再发帖, 试着说明清楚!
不确定是否已经有类似帖子, 若有的话再麻烦删除!
时常用matlab的使用者, 是否发现有些指令好像不需要括号'()'传递引数, 例如load, save, help, format…, 有些则一定得使用括号传递引数, 例如plot, abs, ones, fft…, 为何有这些区别差异? 试着说说, 不对请指正! 谢谢!
1.原则上matlab函数的输入引数, 一般都是会使用括号(), 如plot(x,y)…, 即所谓函数格式
2.若函数的所有输入引数都为字串(char)变数, 而且无任何输出引数, 则允许可以不使用括号, 即所谓命令格式
例如: grid on或grid 'on' 等同grid('on')
format short e或format 'short' e或format short 'e' 或format 'short' 'e' 等同format('short', 'e')
3.若不使用括号传递引数, 则该引数会自动被当作字串变数
例如: disp(aa)的输入引数aa允许是数字变数或字串变数, 但若无括号disp aa则一律被视为字串变数; 比较以下各指令之间的差异
>> aa=; bb='abc'; whos
Name Size BytesClass
aa 1x5 40double array
bb 1x3 6char array
Grand total is 8 elements using 46 bytes
>> disp(aa)
1 2 3 4 5
>> disp('aa')
aa
>> disp aa%% 等同disp('aa')
aa
>> disp 'aa'%% 等同disp('aa')
aa
>> disp(bb)
abc
>> disp('bb')
bb
>> disp bb%% 等同disp('bb')
bb
>> disp 'bb'%% 等同disp('bb')
bb
4.再举下一个例子前, 先说明ascii码所对应的情况 : 数字0~9对应48~57, A~Z对应65~90, a~z对应97~122, 可由下列指令看出其对应关系; 为何要提这个? 因为根本上所有的字串变数都是对应一组ascii码的
>> char()
ans =
0123456789
>> char()
ans =
ABCDEFGHIJKLMNOPQRSTUVWXYZ
>> char()
ans =
abcdefghijklmnopqrstuvwxyz
5.综合3 & 4, 相同aa=; bb='abc'; 再比较以下各指令之间的差异
>>double(aa)
ans =
1 2 3 4 5
>>double aa%% 等同double ('aa')或double 'aa', 小写a对应97
ans =
97 97
>>double(bb)%% bb='abc', 而小写abc分别对应97, 98, 99
ans =
97 98 99
>>double bb%% 等同double ('bb')或double 'bb', 小写b对应98
ans =
98 98
6.这个例子跟matlab版本就有差异! 以下为v6.5之前的情况, 较新版就不允许命令格式
A =;
>> eig(A)
ans =
-3.0710
-2.4645 +17.6008i
-2.4645 -17.6008i
>>eig A%% 等同eig('A')或eig 'A', 大写A对应65
ans =
65
>>eig 9%% 等同eig('9')或eig '9', '9'对应57
ans =
57
>>eig 99%% 等同eig('99')或eig '9', '99' 对应
??? Error using ==> eig
Matrix must be square.
[ 本帖最后由 ChaChing 于 2009-1-9 14:02 编辑 ] 前几天出差,今天看了chaching的帖子,讲的十分透彻,十分令人佩服。
回复 沙发 xueeux 的帖子
客气! 只希望有用! 认真学习了楼主的帖子,很有用!
页:
[1]