第一篇:Matlab学习心得系列——002. Matlab编程思想——向量化编程
002.Matlab编程思想——向量化编程
C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。
而Matlab是以向量、矩阵为基本元素的,所以要编写真正的Matlab程序必须抛弃【C语言那种“单数值、元素化”考虑问题】的思路,转以向量、矩阵为最小单位来考虑问题。也就是说,Matlab的编程思想是——向量化编程,即面向向量或矩阵。
这样做的好处,至少有两个:
(1)代码大大简化,易编程、清晰可读性强;
这样的代码才叫Matlab代码,否则只能是不伦不类的代码:C不C,Matlab不Matlab.(2)执行效率也更高;
这是次要的,随着Matlab对循环机制的优化,速度差异已不再那么明显,关键是(1)
下面针对Matlab中常见的向量化处理问题方法,举例加以说明:
(一)整体操作“大块数据”
Matlab为同型的数据块(向量或矩阵)的整体做运算提供了【点运算】,这里我借用《线性代数》里的说法,矩阵行数、列数相同称为同型矩阵,Matlab里矩阵可能不止2维。
比如,A.*C 和 A./C 表示A与C的对应位置的各元素做 * 和/运算得到与它们同型的一个新矩阵。
例1.物理实验利用测得的电压电流具体数据,验证欧姆定律R=U/I.代码1(C语言风格)
U=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];I=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];L=length(U);S=0;for k=1:L R(k)=U(k)/I(k);S=S+R(k);end R=S/L
运行结果:R = 30.5247 代码1’(Matlab风格)
U=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];I=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];R=U./I;R=mean(R)
运行结果:R = 30.5247
(二)尽量把【C语言风格的循环】向量化实现
见上例,再比如,例2.计算1+1/3+„+1/99
代码2(C语言风格)
s = 0;fork=1:2:99 s = s + 1/k;end s
运行结果:s = 2.9378
代码2’(Matlab风格)
k=1:2:99;s = sum(1./k)
运行结果:s = 2.9378
注意:代码2’中,不要写成“for k=1:2:99”, 否则k就是变化的一个数值而不是数组了。
例3.用间距为0.1的水平线和垂直线均匀分割x∈[-5,5]×[-2.5,2.5]的矩形域,在所有水平线和垂直线交点上计算函数z=sin|xy|的值,并图示。
(1)求出各网格点的函数值
代码3(C语言风格)(注2)
x=-5:0.1:5;
y=(-2.5:0.1:2.5)';
N=length(x);
M=length(y);
for ii=1:M forjj=1:N X0(ii,jj)=x(jj);Y0(ii,jj)=y(ii);
Z0(ii,jj)=sin(abs(x(jj)*y(ii)));end end
代码3’(Matlab风格)
[X,Y]=meshgrid(-5:0.1:5,-2.5:0.1:2.5);Z=sin(abs(X.*Y));
(2)画图
surf(X,Y,Z)% 画三维图形 xlabel('x')% 标记坐标轴 ylabel('y')shading interp % 用插值处理色彩
view([190,70])% 旋转一定角度观看图形
(三)尽量使用Matlab现成的【矩阵操作语法和函数】
Matlab提供了大量非常便捷的矩阵操作语法和操作矩阵的函数,优先使用它们来完成程序。
(1)操作矩阵的函数,比如
[m n]=size(A)——返回矩阵A的“型”,m行n列 length(A)——返回行数或列数中最大的那个 mean(A)——返回A中所有元素平均值
sum(A)或sum(A,1)——返回A各列元素之和,各行之和用sum(A,2)[Y I] = max(A)——Y=A各列元素的最大值;I=各列最大值所在行 sort(A)——矩阵各列按递增排序,递减排序加参数‘descend’ unique(A)——返回矩阵A中不重复的值(去掉重复元素)
等等………..这些函数已经实现了通常所需要的各种操作,所以完全没有必要再去按C语言的思路去自己重写代码。
(2)矩阵操作语法,主要是“:”的使用,放到下次再具体来说
Matlab学习系列(3)——矩阵操作
最后,习惯了C语言的思维,不是一下就能转变过来的,但要有意识地强迫自己写Matlab风格的代码,写C语言风格代码不如不写。
注1.C语言循环和判断的机制是通用的,Matlab里也有循环和判断,但是以向量或矩阵作为基本元素的循环和判断。
注2.写Matlab循环代码时,尽量避免使用i和j,因为它俩是虚数单位(-1开根号)。
第二篇:MATLAB 编程题总结
MATLAB 编程题总结
LY 1.输出x,y两个中值较大的一个值。
x=input('x=');y=input('y=');if x>y x else y end 2.输入x,计算y的值。计算函数的值yx1,x0
2x1,x0x=input('x=');if x<0 y=x+1 else y=2*x-1 End 3.输入一学生成绩,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以为“不合格”
x=input('x=');if x>100 | x<0 y='输入错误' elseif x>=90 y='优秀' elseif x>=80 y='良好' elseif x>=70 y='中等'
elseif x>=60 y='及格' else
y='不合格' end
4.某购物超市节日期间举办购物打折扣的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。则可以根据顾客购物款数计算出优惠价。
x=input('x=');if x>=500
y=x*0.8 elseif x>=300 y=x*0.85 elseif x>=200 y=x*0.9 else
y=x*0.95 end
5.编程计算:S=1+2+3+„+100
sum=0;
for i=1:100 sum=sum+i;end sum
6.计算1~100的奇数和.sum=0;
for i=1:2:100 sum=sum+i;end Sum 或
sum=0;
for i=1:100
if mod(i,2)==1 sum=sum+i;end
end sum
7.百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。
设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:
x+y+z=100 3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
for x=1:33
for y=1:50
for z=1:200
if x+y+z==100 & 3*x+2*y+0.5*z==100 [x,y,z] end end end end
8.我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n
LiYang
第 1 页 / 共 6 页
MATLAB 编程题总结
LY n=1;m=13;while m<26 m=m*(1+0.008);n=n+1;end n 9.求水仙花数,水仙花数是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)(求出1000以内)
for i=100:999 a(1)=fix(i/100);a(2)=fix((i-a(1)*100)/10);a(3)=i-a(1)*100-a(2)*10;if a(1)^3+a(2)^3+a(3)^3==i i end end 10.鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?
for i=1:50 for j=1:36 if i+j==36&i*2+j*4==100 [i,j] end end end 1.用matlab编程求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表
示一个三位数)。
for x=1:9
for y=1:9 for z=1:9
i=100*x+10*y+z+100*y+10*z+z;
if i==532 [x,y,z] end end end end
2.用matlab编程完成用一元人民币换成一分、两分、五分的所有兑换方案(即输出所有的组合方式)。
for i=0:20
for j=0:50
k=100-i*5-j*2;if(k>=0)[i,j,k] end end end
3.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后可以卖完,请用matlab编程计算。
day=0;x1=1020 while(x1)
x2=x1/2-2;x1=x2;
day=day+1;
end day
4.有一堆零件(100到200之间),如果分成4个零件一组的,则多2个零件;若分成7个零件一组的,则多3个零件;若分成9个零件一组的,则多5个零件。用matlab编程求这堆零件总数。
for i=100:200
if(mod(i-2,4)==0)
if(mod(i-3,7)==0)
if(mod(i-5,9)==0)i end end end end
5.编写程序,求1000至9999之间的回文数.回文数是指正读与反读都一样的数,如1221.for i=1000:1000:9999 for j=0:9
n=i+j*100+j*10+i/1000 end 6.作函数
yend sin(x),x[0,2]的图象,用蓝色五角星表示点。
x=0:pi/10:2pi;y=sin(x);
plot(x,y,’b-p’);
LiYang
第 2 页 / 共 6 页
MATLAB 编程题总结
LY 1: 编写M函数 32fx2xx6.3, x20.05x3.14计算f(1)f(2)f2(3)
function y= fun1(x)y=(x^36.3)/(x^2 + 0.05*x-3.14);fun1(1)*fun1(2)+fun1(3)*fun1(3)ans =-12.6023 2:编写M函数x1,x2f(x)3x,2x84x5,8x20,cosxsinx,x20计算f(0.1),f(1),f(9),f(22),f(2)
function y=fff(x)if x<2 y=x+1;elseif x>=2 & x<=8 y=3*x;elseif x>8 & x<=20 y=4*x-5;else y=cos(x)+sin(x);end 3:根据pi*pi/6=1/1^2+1/2^2+1/3^2+„„+1/n^2,求pi的近似值。当n分别取100,1000,10000时,结果是多少?
y=0;n=100;
for i=1:n y=y+1/i/i;end y y =
1.6350 pi=sqrt(6*y)pi =
3.1321 y=0;n=1000;for i=1:n y=y+1/i/i;end y y =
1.6439 pi=sqrt(6*y)pi =
3.1406 y=0;n=10000;for i=1:n y=y+1/i/i;end y y =
1.6448 pi=sqrt(6*y)pi =
3.1415(2)y=0;n=8;
y=1./2*n-1;y y=
4:编程求[100,200]之间第一个能被21整除的整数。
for n=100:200 if rem(n,21)~=0 continue end break end
n
5:编写函数文件求半径为r的圆的面积和周长。
function [s,p]=fcircle(r)s=pi*r*r;p=2*pi*r;
6:根据y=1+11,求: 3152n-1(1)y<3时的最大n值。(2)与(1)的n值对应的y值。
y=1;n=1;while(y<3)n=n+2;y=y+1/n;
end
y=y-1/n n=(n+1)/2 运行结果: y =
2.9944
n =
LiYang
第 3 页 / 共 6 页
MATLAB 编程题总结
LY 57 7: 已知f11,n1f20,n2f31,n3
fnfn12fn2fn3,n3求f中:
1~f100最大值、最小值、各数之和。
f(1)=1;f(2)=0;f(3)=1;for i=4:100
f(i)=f(i-1)-2*f(i-2)+f(i-3);end max(f)min(f)sum(f)
1.编程计算3+33+333+3333+„..前10项之和。
m=3;n=0;s=0;for i=1:10 n=10*n+m;s=s+n;end s
2.编程求
1-1/2+1/3-1/4+.......+1/99-1/100的值。
s=0;
for i=1:100
s=s+(-1)^(i-1)*1/i;end
s3.编写程序,求 1-3+5-7+„-99+101的值。
s=0;j=1;
for i=1:2:101
s=s+(-1)^(j-1)*i;j=j+1;end
s4.编写程序,输出从公元1000年至2000年所有闰年的年号。判断公元年是否为闰年的条件是:
(1)公元年数如能被4整除,而不能被100
整除,则是闰年;
(2)公元年数能被400整除也是闰年。
for year=1000:2000
if(mod(year,4)==0&mod(year,100)~=0)|mod(year,400)==0 year end end
5.将10个整数输入到一个数组中,然后再将
其按输入顺序的逆序进行排列并输出。
for i=1:10
a(i)=input('x=');end
for i=10:-1:a(i)end
6.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?
Sn=100;Hn=Sn/2;for n=0:10
Sn=Sn+2*Hn;Hn=Hn/2;end Sn Hn
7.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘多少桃子。
day=9;x=1;while(day>0)x=(x+1)*2;day=day-1;end x
LiYang
第 4 页 / 共 6 页
MATLAB 编程题总结
LY 附:
matlab期中试卷及答案
一、计算题
1.已知A=[1 2 3;4 5 6;7 8 9],B=[1 5 0;1 0 3;0 3 4],试写出下列指令运行的结果: A<=2=,A*B=,A(1, :)*A(:, 3)=。
2.设a= [1,-2,3;4,5,9;6,3,-8], b= [2,6,1;-3,2,7;4,8,-1]。
(1)求a.*b
(2)求a.^2
(3)求 2-a
(4)求a(1:2,2:3)
(5)求min(a(:))
二、计算下列程序运行的结果
1、mysum=0;i=1;
while(i<100)
mysum=mysum+i;
i=i+1;
end
mysum
2、A=[1,2,3;4,5,6;7,8,9];
C=[A;[10,11,12]];
D=C(1:3,[2 3]);
E=C(1:3,:)
写出C、D、E的结果
3、x=[0,1,0,10,1,0,1];
for i=1:7 if x(i)==0
x(i)=1;
else
500≤price<1000
5%折扣
x(i)=0;
1000≤price<2500
8%折扣
end
2500≤price<5000
10%折扣
end 5000≤price
14%折扣
x
输入所售商品的价格,求其实际销售价格。
4、c=6;d=[4,0,6;0,8,0];(3)fibonccci数组的元素满足fibonacci规则:
x=d & c ak+2=ak+ak+1,(k=1,2,…);且a1=a2=1。现要求求出该数组中
y=d|c 第一个大于10000的元素。
z=~d
(4)计算1!+2!+3!+4!+5!+6!+„+n!值的程
写出x、y、z的结果
序。(n可以自由输入)
三、(1)建立M函数完成下列运算(函数名为
五、分析下面程序运行后s1,n1,s2,n2,m的值.jygxfun)
s1=0;s2=0;n1=0;n2=0
f(x,y,z)ze(xy)xyzsin(xy3z)x=[1,-4,-8,3,10,-9,7,-3,10, 8,-5,-2,2,0 ];
m=length(x);(2)若x=1,y=2,z=3,采取调用jygxfun方式计算
for i=1:m f值, 试编程.if x(i)<0
四、(1)编程计算下面问题, x值由键盘输入
s1=s1+x(i);2n1=n1+1;
yx1,x1else x2,1x
1s2=s2+x(i);
n2=n2+1;
(input语句).x21,x1 end
end
(2)某商场对顾客所购买的商品实行打折销
s1,n1,s2,n2,m 售,标准如下(商品价格用price来表示):
2.(1)
price<200
没有折扣
2-12
200≤price<500
3%折扣
a.*b=-12 10
24
LiYang
第 5 页 / 共 6 页
MATLAB 编程题总结
LY(2)1 a.^2= 16 25 81 36 9
64(3)2-a= 1
4-1-2
–7(4)-4
-1-2 a(1:2,2:3)= 5
(5)min(a(:))=-8 二1、4950
2、C =1 10 D = E = 1
3、x =1
0
0
0
4、x = 1
0
0
0
y = 1 z = 0
0
0
三、解:(1)
function [f]=jygxfun(x,y,z)
f=z*exp(-(x+y))+sqrt(x+y+z)*sin(x+y+3*z);(2)
x=1;y=2;z=3;f= jygxfun(x,y,z)
四、(1)解: x=input('x=?');
if x>=1
y=x^2+1;else if x<-1 y=x^2-1;else y=x^2;end end
y
(2)price=input('请输入商品价格');switch fix(price/100)
0 case {0,1}
%价格小于200 rate=0;
case {2,3,4} %价格大于等于200但小于500
rate=3/100;
case num2cell(5:9)%价格大于等于500但小于1000
rate=5/100;
case num2cell(10:24)%价格大于等于1000但小于2500
rate=8/100;
case num2cell(25:49)%价格大于等于2500但小于5000
rate=10/100;
otherwise %价格大于等于5000 rate=14/100;end
price=price*(1-rate)%输出商品实际销售价格(3)
(4)n=input('n=')
s=0
for i=1:n
m=1
for j=1:i
m=m*j;
end
s=s+m;end s
五、s1=-31;n1=6;s2=41;n2= 8;m= 14
LiYang
第 6 页 / 共 6 页
第三篇:MATLAB游戏编程实例(拼
MATLAB游戏编程实例(拼图)
这是一个简单的游戏,只要把数字按顺序排好就可以了。游戏方法是用鼠标点中数字,如果该数字相邻的格子为空,则自动移到到该空格。
本程序是由realghost编写,如果有问题可以与 slqinyi@163.com 联系。
附图如下:
function pintu1()A = gen()
G = [1 2 3;4 5 6;7 8 0];drawmap(A);
while 1
[xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col);
if row>1&A(row-1,col)==0 A(row-1,col)= num;
A(row,col)= 0;
end
if row<3&A(row+1,col)==0 A(row+1,col)= num;A(row,col)= 0;
end
if col>1&A(row,col-1)==0 A(row,col-1)= num;A(row,col)= 0;
end
if col<3&A(row,col+1)==0 A(row,col+1)= num;A(row,col)= 0;
end
drawmap(A)
zt = abs(A-G);
if sum(zt(:))==0
msgbox('ÄãÒѾ-³É¹¦Æ´ºÃͼ£¡')break
end end
function drawmap(A)clf;hold on
line([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4);
for i = 1:3
for j = 1:3
drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j));
end end
axis equal axis off
function drawrect(x1,x2,x3,x4,color,num)x = [x1(1)x2(1)x3(1)x4(1)];y = [x1(2)x2(2)x3(2)x4(2)];fill(x,y,color)if num==0
text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)else
text(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24)end
function y = gen()y = inf*ones(1,9);for i = 1:9
while 1
a = randint(1,1,9);
if isempty(find(y==a))y(i)= a;break
end
end end
y = reshape(y,3,3);
当然可以啦,其实图像就是数字矩阵,图像的拼接就是矩阵的拼接,横着拼得行数相等,竖着拼得列数相等就行
例子
clc;clear;
a=imread('我的图片.jpg');[m n t]=size(a);
b=a(1:fix(m/2),:,:);%取图像的上半部分
c=a(fix(m/2)+1:end,:,:);%取图像的下半部分
figure(1);imshow(b);
figure(2);imshow(c);
%注意,上下拼接要求两幅图的列数要相同 %左右拼行数要相同
figure(3);d=[b;c];%把b,c拼起来,若左右拼接d=[b,c];imshow(d);
第四篇:Matlab编程习惯总结
好的编程习惯
为了增强程序的可读性,在if 结构体开头缩进两格或更多的空间。编程隐患
确保变量名的前三十一个字符是独一无二的,否则,MATLAB 将辨认不出两变量的不 同。编程隐患
如果变量名与MATLAB 中的函数或命令重名,那么这个函数或命令将不能被访问 好的编程习惯
给你的变量起一个描述性的且易于记忆的变量名。例如,货币汇率可以exchange_rate 为变量名。这种方法将使得你的程序更加明确且易于理解。好的编程习惯
在每次用到一个变量时,我们要确保变量名的大小写的精确匹配。在变量名中只使用
小写字母是一个好的编程习惯。好的编程习惯
在MATLAB 赋值语句后加上一个分号来禁止变量值在命令窗口(The Command Windows)的重复。这将大大提高编译的速度。好的编程习惯 如果你在调试程序时需要检测一个语句的结果,可能把句后的分号去掉,这样结果将
会出现在命令窗口(The Command Windows)。编程隐患
不要重定义有意义的预定义变量。否则将后患无穷,制造成出小而难以发现的错误。编程隐患
fprintf 函数只能复数的实部,所以在有复数参加或产生的计算中,可能产生错误的结 果。好的编程习惯
如果数据需要在MATLAB 和其他程序之间交换使用,那么以ASCII 格式存储数据。
如果只在MATLAB 中使用那么,应以mat 文件的形式存储数据。好的编程习惯
以“dat”的扩展名保存ASCII 数据文件,以区别于以“mat”为扩展名的mat 文件。编程隐患
在你的MATLAB 代码中,仔细区分数组运算和矩阵运算。数组乘法和矩阵乘法极易混 淆。好的编程习惯 当你读取和写入数据时,使用适当的单位
自上而下的编程方法是我们正规编程设计的基础。1.清晰地陈述你所要解决的问题
编写的程序大多数情况下要满足一些感觉上的需要,但这种需要不一定能够被人清晰地
表达出来。例如,用户需要一个解线性方程组的表达式。像这样的要求就不够清楚,程序员
就很难编出一个使他满意的程序。他必须弄清楚要有多少问题需要解决?在这些方程式中有
没有对称的形式使我们的开发变得简单?程序设计者必须和使用者讨论所需的程序,他们必
须要对完成的任务有一个精确细致的描述。对问题清晰的描述可以防止误解,并且能够帮助
程序员合理的组织他的思想。上面的例子对问题合适的陈述应为: 设计一个用于解决联立线性方程组的程序,这些方程中未知数的系数为实数,最多有 20 个未知数。
2.定义程序所需的输入量和程序所产生的输出量
指定输入量和输出量,只有这样新的程序才能适应全过程计划。在这个例子中方程式的
系数可能有其预先存在的顺序,我们的新程序必须能按照顺序读取它们。相似地,也需要产 生出这个程序所要求的结果,即输出量,我们还要以一定的格式打印出来。
3.设计你的程序得以实现的算法
算法是指为某个问题找到答案一步接一步的程序。在这个阶段自上而下的编程方法发挥
了作用。编程设计者开始对这个问题进行逻辑划分,把它逐步分解为一个又一个子工作。这
个过程叫做分解(decomposition)。如果一些子工作还是比较大,设计者还可以把他它分解成
更小的块。这个过程将会继续到问题被分解成许多简单且易理解的小块为止。
在问题被分解成小块之后,每一个小块要被进一步的求精,这个过程叫做逐步求精
(stepwise refinement)。在这个过程中,设计者开始于对本小块代码总括性的描述,然后开始
一步一步地定义所需的函数,越来越具体,直到他能够转化为MATLAB 语句。逐步求精的
过程中,我们要用到的伪代码将会在下节为大家介绍。
在算法开发过程中,这个方法是非常有用的。如果设计者真正理解了解决问题这个些步
骤,他将会对问题进行分解和逐步求精。4.把算法转化为代码 如果分解和逐步求精的过程已经顺利完成,那么这一步将会异常地简单。所有程序员都
会将伪代码一句一句地转化为合适地MATLAB 语句。5 检测产生的MATLAB 程序
这一步是真正的拦路虎。首先,程序的每一部分将会被单独地检测,如果有可能的话,整个程序还要被检测一遍。在我们检测程序时,我们必须证明所有合法输入数据值都能够正
常运行。用标准的输入值检测程序,看它是否产生了值。如果在一个程序中执行的算法包含
了不同的分支,你必须检测每一个分支,以保证产生正确的答案。大程序在交付大众使用之
前,必须经过一系列地检测(图3.2)。检测的第一步有时被称为单元检测(unit testing)。在单
元检测过程中,程序的子程序将会被独立地检测以证明它的正确性。当单元检测结束之后,这个程序将进行一系列的组合,把独立的子程序联合产生出最后的程序。程序第一步的联合
通常只包括很少的子程序。通过组合这些子程序,经常用检查子程序或函数之间的联系。在
一系列地组合过程中,越来越多的子程序被加了进来,直到整个程序的完成。在每一次组合 的过程中,每一个错误都会被发现并在进行下一次组合之前纠正过来。好的编程习惯
在我们检测两数值是否相等时一定要小心,因为round off 错误可能会使两个本来应该
相等的值不相等了。这时你可以在round off 错误的范围内它是不是近似相等。好的编程习惯
if 结构体经常缩进2 到3 个空格,以增强程序的可读性。好的编程习惯
对于有许多选项的选择结构来说,最好在一个if 结构中使用多个elseif 语句,尽量不用 if 的嵌套结构。好的编程习惯
对于for 循环体总是要缩进两个或更多空格,以增强程序的可读性。好的编程习惯
在循环执行开始之前,总是要预先分配一个数组,这样能大大增加循环运行的速度。好的编程习惯
那种既可以用向量可以解决的问题,也可以用循环解决的问题,最好用向量解决,这
是因为向量执行的速度快。好的编程习惯
把大的程序分解成函数,有很多的好处,例如,程序部分的独立检测,代码的可复用
性,避免意想不到的错误。好的编程习惯
最是把全局变量声明在函数的开头,这样可以区别于本地变量。好的编程习惯
在函数中的初始注释行之后和第一个可执行性语句之前声明全局变量。好的编程习惯
在两次函数调用之间有持久内存保存本地数据。好的编程习惯
用子函数或私有函数来隐藏特殊目的的函数,这些隐藏的函数只能被其他函数调用。
隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。编程隐患
当我们应用关系运算符对复数运算时,一定要小心。关系运算符>,<,<=或>=只比较
复数的实部,而不是它们的模。如果你要用这些关系运算符对一复数进行运算,比较两复 数的模将更加常见。好的编程习惯
用char 函数创建二维字符数组,我们就不用担心每一行的长度不相同了。好的编程习惯
当你访问一单元阵列时,不要把()与{}混淆。它们完全不同的运算。编程隐患
不要创建一个与已存在的数字数组重名的元阵列。如果得名了,MATLAB 会认为你把
单元阵列的内容赋值给一个普通的数组,这将会产生一个错误信息。在创建单元阵列之前,确保同名的数字数字数组已经被删除。编程隐患
应用函数text 从ascii 文件中按行格式读取数据,这个ascii 文件可能是其他语言生成的,或是由其他的应用程序生成的,例如表格。好的编程习惯
除非我们必须与非MATLAB 程序进行数据交换,存储和加载文件时,都应用mat 文
件格式。这种格式是高效的且移植性强,它保存了所有MATLAB 数据类型的细节。好的编程习惯
对于那些必须进行人工检查的数据,或对于那些必须在不同的计算机上运行的数据,用格式化文件创建数据。对于那些不需要进行人工检查的数据且在相同类型的计算机创建
并运行的数据,用无格式文件创建数据,当I/O 速度缓慢时,用格式化文件创建数组。
第五篇:matlab学习心得
学习MATLAB 感想 学习了 MATLAB 这门课程,我了解该软件的基本功能,也知道 了该软件在我们生活中的重要地位。随着社会的不断发展,科技 的不断进步,计算机的普及,它也被应用在越来越多的方面。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工 程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完成相同的事情简捷得多,MATLAB 的最突出的 特点就是简洁。MATLAB相对于其他的一些编程软件有许多的优点:
一、语言简洁紧凑,使用方便灵活,库函数极其丰富。
二、运算符丰富。
三、MATLAB既具有结构化的控制语句(如for循环、while循环),又有面向对象编程的特性。
四、语法限制不严格,程序设计自由度大。
五、程序的可移植性很好,基本上不做修改就可以在各种型号的计 算机和操作系统上运行。
六、MATLAB的图形功能强大。用madlab创建矩阵时,方法有两种:第一、可以直接依次输入矩 阵各行各列的元素,但矩阵元素必须用[ ]括住,矩阵元素必须用逗号 或空格分隔,在[ ]内矩阵的行与行之间必须用分号分隔。第二、用 MATLAB函数创建矩阵。MATLAB可以进行矩阵的加减、乘除的元 素,求可逆矩阵、转置矩阵,求矩阵的特征值,求线性方程组等等。MATLAB的功能是非常强大的,MATLAB不仅有强大的运算功 能,它还有强大的绘图功能,我对它的了解也仅仅就是一点点,或许 说还没有入门。比如说它含有丰富的内建函数,例如数学函数中的三 角函数、复函数、多项式函数、数据分析函数的求平均值、最大最小 值、排序等,以及逻辑/选择函数如if-else等,还有用来模拟随机发 生事件的随机函数。这些我都不了解。虽学习MATLAB的时间虽然很短,但却让我了解到了它的强大和 它的功能。我想就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道 所有。老师只是个指路的明灯,最终的学习还是要靠自己。而且在摸 索过程中,我们能够发现和体会学习的快乐!