这里有有两点需要说明:
第一,请注意sym(K, 'd'),如果直接使用subs('sin(K*x)/x, 'K', K)或subs('sin(K*x)/x, 'K', sym(K))的话,高版本的符号工具箱会将K尽可能化为分数,有时这是十分恐怖的,也许会得到:
sin(6649179754310225/9007199254740992*x)/x 这样的结果。
第二,注意vectorize函数。sym对象重载的char函数会把数组的乘除(.*, ./, .^)化成矩阵的乘除(*, /, ^),vectorize会将字符串里的*,/,^全化成.*, ./, .^,如果不这样做,quad函数将会出错,这个问题曾经困扰了我很长的时间:
quad( inline(char(y)), a, b)
??? Index exceeds matrix dimensions.
Error in ==> D:\MATLAB6p5\toolbox\matlab\funfun\quad.m
On line 67 ==> if ~isfinite(y(7))
隐藏的图形对象属性
Matlab的所谓句柄图形(handle graphics)对象的配置是通过许多属性的设置来完成的。有一些帮助文件中没有提到的确实存在的属性。
figure的Toolbar属性
有三个值:'none', 'auto', 'figure'
利用这个属性可以把figure变成没有菜单条却有工具栏的样式:
figure('Menubar', 'none', 'Toolbar', 'figure')
root object的Default属性
在我的Malab环境里,Root object有如下的默认值:
get(0, 'Default')
ans =
defaultFigurePosition: [232 258 560 420]
defaultTextColor: [0 0 0]
defaultAxesXColor: [0 0 0]
defaultAxesYColor: [0 0 0]
defaultAxesZColor: [0 0 0]
defaultPatchFaceColor: [0 0 0]
defaultPatchEdgeColor: [0 0 0]
defaultLineColor: [0 0 0]
defaultFigureInvertHardcopy: 'on'
defaultFigureColor: [0.8000 0.8000 0.8000]
defaultAxesColor: [1 1 1]
defaultAxesColorOrder: [7x3 double]
defaultFigureColormap: [64x3 double]
defaultSurfaceEdgeColor: [0 0 0]
defaultFigurePaperType: 'A4'
defaultFigurePaperUnits: 'centimeters'
实际上,还有一些默认值不会被显示出来:
get(0, 'defaultUicontrolBackgroundColor')
get(0, 'defaultUicontrolForegroundColor')
get(0, 'defaultUicontrolFontName')
get(0, 'defaultUicontrolFontSize')
get(0, 'defaultUicontrolFontWeight')
get(0, 'defaultUicontrolFontAngle')
ans =
0.7725 0.7961 0.8118
ans =
0 0 0
ans =
MS Sans Serif
ans =
8
ans =
normal
ans =
normal
这些默认值有助于在创建用户界面时遵循操作系统颜色,例如:
figure('Color', get(0,'defaultUicontrolBackgroundColor'))
system_dependent('getdata')
system_dependent('getwinsys')
版本
使用version函数可以获得Matlab或工具箱的版本:
v1 = ver('matlab')
v1 =
Name: 'MATLAB'
Version: '6.5'
Release: '(R13)'
Date: '20-Jun-2002'
v2 = ver('control')
v2 =
Name: 'Control System Toolbox'
Version: '5.2'
Release: '(R13)'
Date: '28-Jun-2002'
如果工具箱不存在或没有安装返回空结构
v3 = ver('nonsense')
v3 =
0x0 struct array with fields:
Name
Version
Release
Date
可以利用这个函数让自己的程序在不当的Matlab版本上运行时给出比较体面的警告。另外,有一个帮助中没有提及的内部函数system_dependent可以获得操作系统的版本:
system_dependent('getos')
ans =
Microsoft Windows XP
system_dependent('getwinsys')
ans =
Version 5.1 (Build 2600)
uitools工具集
除了帮助中提及的一些GUI工具函数外,matlabroot\toolbox\matlab\uitools里还有不少帮助里没有提及的函数,建议仔细研究一下(help uitools),例如,makemenu函数可以从字符串中生成菜单:
labels = str2mat( '&File', '>&New^n', '>&Open', '>>Open &document^d', '>>Open &graph^g', ...
'>-------', '>&Save^s', '&Edit', '&View', '>&Axis^a', '>&Selection region^r' );
calls = str2mat( '', 'disp(''New'')', '', 'disp(''Open doc'')', 'disp(''Open graph'')', '', ...
'disp(''Save'')', '', '', 'disp(''View axis'')', 'disp(''View selection region'')' );
handles = makemenu( figure('Menubar', 'none'), labels, calls);
[ 本帖最后由 ChaChing 于 2010-3-31 00:14 编辑 ] |