MATLAB 编程技巧.doc

上传人:asd****56 文档编号:70331093 上传时间:2023-01-19 格式:DOC 页数:5 大小:138.50KB
返回 下载 相关 举报
MATLAB 编程技巧.doc_第1页
第1页 / 共5页
MATLAB 编程技巧.doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《MATLAB 编程技巧.doc》由会员分享,可在线阅读,更多相关《MATLAB 编程技巧.doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、MATLAB 编程技巧一、 尽量避免使用循环:循环语句及循环体经常被认为是MATLAB 编程的瓶颈问题。改进这样的状况有两种方法:(1) 尽量用向量化的运算来代替循环操作。我们将通过如下的例子来演示如何将一般的循环结构转换成向量化的语句。例3.19考虑下面无穷级数求和问题: 如果我们只求出其中前有限项,比如 100,000 项之和 (要精确地求出级数的和,无需求 100000 项,几十项往往就能得出满意的精度。这里主要是为了演示循环运算向量化的优越性。),则可以采用下面的常规语句进行计算 tic, s=0;for i=1:100000, s=s+(1/2i+1/3i); end, s,tocs

2、 =1.5000elapsed_time =1.9700 如果采用向量化的方法,则可以得出下面结果。可以看出,采取向量化的方法比常规循环运算效率要高得多。 tic, i=1:100000; s=sum(1./2.i+1./3.i), tocs =1.5000elapsed_time =0.3800(2)在必须使用多重循环的情况下,如果两个循环执行的次数不同,则建议在循环的外环执行循环次数少的,内环执行循环次数多的。这样也可以显著提高速度。 例3.20考虑生成一个 5x10000 的 Hilbert 长方矩阵,该矩阵的定义是其第 i 行第 j 列元素为 h_i,j=1/(i+j-1)。我们可以由

3、下面语句比较先进行 i=1:5 的循环和后进行该循环的耗时区别,其效果和前面分析的是一致的。 ticfor i=1:5for j=1:10000H(i,j)=1/(i+j-1);endendtocelapsed_time =8.6800 tic,for j=1:10000for i=1:5J(i,j)=1/(i+j-1);endendtocelapsed_time =25.7000 二、 大型矩阵的预先定维 给大型矩阵动态地定维是个很费时间的事。建议在定义大矩阵时,首先用 MATLAB 的内在函数,如zeros() 或 ones() 对之先进行定维,然后再进行赋值处理,这样会显著减少所需的时间

4、的。再考虑例 3-20 中的问题,如果输入下面的命令 ticH=zeros(5,10000);for i=1:5for j=1:10000H(i,j)=1/(i+j-1);endendtocelapsed_time =1.0400则采用预先定维的方法,再结合向量化的方法,我们可以给出下面的 MATLAB 语句。 ticH=zeros(5,10000);for i=1:5H(i,:)=1./i:i+9999;endtocelapsed_time =0.060 可见,预先定维后,所需要的时间显著地减少了。可以看出,同样一个问题,由于采用了有效的措施,所需的时间就可以从 25.7 秒减少到 0.06

5、 秒,亦即效率提高了 428 倍。 三、 对二重循环这样的特殊问题,我们还可以使用 meshgrid() 函数构造两个 5x10000 矩阵 i 和 j,从而直接得出 H 矩阵,更进一步地加快速度。 tic, i,j=meshgrid(1:5,1:10000); H=1./(i+j-1); tocelapsed_time =0 四、 优先考虑内在函数 矩阵运算应该尽量采用 MATLAB 的内在函数,因为内在函数是由更底层的编程语言 C 构造的,其执行速度显然快于使用循环的矩阵运算。 五、 采用有效的算法 在实际应用中,解决同样的数学问题经常有各种各样的算法。例如求解定积分的数值解法在 MATL

