第一篇: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 编程题总结
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 页
第三篇:编程习惯和方法
1.1 编程思路
[打桩] : 从设计的角度出发解决问题,而不是想到一个算法,解决一个功能或部件,一般需,确
定是否发现到类,发现到类,确定需要那些属性,确定那些方法;
[用例]: 作单独得测试用例验证自己的算法,实现类的局部逻辑;
[集成]: 通过测试用例的验证,集成实现类,或模块;
1.2 如下编程习惯 – 纠正
通过频繁的使用编译器来找错误,或验证程序 不是合格程序员;
滥用对象,方法的实现 临时变量泛滥,for, 等语句块中临时变量泛滥
方法实现没有划分逻辑段的概念,一气呵成。
任务的完成过程中,产生一堆的过程代码,提交正式代码100行,耗用了5000行代码试验
[人海战术,投入产出比太大]
一个功能函数实现,到处出现,没有统一的出处概念, 维护成本
没有节约内存使用管理意识,泄露太多
一碰到问题就问,没有主动思考意识,主观能动性较差
一个函数几百上千行,成了超级函数,没有模块意识;
函数的形参庞大,没有结构意识
c/c++ 体系理解不清,程序中混乱使用;内存分配,动态数组
发现难点,复杂得地方 绕开,或简单处理一下;
编译问题的解决主观能动性不够,一碰到问题头就大,就问别人;
一个错误多次出现
喜欢做难的挑战的任务,消极对待简单的任务,或不屑做简单的无难度的任务
工作个性化,从网上参考来的代码没有消化整理,就使用,界面风格偏离太远
代码写完回头改规范
一个函数的逻辑实现不彻底,总总修修补补
技术泛滥使用,追求时髦的技术
缺少耐心看msdn,objectarx 英文资料
界面没有美观好用的意识,只为实现功能,设计不够人性化
程序缺少资源节约习惯,类的资源消耗庞大. 程序错误提示框 提示信息模糊不清,太吝啬表达,或提示太程序员语气化;
追求使用一些晦涩的,高难度技巧的代码
没有使用枚举的习惯,一大堆 int 值
非修改维护的代码(新任务),提交任务时残留大量自己注释掉的过程代码;
获取容器中的元素,没有验证容器的size,直接硬获取
类,方法 的命名虽然遵循规范,但命名晦涩,不准确。
没有构造函数初始化成员属性的习惯,包括临时变量也没有初始化习惯;
结构体中出现 对象,诸如 Cstring 等非原生数据类型
类的属性习惯 public,1.3 bug维护认识
简单的开发任务中,也能有大道理,合格的程序员简单的功能同样做的伟大。[精耕细做] Bug 维护是程序员成长的捷径
第四篇: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总结
班级: 学号: 姓名:
Matlab学习综述
MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充。
MATLAB产品由若干个模块组成,不同的模块完成不同的功能,其中主要的核心模块有MATLAB、MATLAB Toolboxex、MATLAB Compiler Simulink、Simulink Blocksets、Real-time Workshop(RTW)Stateflow。这些产品大体上可以分为以MATLAB为基础的产品和以Simulink为基础的产品两大分支。其中,MATLAB是MATLAB产品家族的基础,任何其他MATLAB产品产品都以这个模块为基础。MATLAB的桌面应用程序开发工具是以MATLAB Compiler为核心的一组编译工具。Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模,分析和仿真,它的建模范围广泛,可以针对任何能够用数字来描述的系统进行建模。
一种完整的计算机应用语言应该提供对数据的描述和对数据的操作。在M语言中,最常用的数据类型表现手段和形式就是变量和常量,由于MATLAB软件自身的特点,它是一种以数值计算为基础的软件,因此M语言的基本处理单位是数值矩阵或者数值向量,在M语言中统一将矩阵或者向量称之为数组,因此掌握一些基本的矩阵、向量和数组操作的基本知识就成为了掌握MATLAB软件的基础。变量和常量是编程语言中类型的表现手段和形式,掌握变量和常量的概念也是掌握M语言编程的基础。所谓变量,就是指在程序运行中需要改变数值的量,每一个变量都具有一个名字,变量将在内存中占据一定的空间,以在程序运行的过程中保存其数值,对变量的命名有相应的要求:变量必须以字母开头,后面可以是字母、数字或者下划线之间的组合。所谓常量就是在程序运行的过程中不需要改变数值的量。
MATLAB专门以矩阵作为基本的运算单位,首先要掌握向量、矩阵、索引和多维数组的概念,以及在MATLAB环境下创建向量、矩阵和多维数组的方法,以及操作矩阵和多维数值的函数的使用方法。
目前的MATLAB版本中不仅有多达十几种的基本数据类型。在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持用户自定义的数据类型。获取MATLAB的数据类型可以在MATLAB命令行窗体中键入help datatypes。MATLAB的数据类型包括基本的数值类型,逻辑类型数据、元胞数值、结构和字符串等,需要指出一点,MATLAB的基本数据是双精度数据类型和字符类型。MATLAB提供了完整的编写应用程序的功能,这种能力被称为M语言的高级语言来实现。这种语言是一种解释性语言,利用该语言编写的代码仅能被MATLAB接受,被MATLAB解释执行。其实,一个M语言文件就是由若干MATLAB的命令组合在一起构成的,和C语言类似。M语言文件都是标准的纯文本格式的文件,其文件的扩展名为.m。MATLAB的函数主要有两类,一类被称为内建函数,这类函数是由MATLAB的内核提供的,能够完成基本的运算,例如三角函数、矩阵运算函数等。另外一类函数就是利用高级语言开发的函数文件,这里的函数文件包括用C/FORTRAN语言开发的MEX函数文件,也包括了M函数文件。
M语言文件可以分为两类,其中一类是脚本文件,另一类是函数文件,脚本文件是最简单的一种M语言文件。所谓脚本文件就是由一系列的M语言文件指令和命令组成的纯文本格式的M文件,执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。脚本文件没有输入参数,也没有输出参数,脚本文件处理的数据或者变量必须在MATLAB的公共工作空间中,脚本文件主要是由注视行和代码行组成。
函数文件是M文件最重要的组成部分,M语言函数文件能够接受用户的输入参数,并进行计算,然后将计算结果作为函数的返回值返回给调用者,M函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,而且不同的函数还分别具有自己的工作空间,函数文件的输/输出参数不同,这些输入/输出参数在定义的时候不需要指出变量的类型,因为MATLAB默认这些参数都使用双精度类型,这样可以简化程序的编写。M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,同一个M函数文件中可以包含多个函数。如果在同一个M函数文件中包含了多个函数,那么将出现在文件中的第一个M函数称为主函数,其余的函数称为子函数。
经过这么一段时间的学习,对MATLAB有了初步的认识。但是关于它还有很多知识我们所不知道,还有待进一步的学习。以上内容是我对这学期所学课程的总结,可能有些地方总结的不够到位,因为有些地方学习的不够深入,所以,以后要更加努力,在MATLAB的学习上多花一些时间,为以后的学习和工作打下基础。