数学实验

田颢

目录

  • 1 第1章 课程概论
    • 1.1 数学实验课程概论
    • 1.2 为什么要学习数学实验课程
    • 1.3 如何学习数学实验课程
    • 1.4 数学实验课程与其他课程的关系
    • 1.5 课程教材简介
    • 1.6 参考书目
  • 2 第二章 MATLAB软件概览
    • 2.1 第一课: MATLAB简介
    • 2.2 第二课:MATLAB的安装与启动
    • 2.3 第三课 常用命令与技巧
    • 2.4 第四课 程序设计基础
  • 3 第三章 微积分实验
    • 3.1 第一课 函数的图像
    • 3.2 第二课 极限的计算
    • 3.3 第三课 导数
    • 3.4 第四课 积分
    • 3.5 第五课 级数
    • 3.6 第六课 微分方程
  • 4 第四章 线性代数实验
    • 4.1 第一课 多项式的计算
    • 4.2 第二课 矩阵计算
    • 4.3 第三课 线性方程
  • 5 第五章 概率统计实验
    • 5.1 第一课 统计数据
    • 5.2 第二课 参数估计
    • 5.3 第三课 随机模拟
  • 6 第六章 综合实验
    • 6.1 第一课 二分法
    • 6.2 第二课 斐波那契序列
    • 6.3 第三课 数独游戏问题
第四课 程序设计基础

程序设计基础

M文件简介

对于常用或者一些代码规模较大的的程序,如果每次都直接在命令窗口从头输入就显得不方便,容易出现错误且不便修改。为了解决这个问题,可以先将这些程序或者矩阵写入一个M文件,然后再MATLAB的命令窗口或程序中直接调用自定义的命令或函数,从而使得编程的效率大大提高.

M文件创建

例:编写一个输入边长,计算正方体的表面积和体积的M文件。

启动有关编辑程序或Matlab文本编辑器,文本前两行是文件头,一般说明文件的类型(M-file),文件名(square),和文件的功能(输入边长,计算正方体表面积和体积)。把输入的内容保存到工作空间,将文件名设为square.m

%   M-file, square.m

%   输入边长,求正方体表面积和体积

%   从键盘输入Type radius的值,并将它赋值给d.

d = input('Type side:');

area = 6 * d^2;

volume = d ^ 3;

fprintf('The side is %12.5f\n',d)

fprintf('The area of a square is %12.5f\n',area)

fprintf('The volume of a square is %12.5f\n',volume)

M文件调用

在完成上述两个M文件的创建之后该如何调用?

例:在MATLAB命令窗口输入square,即运行该M文件,就会运行提示输入边长完成表面积和体积的运算


MATLAB程序设计基础

  顺序结

顺序结构是指按照程序中语句的排列顺序依次执行,直到程序的最后一个语句.

1、数据的输

      从键盘输入数据,则可以使用input函数来进行

      调用格式为: A = input(提示信息,选项)

      其中提示信息为一个字符串,用于提示用户输入数据

       例如:从键盘输入A矩阵,可以采用下面的命令来完

        A = input('输入A矩阵');

       如果在input函数调用时采用s’选项,则允许用户输入一个字符串

       例:xm = input('What’’s your name?','s')

2、数据的输

     命令窗口输出函数主要有disp函数,其调用格式为

