基于MATLAB的数论运算与编写函数(附完整代码)

目录

一. 基本数论运算

例题1

例题2

例题3

例题4

二. 循环结构

2.1 for 结构

2.2 while结构

例题5

例题6

例题7

三. 转移结构

例题8

四. 开关结构与试探结构

4.1 开关结构

4.2 试探结构

五. 函数的编写

例题9


一. 基本数论运算

函数名调用格式解释
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

3\times 3 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

用循环求解如下:

\sum_{i=1}^{100} i

解:

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

\sum_{i=1}^m i>10000

解:

clc;clear;

s=0;
m=0;
while(s<=10000),
    m=m+1;
    s=s+m;
end
[s,m] %求出的m即为要求

例题7

求如下:

s=\sum_{i=1}^{100000}(\frac{1}{2^i}+\frac{1}{3^i})

解:

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。

\sum_{i=1}^mi>10000

解:

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

对于n\times m阶的Hilbert矩阵,元素满足:

h_{i,j}=\frac{1}{i+j-1}

尝试自己编写生成该矩阵的函数。

解:

若只给出一个输入参数,则会自动生成一个方阵。在编写函数时,需要给出合适的帮助信息,同时检测输入和返回变量的个数。

函数代码:

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
输入参数太多。
 

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值