c语言向量化编程,matlab笔记向量化编程002.docx

41528d3028836879cd698677c3999917.gifmatlab笔记向量化编程002.docx

002MATLAB编程思想向量化编程C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。而MATLAB是以向量、矩阵为基本元素的,所以要编写真正的MATLAB程序必须抛弃【C语言那种“单数值、元素化”考虑问题】的思路,转以向量、矩阵为最小单位来考虑问题。也就是说,MATLAB的编程思想是向量化编程,即面向向量或矩阵。这样做的好处,至少有两个(1)代码大大简化,易编程、清晰可读性强;这样的代码才叫MATLAB代码,否则只能是不伦不类的代码C不C,MATLAB不MATLAB(2)执行效率也更高;这是次要的,随着MATLAB对循环机制的优化,速度差异已不再那么明显,关键是(1)下面针对MATLAB中常见的向量化处理问题方法,举例加以说明(一)整体操作“大块数据”MATLAB为同型的数据块(向量或矩阵)的整体做运算提供了【点运算】,这里我借用线性代数里的说法,矩阵行数、列数相同称为同型矩阵,MATLAB里矩阵可能不止2维。比如,AC和A/C表示A与C的对应位置的各元素做和/运算得到与它们同型的一个新矩阵。例1物理实验利用测得的电压电流具体数据,验证欧姆定律RU/I代码1(C语言风格)U089,120,309,427,362,771,899,792,970,1041I0028,0040,0100,0145,0118,0258,0299,0257,0308,0345LLENGTHUS0FORK1LRKUK/IKSSRKENDRS/L运行结果R305247代码1’(MATLAB风格)U089,120,309,427,362,771,899,792,970,1041I0028,0040,0100,0145,0118,0258,0299,0257,0308,0345RU/IRMEANR运行结果R305247(二)尽量把【C语言风格的循环】向量化实现见上例,再比如,例2计算11/31/99代码2(C语言风格)S0FORK1299SS1/KENDS运行结果S29378代码2’(MATLAB风格)K1299SSUM1/K运行结果S29378注意代码2’中,不要写成“FORK1299”,否则K就是变化的一个数值而不是数组了。例3用间距为01的水平线和垂直线均匀分割X∈5,525,25的矩形域,在所有水平线和垂直线交点上计算函数ZSIN|XY|的值,并图示。(1)求出各网格点的函数值代码3(C语言风格)(注2)X5015Y250125 NLENGTHXMLENGTHYFORII1MFORJJ1NX0II,JJXJJY0II,JJYIIZ0II,JJSINABSXJJYIIENDEND代码3’(MATLAB风格)X,YMESHGRID5015,250125ZSINABSXY(2)画图SURFX,Y,Z画三维图形XLABEL X 标记坐标轴YLABEL Y SHADINGINTERP用插值处理色彩VIEW190,70旋转一定角度观看图形(三)尽量使用MATLAB现成的【矩阵操作语法和函数】MATLAB提供了大量非常便捷的矩阵操作语法和操作矩阵的函数,优先使用它们来完成程序。(1)操作矩阵的函数,比如MNSIZEA返回矩阵A的“型”,M行N列LENGTHA返回行数或列数中最大的那个MEANA返回A中所有元素平均值SUMA或SUMA,1返回A各列元素之和,各行之和用SUMA,2YIMAXAYA各列元素的最大值I各列最大值所在行SORTA矩阵各列按递增排序,递减排序加参数‘DESCEND’UNIQUEA返回矩阵A中不重复的值(去掉重复元素)等等这些函数已经实现了通常所需要的各种操作,所以完全没有必要再去按C语言的思路去自己重写代码。(2)矩阵操作语法,主要是“”的使用,放到下次再具体来说MATLAB学习系列3矩阵操作最后,习惯了C语言的思维,不是一下就能转变过来的,但要有意识地强迫自己写MATLAB风格的代码,写C语言风格代码不如不写。注1C语言循环和判断的机制是通用的,MATLAB里也有循环和判断,但是以向量或矩阵作为基本元素的循环和判断。注2写MATLAB循环代码时,尽量避免使用I和J,因为它俩是虚数单位(1开根号)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值