6、AB中就提供了两个函数 quad() 和 quad8(),其中后一个算法在精度、速度上都明显高于前一种方法。所以说,在科学计算领域是存在“多快好省”的途径的。如果一个方法不能满足要求,可以尝试其他的方法。 六、 应用 Mex 技术 虽然采用了很多措施,但执行速度仍然很慢,比如说耗时的循环是不可避免的,这样就应该考虑用其他语言,如 C 或 Fortran 语言。按照 Mex 技术要求的格式编写相应部分的程序,然后通过编译联接,形成在 MATLAB 可以直接调用的动态连接库 (DLL) 文件,这样可以显著地加快运算速度。MATLAB 图形上的文字修饰字符对象及其属性 文字标注是图形修饰中的重要因素

7、,它可以是用户在窗口上随意添加的字符说明,还可以是坐标轴对象中所用到的刻度标志等。字符对象的常用属性如下: Color 属性: 字符的颜色。该属性的属性值是一个 1x3 颜色向量。 FontAngle 属性: 字体倾斜形式。如正常 normal 和斜体 italic 等。 FontName 属性: 字体的名称。如 Times New Roman 与 Courier 等。 FontSize 属性: 字号大小。默认以 pt 为单位,属性值应该为实数。 FontWeight 属性: 字体是否加黑。可以选择 light、normal (默认值)、demi 和 bold 4 个选项, 其颜色逐渐变黑。

8、HorizontalAlignment 属性: 表示文字的水平对齐方式。可以有 left (按左边对齐)、center(居中对齐)、right(按右边对齐) 三种选择。类似地,对字符矩阵的位置 还有VerticalAlignment 属性。 FontUnits 属性: 字体大小的单位。如 points (磅数,即 pt) 为默认的值,此外, 还可以使用如下单位 inches (英寸)、centimeters (厘米)、normalized (归一值) 与 pixels (像素) 等。 Rotation 属性: 字体旋转角度。可以为任何数值。 Editing 属性: 是否允许交互式修改。选项可以

9、为 on 和 off。 String 属性: 构成本字符对象的字符串。可以是字符串矩阵。 Interpreter 属性: 是否允许 TeX 格式。选项为 tex (允许 TeX 格式) 和 none (不允许) 两种,前者显示的效果好,而后者速度快。 Extent 属性: 字符串所在的位置范围,是只读型的,1x4 向量,前两个值表示字符串所在位置的左下角坐标,而后两个分量分别为字符对象的长和高。 MATLAB 字符串中可以直接使用的一些 TeX 命令见表 4-3。例给出下面的MATLAB命令 t=partial(f_ip)/partialt=-Sigma_i=1npartial(f_ip)/,

10、. partialx_i + 0.5Sigma_i=1nSigma_j=1n,. partial2(b_ijp)/partialx_ipartialx_j; tt=str2mat(t,Y(omega)=int_0infty y(t)e-jomegatdt); x,y=ginput(1); text(x,y,tt); 则将得出如下图所示的结果。看见较复杂的数学公式也可以在 MATLAB 窗口中显示出来。 例分形理论是一个很有趣的领域,在这里我们给出一个简单的例子。任意选定一个二维平面上的初始点坐标 (x0, y0),假设我们可以生成一个在 0,1 区间上均匀分布的随机数 gi,那么根据其取值的大

11、小,可以按下面的公式生成一个新的坐标点 (x1,y1): 从新坐标再根据随机数计算下一个点,如此类推。可以将上面的算法编写出下面的 MATLAB 函数 function x,y=frac_tree(x0,y0,v,N)x=x0; zeros(N-1,1); y=y0; zeros(N-1,1);for i=2:N vv=v(i); if vv0.05, y(i)=0.5*y(i-1); elseif vv0.45, x(i)=0.42*(x(i-1)-y(i-1); y(i)=0.2+0.42*(x(i-1)+y(i-1); elseif vv N=10000; v=rand(N,1); x,y=frac_tree(0,0,v,N); h=plot(x(1:10000),y(1:10000),.),给出下面的命令可以设置绘图点的大小: set(h,MarkerSize,4)对大的 N 值,计算量大,可以考虑采用MEX C格式改写 MATLAB 函数以加快速度。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