目录
一. 基本数论运算
函数名 | 调用格式 | 解释 |
floor() | n=floor(x) | 下取整 |
ceil() | n=ceil(x) | 上取整 |
round() | n=round(x) | 四舍五入 |
fix() | n=fix(x) | 离0近方向取整 |
rat() | [n,d]=rat(x) | 最简有理数 |
rem() | B=rem(A,C) | 求模的余数 |
gcd() | k=gcd(n,m) | 最大公约数 |
lcm() | k=lcm(n,m) | 最小公倍数 |
factor() | factor(n) | 质因数分解 |
isprime() | v1=isprime(v) | 判断是否为质数 |
例题1
对下面的数据进行取整运算:
-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187
解:
MATLAB代码如下:
clc;clear;
A=[-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187];
A1=floor(A) %向-inf方向取整
A2=ceil(A) %向+inf方向取整
A3=round(A) %取最近的整数
A4=fix(A) %向0的方向取整
运行结果:
A1 = -1 0 1 2 1 -2
A2 = 0 1 2 3 2 -1
A3 = 0 1 1 2 1 -2
A4 =0 0 1 2 1 -1
例题2
对 Hilbert矩阵,试用rat()函数变换。
解:
MATLAB代码如下:
clc;clear;
A=hilb(3);
[n,d]=rat(A) %将元素变换成最小有理数,n,d分别为分子,分母矩阵
运行结果:
n =
1 1 1
1 1 1
1 1 1
d =
1 2 3
2 3 4
3 4 5
例题3
对1856120,1483720,求最大公约数,最小公倍数,质因子分解。
解:
MATLAB代码如下:
clc;clear;
format long
m=1856120; n=1483720;
[gcd(m,n),lcm(m,n)] %求m,n的最大公约数,最小公倍数
factor(lcm(m,n)) %对lcm(m,n)进行质因子分解
运行结果:
ans =
1.0e+09 *
0.000001960000000 1.405082840000000
ans =2 2 2 5 7 7 757 947
例题4
求1-100之间的质数
解:
MATLAB代码如下:
clc;clear;
A=1:1:100;
A1=isprime(A); %若向量A中某个整数为质数,则相应位置为1,其他为0
B=A(A1)
运行结果:
B =
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
二. 循环结构
2.1 for 结构
for i=V
循环结构体
end
2.2 while结构
while (条件式)
循环结构体
end
例题5
用循环求解如下:
解:
MATLAB代码如下:
clc;clear;
%方法1
s1=0;
for i=1:100
s1=s1+i;
end
s1
%方法2
s2=0;
i=1;
while(i<=100)
s2=s2+i;
i=i+1;
end
s2
%方法3
s3=sum(1:100)
运行结果:
s1 =5050
s2 = 5050
s3 = 5050
例题6
用循环求解,求最小的m
解:
clc;clear;
s=0;
m=0;
while(s<=10000),
m=m+1;
s=s+m;
end
[s,m] %求出的m即为要求
例题7
求如下:
解:
clc;clear;
tic,s1=0;
for i=1:100000,
s1=s1+1/2^i+1/3^i;
end
toc
s1
tic,i=1:100000;
s2=sum(1./2.^i+1./3.^i);
toc
s2
%可比较两种方法的运行时间
运行结果:
历时 0.014148 秒。
s1 =1.500000000000000
历时 0.020827 秒。
s2 =1.500000000000000
三. 转移结构
if (条件1) %若条件1满足,则执行1
语句组1 %也可以嵌套下级的if结构
elseif(条件2) %若满足条件2,则执行段落2
语句组2
··· %可以设置多种转移条件
else %上面的条件均不满足,执行下面段落
语句组n+1
end
形成流程图:
例题8
用转移结构求解最大的m。
解:
MATLAB代码:
clc;clear;
s=0;
for i=1:10000
s=s+i;
if s>10000,
break;
end
end
i
运行结果:
i =141
四. 开关结构与试探结构
4.1 开关结构
switch 开关表达式
case 表达式1
语句段1
case {表达式2,表达式3,···,表达式m}
语句段2
···
otherwise
语句段n
end
形成流程图:
此开关结构与C语言的区别:
- 当开关表达式的值等于某表达式时,执行该语句后结束该结构,不用break;
- otherwise语句不是C语言中的default;
- 当需要在开关表达式满足若干个表达式之一时执行某一程序段,则用单元形式,即用大括号把这些表达式括起来,用逗号分隔;
- 程序执行的结构和各个case的顺序无关;
- case语句中条件不能重复,否则列在后面的条件将不能执行
4.2 试探结构
首先试探性执行语句1,若执行过程有错,将错误信息赋给保留的lasterr变量,并终止这段语句的执行,转而执行语句2。
try, 语句1,
catch 语句段2,
end
可以将不保险但快的算法放在语句1,保险的放在语句2;也可以在语句2处,说明语句1失效的原因。
五. 函数的编写
函数是MATLAB编程的主流方法,当然还可以采用M-script文件(M-脚本文件)。M-script适合于小规模运算。函数的基本结构如下:
function [返回变量列表]=函数名(输入变量列表)
注释说明语句段,由”%“引导
输入,返回变量格式的检测
函数体语句
nargin,nargout分别表示输入和返回变量的实际个数,此为MATLAB的保留变量,只要进入该函数,MATLAB就会自动生成这两个变量。
varargin,varargout分别表示输入和输出变量列表,属于可变输入输出个数。
例题9
对于阶的Hilbert矩阵,元素满足:
尝试自己编写生成该矩阵的函数。
解:
若只给出一个输入参数,则会自动生成一个方阵。在编写函数时,需要给出合适的帮助信息,同时检测输入和返回变量的个数。
函数代码:
function A=myhilb(n,m)
if nargout>1,
error('Too many output arguments.!!');
end
if nargin==1,m=n;
elseif nargin==0|nargin>2
error('Wrong number of input arguments.');
end
A1=zeros(m,n);
for i=1:n
for j=1:m
A1(i,j)=1/(i+j-1);
end
end
if nargout==1,A=A1;
else if nargout==0,disp(A1);
end
end
主运行代码:
clc;clear;
A1=myhilb(3,4)
A2=myhilb(4)
A=myhilb(3,4,5)
运行结果:
A1 =
1.000000000000000 0.500000000000000 0.333333333333333 0.250000000000000
0.500000000000000 0.333333333333333 0.250000000000000 0.200000000000000
0.333333333333333 0.250000000000000 0.200000000000000 0.166666666666667
0 0 0 0
A2 =
1.000000000000000 0.500000000000000 0.333333333333333 0.250000000000000
0.500000000000000 0.333333333333333 0.250000000000000 0.200000000000000
0.333333333333333 0.250000000000000 0.200000000000000 0.166666666666667
0.250000000000000 0.200000000000000 0.166666666666667 0.142857142857143
错误使用 myhilb
输入参数太多。