matlab switch语句例子,switch函数例子
大家好,如果您还对matlab switch语句例子不太了解,没有关系,今天就由本站为大家分享matlab switch语句例子的知识,包括switch函数例子的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
...判断是不是闰年,要用switch语句实现,拜托拜托
闰年的概念:
普通闰年:能被4整除但不能被100整除的年份。(如2004年就是闰年,1999年不是闰年);
世纪闰年:能被400整除的的年份。(如2000年是闰年,1900年不是闰年);
根据闰年的概念,用matlab的switch语句实现,即任意输入一个年份,判断是不是闰年。
实现方法:
Ly= input('输入任意一个年份,如2018:');
switch true
case mod(Ly,400)==0
disp('世纪闰年')
case mod(Ly,4)==0& mod(Ly,400)~=0
disp('普通闰年')
case mod(Ly,4)>0
disp('普通年')
otherwise
disp('输入有误')
end
运行效果
matlab自定义函数,可以输出多个数组么
Switch-case分支
switch语句和if语句类似,相当于多项选择。switch语句根据变量或表达式的取值不同分别执行不同的命令。其基本的调用格式为:
switch表达式(标量或字符串)%表达式为一标量或字符串
case值一
语句体一%当表达式的值=值一时,执行语句体一,然后跳出该结构
case值二
语句体二%当表达式的值=值二时,执行语句体二,然后跳出该结构
otherwise
语句体%表达式的值不等于前面所有检测值时,则执行此组语句
end
用户用学生的成绩管理作为演示switch结构及结构体数组的应用,划分区域:满分(100)、优秀(90—99)、良好(80—89)、及格(60—79)、不及格(<60):
>> for i=l:10
a(i)=89+i;
b(i)=79+i;
c(i)=69+i;
d(i)=59+i;
end
>> c=[d,c];
>> Names={’zhang’,’wang’,’li’,’zhao’,’liu’);%元胞数组
>> Score=(85,72,93,54,100);
>> Rank=cell(1,5);
创建一个含有5个元素的结构体数组S,它有三个域:Name、Score、Rank:
>> S=struct(’Name’,Name,’Score’,Score,’Rank’,Rank);
根据学生的分数,求出相应的等级:
>> for i=1:5
switch S(i).Score
case 100
S(i).Rank=’满分’;
case a
S(i).Rank=’优秀’;
case b
S(i).Rank=’良好’;
case c
S(i).Rank=’及格’;
otherwise
S(i).Rank=’不及格’;
end
end
将学生的姓名,得分,登记等信息打印出来:
>> disp([’学生姓名’,’得分’,’等级’]);
>> for i=1:5
disp([S(i).Name,blanks(6),num2str(S(i).Score),blanks(6),S(i).Rank]);
end
学生姓名得分等级
zhang 85良好
wang 72及格
li 93优秀
zhao 54不及格
liu 100满分
Matlab编程和其他语言的区别
一、字符和字符串
在MATLAB中不管是字符,还是字符串都是用单引号。而在C、C++、C#、Java等语言中,字符是用单引号的,字符串则必须用双引号。因此在MATLAB中如果需要在字符串中用到单引号的话,就要用两个单引号来代替。
如:
>> a='this''is an apple'
a=
this'is an apple
同理,如果字符串中需要双引号的话,可以用四个单引号来代替。如下:
>> b='I''''am Tim'
b=
I''am Tim
在MATLAB中的字符串连接,我们可以使用一对中括号。当然,这种连接方式也适用于向量、矩阵等的连接。如下:
>> c=[a b]
c=
this'is an appleI''am Tim
>> a1=[1 2];b1=[3 4];
>> c1=[a1 b1]
c1=
1 2 3 4
>> c2=[a1;b1]
c2=
1 2
3 4
但是,对于字符串的连接不能使用加号(+)来进行。这点和在C++、C#、Java等语言中是不一样的。因为在MATLAB中这些字符串也是以矩阵的形式存储的,你要是用加号的话,需要两个矩阵的大小一致。比如:
>> a2='hello';b2='mustb';
>> a2+b2
ans=
213 218 223 224 209
但是,很明显,加完之后都是一系列的值了。本来,这些字符串也是以数值的形式存储的。而我们要取的字符串中某一个字符的时候,也是很方便的,直接像引用矩阵的元素一样。如下:
>> a2(1)
ans=
h
>> a2(4)
ans=
l
>> find(a2>'i')
ans=
3 4 5
可以看到,a2里面在字母i后面的字符有第3、4、5个字符,也就是llo了。
在MATLAB中要将一个数字转换为字符可以用num2str,将字符转换为数字可以用str2num。如下:
>> stra1=num2str(a1)
stra1=
1 2
>> class(stra1)
ans=
char
>> strb1='[3 4]';
>> str2num(strb1)
ans=
3 4
对于strb1,我们可以使用eval函数,该函数可以将字符串作为一个MATLAB命令去执行。如下:
>> p=eval(strb1)
p=
3 4
相当于p=[3 4]。
当然了,C语言里面的sprintf、fprintf函数我们都是可以在MATLAB中使用的。比如:
>> sprintf('Tim is%d years old.',24)
ans=
Tim is 24 years old.
至于fprintf函数,则需要用fopen去打开一个文件,然后写入数据进去。如下:
>> fd=fopen('a.txt','w+');
>> fprintf(fd,'I am Tim.\n');
>> fprintf(fd,'My age is%d\n',24);
>> fclose(fd);
然后,用MATLAB Editor打开MATLAB当前目录下的a.txt就可以看到:
但是,当你用记事本打开的时候会看到:
这是因为在Windows上要想换行需要\r\n,而不能单是\n。
二、if语句、for语句、switch语句、while语句、try-catch语句都以end结尾
在MATLAB中,没有goto和do…loop和do…while语句。而且语句的结尾都是以end结尾的。
>> t=4;
>> if(t<5),disp('t is smaller than 5.'),end
t is smaller than 5.
当然,if语句也可以有else语句。
>> if(t>5),disp('t is bigger than 5.'),else,disp('t is smaller than 5.'),end
t is smaller than 5.
还可以用elseif。
>> if(t>5),disp('t is bigger than 5.'),elseif(t==5),disp('t is equal 5.'),else,disp('t is smaller than 5.'),end
t is smaller than 5.
在MATLAB中,由于矩阵的索引都是从1开始的,这点和C、C++、C#、JAVA等语言是不一样的。所以,在循环的时候建议从1开始循环,而且循环的时候不推荐用变量i和j。因为这两个变量在MATLAB中表示的是复数的虚部变量。当然,如果你的程序里面没有复数,就不用怕。如果有复数,就要小心了。
之所以从1开始,是因为大多数时候我们使用循环是为了依次能访问到矩阵的每一个元素,所以,如果矩阵的索引出现了0,那么就会报出错误。所以,从1开始循环,是一种很好的习惯,而不是要求你必须这样做。
而且,在for循环中,你的循环变量不仅可以是一个数,也可以是一个向量。看下面的程序:
>> aa=[1 2;3 4; 5 6;7 8];
>> for i=aa,disp(i),end
1
3
5
7
2
4
6
8
>> aa
aa=
1 2
3 4
5 6
7 8
也就是说,i第一次的值是aa的第一列,i第二次的值是aa的第二列。这样的话,这个循环变量i就不仅仅是一个数了,二是一列数。
在MATLAB中,switch语句中是不用break的,而且默认的选项不是default,而是otherwise。如下:
a=5;
switch(a),
case 1,
disp('a is 1.');
case 2,
disp('a is 2.');
case 5,
disp('a is 5.');
otherwise,
disp('sorry, i do not know.');
end
还需要注意的是case后面没有分号,而C、C++、C#、Java等语言中是必须是分号的。在MATLAB中可是没有分号,我程序中的逗号,也可以是没有的。指向上面的程序,在MATLAB中的输出是:
a is 5.
至于while语句的使用和C、C++、C#、Java等语言中的while基本上是一致的。如下:
a=5;
b=0;
while a>0
b=b+a;
a=a-1;
end
b
a
Matlab命令窗口的输出是这样的:
b=
15
a=
0
try-catch语句一般是用来捕捉错误的。
try
a=input('Input a number:');
catch
error('unknown error.');
end
当运行上面的程序,在MATLAB中输入:
Input a number:#
??? Error using==> tim_try at 4
unknown error.
三、变量不用声明
在MATLAB中的变量是可以不用声明的,这点和C类语言和Java是有很大区别的。但是,为了程序更清晰和加快程序的执行速度,提供初始化和声明有时是必要的。不如,
b=[];
for i=1:10
b=[b i];
end
b
在MATLAB命令窗口的输出如下:
b=
1 2 3 4 5 6 7 8 9 10
如果你不初始化b为空的话,如下:
for i=1:10
b=[b i];
end
b
在命令窗口的输出如下:??? Undefined function or variable'b'.
上面说过了,中括号[]可以用来合并向量的,这里变量b不存在,因此不能合并。所以会出错。
四、没有++、--操作符
在MATLAB中是没有++和--操作符的,因此需要转换。如a++;可以转化为a=a+1;至于++a;你只需要将a=a+1的位置放到前面就可以了。
五、点乘、点除,但没有点加、点减
在点乘,是矩阵中的对应元素相乘。而不是矩阵的乘法。点除也是同样道理,对应元素想除。至于点加,就相当于加法。因为加减法本身就是对应元素的加减。
六、左除和右除
在C类和Java等语言中,除法就是一个操作符(/),但在MATLAB中(/)和(\)是有区别的。/代表的是右除,\代表的是左除。
>> A=[1 2;3 4];B=[5 6;7 8];
>> C1=A\B
C1=
-3-4
4 5
所以A左除B,就相当于A的逆矩阵乘B。
>> inv(A)*B
ans=
-3.0000-4.0000
4.0000 5.0000
那么可想而知,A右除B,就相当于A乘B的逆矩阵。
>> A/B
ans=
3.0000-2.0000
2.0000-1.0000
>> A*inv(B)
ans=
3.0000-2.0000
2.0000-1.0000
七、MATLAB的编程思想
当你用MATLAB来写程序的时候,尽量以向量、矩阵为单位来考虑问题。也就是在MATLAB中常常能用一个点乘来代替多个循环的操作。也就是用向量化的操作来代替循环,这样能够大大的提高MATLAB程序的运行速度。
举个简单的例子:
clear all
clc
a=round(rand(100)*100);
b=round(rand(100)*100);
tic
f1=a.*b;
toc
tic
for i=1:100,
for j=1:100,
f2(i,j)=a(i,j)*b(i,j);
end
end
toc
在命令窗口的输出如下:
Elapsed time is 0.000035 seconds.
Elapsed time is 0.001871 seconds.
如果我们给f2初始化下,看看能不能加快速度。
clear all
clc
a=round(rand(100)*100);
b=round(rand(100)*100);
tic
f1=a.*b;
toc
f2=zeros(100);
tic
for i=1:100,
for j=1:100,
f2(i,j)=a(i,j)*b(i,j);
end
end
toc
此时,命令窗口的输出如下:
Elapsed time is 0.000024 seconds.
Elapsed time is 0.000147 seconds.
可以看到后面的循环的时间明显提高了很多。那么我们为上面的点乘运算的f1也初始化的话,速度会如何?
Elapsed time is 0.000022 seconds.
Elapsed time is 0.000146 seconds.
可以看到速度提升的不是很明显。如果你将a和b的维数增长到10000的话,提示的速度就明显了很多了。
好了,文章到这里就结束啦,如果本次分享的matlab switch语句例子和switch函数例子问题对您有所帮助,还望关注下本站哦!