•       disp(输出项

     其中输出项既可以为字符串,也可以为矩阵。例如

•       A = 'Hello, Tom';

      disp(A)      输出为:Hello, Tom

•      又如:A = [1,2,3;4,5,6;7,8,9];

                  disp(A)

•       输出为

•                      1  2  3

                     4  5  6

                     7  8  9        

 %disp函数输出格式更紧

 

4.2  求一元二次方程                               的根

由于Matlab能进行复数运算,所以不需要判断方程的判别式

可直接根据求根公式求根

程序如下

a = input('a=?');

b = input('b=?');

c = input('c=?');

pause

d = b*b-4*a*c;

x =[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

程序输出为

a=?4

b=?78

c=?54

x1=-0.7188,x2=-18.7812

 选择结

选择结构是根据给定的条件成立或不成立,分别执行不同的语句

Matlab用于实现选择结构的语句有if语句,switch语句和try语句

1. if

Matlab中,if语句有3种格式

(1)单分支if

语句格式

if 

    语句

end

(2)双分支if

语句格式

if 

    语句组 1

else

    语句组  2

end

当条件成立时,执行语句组1,否则执行语句组2,然后再执行if语句的后续语句

4.3 计算分段函数:

程序如下

x = input('请输入x的值:');

if x == 10

    y =cos(x+1)+sqrt(x*x+1);

else

    y =x*sqrt(x+sqrt(x));

end

y

也可以用单分支if语句来实现

x = input('请输入x的值: ');

y = cos(x+1)+sqrt(x*x+1);

if x~=10

    y =x*sqrt(x+sqrt(x));

end

y

(3)多分支if

语句格式

if 条件1

    语句组 1

elseif  条件2

    语句组  2

elseif  条件m

    语句组  m

else

    语句组n

end

  输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出

  程序如下

  c = input('请输入一个字符','s');

  if c >='A'& c<='Z'

     disp(setstr(abs(c) + abs('a')-abs('A')));

  elseif c>='a'& c<='z'

     disp(setstr(abs(c)- abs('a') + abs('A')));

  elseif c>='0'& c<='9'

     disp(abs(c)-abs('0'));

  else

     disp(c);

  end

2switch

switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式

switch 表达

case 表达式1

        语句组1

case 表达式2

        语句组2

case 表达式m

        语句组m

otherwise

         语句组 n

end                                          

switch子句后面的表达式应为一个标量或一个字符串;case子句后面的表达式不仅可以为一个标量或一个字符串,还可以为一个元胞矩阵

某商场对顾客所购买的商品实行打折销售,标准如下

price<200                  没有折

200<=price<500       3%

500<=price<1000     5%

1000<=price<2500   8%

2500<=price<5000   10%

5000<=price             14%

输入所售商品的价格,求其实际销售价格

price = input('请输入商品价格');

switch fix(price/100)

   case{0,1}                       %价格小于200

       rate = 0;

   case{2,3,4}

       rate =3/100;             %价格大于等于200但小于500

    casenum2cell(5:9)

       rate =5/100;              %价格大于等于500但小于1000

    case num2cell(10:24)

       rate =8/100;              %价格大于等于1000但小于2500

    case num2cell(25:49)

       rate = 10/100;            %价格大于等于2500但小于5000

     otherwise

        rate = 14/100;           %价格大于等于5000

end

price =price*(1-rate)       %输出商品实际销售价格                    num2cell函数是将数值矩阵转化为单元矩阵

*  fix() 0方向取整,round()四舍五入取整,floor()向下取整,ceil()向上取整

 循环结

循环是指按照给定的条件,重复执行指定的语句,Matlab提供了两种实现循环结构的语句:for语句和while语句

1for

for语句的格式为

for 循环变量 =表达式1:表达式2:表达式3

•    循环体语

end

其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3

值为循环变量的终值。步长为1时,表达式2可以省略

已知  n=100时,求y的值

程序如下

y = 0;n = 100;

for i=1:n

    y =y+1/i/i;

end

y

输出结果为

y =

     1.6350

2while

while语句的一般格式为

while

      循环体语

end

其执行过程为

若条件成立,则执行循环体语句,执行后再判断条件是否成立

如果不成立则跳出循环

从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和

sum = 0;

n = 0;

x = input('Enter anumber(end in 0):');

while(x~=0)

    sum =sum+x;

    n = n+1;

    x =input('Enter anumber(end in 0):');

end

if(n>0)

    sum

    mean =sum/n

end

3break语句和continur

它们一般与if语句配合使用

break语句用于终止循环的执行

当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句

continue语句控制跳过循环体中的某些语句

当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环

 4.9 [100,200]之间第一个能被21整除的整数

n程序如下

for n = 100:200

    ifrem(n,21)~=0;

      continue

    end

    break

end

n

程序输出结果为

n =

     105

* 取模mod与取余rem

    

 函数文

•    函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。Matlab提供的标准函数大部分是由函数文件定义的

4.3.1 函数文件的基本结

        函数文件由function语句引导,其基本结构为

•        function  输出形参表 = 函数名(输入形参表

          注释说明部

          函数体语

       其中,以function开头的一行为引导行,表示该M文件是一个函数文件。当输出形参多于一个时,应该用方括号括起来

1. 关于函数文件

    函数文件名通常由函数名再加上扩展名.m组成

    当函数文件名与函数名不同时,Matlab将忽略函数名而确认文件名,因此调用时使用函数文件名

2. 关于注释说明部

    注释说明包括3部分

    紧随引导行之后以%开头的第一注释行

       这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor关键词查询和help在线帮助时使用

    第一注释行及之后连续的注释行

       通常包括函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本

      与在线帮助文本相隔一空行的注释行

         包括函数文件编写和修改的信息,如作者和版本等

3、关于return

     如果在函数文件中插入了return语句,则执行到该语句就结束函

     的执行,流程转至调用该函数的位置。通常也不使用return语句

     5.10 编写函数文件,求半径为r的圆的面积和周长

     函数文件如下

     function [s,p] = fcircle(r)

     % FCIRCLE calculate thearea and perimeter of a circle of radii r

     %r       圆半

     %s       圆面

     %p      圆周

 

     %2006230

     s = pi*r*r;

     p= 2*pi*r;

 

将以上函数文件以文件名fcircle.m保存,然后在命令窗口调用

[s,p] = fcircle(10)

输出结果是

 s =

     314.1593

 p =

     62.8319

采用help命令或lookfor命令可以显示出注释说明部分的内容

 help fcircle

屏幕显

 FCIRCLE calculate the areaand perimeter of a circle of radii r

 r       圆半

•  s       圆面

•  p       圆周

 函数调用的一般格式是

 [输出实参表] = 函数名(输入实参表

 注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同

 4.11

 利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换

    

 函数文件:tran.m:

      function [rho,theta] = tran(x,y)

      rho = sqrt(x*x+y*y);

      theta = atan(y/x);

调用tran.m的命令文件main1.m:

 x = input(‘pleaseinput x=:’);

 y = input(‘please inputy=:’);

 [rho,the] =tran(x,y);

 rho

 the

函数的嵌套调用   

 Matlab中,函数可以嵌套调用,即一个函数可以调用别的函数。一个函数调用自身称为函数的递归调用

         4.12 利用函数的递归调用,求n!。

         n!本身就是以递归的形式定义的

 显然,求n!需要求(n-1)!,这时可采用递归调用

  函数如下

  function f = factor(n)

 if n<=1

     f= 1;

 else

     f= factor(n-1)*n;  %递归调用求(n-1)!

 end

 

在命令文件中调用该函数文件,求 s = 1!+2!+3!+4!+5!

•   s = 0;

  for i = 1:5

       s = s + factor(i);

  end

  s

•  在命令窗口运行命令文件,结果如下

•   s =

       153

                                                                      全局变量与局部变

Matlab中,函数文件中的变量是局部变量

如若干函数中,都把某一变量定义为全局变量,那么这些函数将共用这个变量

全局变量的作用域是整个Matlab的工作空间,所有函数都可以对

进行存取和修改

全局变量用global命令定义,格式为

 global 变量

 4.13 全局变量应用示例

 先建立函数文件wadd.m,该函数将输入的参数加权相加

 function f =wadd(x,y)                                                                        BETA = 2;

 global ALPHABETA                                                                           s = wadd(1,2)

 f = ALPHA*x +BETA*y;                                                                      输出为

 在命令窗口中输入:                                                                              s = 

 global ALPHA BETA                                                                                      5

 ALPHA = 1;