MATLAB M文件的调试

 

一、实验目的

(1)掌握建立和执行函数文件的方法

    (2)掌握利用for语句和while语句实现循环结构的方法

(3)掌握定义和调用MATLAB函数的方法

(4)熟悉利用向量运来代替循环操作的方法

二、实验原理与实验设备

原理计算机编程相关知识技能和MATLAB软件编译环境

设备:计算机与MATLAB软件

三、建立和执行函数文件

定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在脚本文件中调用该函数文件。

函数文件:

function [a, b, c, d]=disancishiyan3(x)

a = exp(x);

b = log(x);

c = sin(x);

d = cos(x);

end

脚本文件:

x = input('x=');

[a, b, c, d] = disancishiyan3(x);

fprintf('a = %f\nb = %f\nc = %f\nd = %f\n', a, b, c, d);

运行结果:

MATLAB M文件的调试_第1张图片

四、循环结构

  1. 根据y=1+1/3+1/5+……+1/(2n-1),求 (1)y<3时的最大值;(2)与(1)的n值对应的y值。

脚本文件:

y = 0;

n = 0;

while y < 3

    n = n + 1;

    y = y + 1 / (2 * n - 1);

end

y = y - 1 / (2 * n - 1);

n = n -1;

fprintf("1y<3时的最大值为%d\n",n)

fprintf("2)与(1)对应的n值对应的y值为%f\n",y)

运行结果:

  1. 已知f1=1, f2=0, f3=1, fn=fn-1-2fn-2+fn-3求,f1~f100中:(1)最大值、最小值、各数之和。(2)正数、零、负数的个数。

脚本文件:

for n = 1:100

    if n == 1

        f(n) = 1;

        max = f(n);

    elseif n == 2

        f(n) = 0;

    elseif n == 3

        f(n) = 1;

    else

        f(n) = f(n-1)-2*f(n-2)+f(n-3);

    end

        if f(n) > max

        max = f(n);

    end

end

maxf = max;

minf = min(f);

sumf = sum(f);

fprintf("1)最大值为%d、最小值为%d、各数之和为%d\n",maxf,minf,sumf)

zhengshu = length(find(f>0));

ling = length(find(f == 0));

fushu = length(find(f<0));

fprintf("2)正数的个数为%d、零的个数为%d、负数的个为%d\n",zhengshu,ling,fushu)

运行结果:

  1. 求解圆周率π的近似值,使用常用公式之一π4*(1-1/3+1/5-1/7+1/9……),直到最后一项的绝对值小于10-7为止。

脚本文件:

format long

pai = 0;

t = 1.0;

n = 1.0;

while 1/n > 1e-7

    pai = pai+t*1.0/n;

    t = -1 * t;

    n = n + 2;

end

pai = pai * 4;

disp(pai)

运行结果:

  1. 若两个连续自然数的乘积减1是素数,则称这两个连续自然数是亲密数对,该素数是亲密素数。例如,2*3-1=5,由于5是素数,所以2和3是亲密数对,5是亲密素数。求[2,50]区间内:(1)有多少个亲密数对。(2)与上述亲密数对对应的所有亲密素数之和

脚本文件:

qinmishudui=0;

qingmisushuzhihe=0;

for i = 2:49

    p = i*(i+1)-1;

    for k = 2:p

        if rem(p,k) ~= 0

            continue

        end

        break

    end

    k;

    if k == p

        qinmishudui = qinmishudui+1;

        qingmisushuzhihe = qingmisushuzhihe+p;

    end

end

fprintf("1)有%d个亲密数对\n",qinmishudui)

fprintf("2)所有亲密素数之和为%d\n",qingmisushuzhihe)

运行结果:

五、函数文件

  1. 一个自然数是素数,且它的数字位置经过任意兑换后仍为素数,则称之为绝对素数。例如13是绝对素数,试求所有两位绝对素数。要求:定义一判断绝对素数的函数文件。

函数文件:

function disancishiyan5_1

    for m = 10:99

       if(isprime(m) && isprime(exchange(m)))      

           fprintf('两位绝对素数有%d\n',m);

       end

    end

end

function n = exchange(m)   

    n = mod(m,10)*10+ floor(m/10);

end

运行结果:

MATLAB M文件的调试_第2张图片

  1. 已知y=f(40)/(f(30)+f(20))。求(1)当f(n)=n+10ln(n2+5)时,y的值时多少?(2)当f(n)=1*2+2*3+3*4++n*(n+1)时,y的值是多少。

(1)

函数文件:

function t=disancishiyan5_2(x)

t=x+10*log(x*x+5);

脚本文件:

[t(40)]=disancishiyan5_2_1hanshu(40);

[t(30)]=disancishiyan5_2_1hanshu(30);

[t(20)]=disancishiyan5_2_1hanshu(20);

y=t(40)/(t(30)+t(20));

fprintf("f(n)=n+10ln(n2+5)时,y的值为%f\n",y)

运行结果:

(2)

函数文件:

function f=disancishiyan5_2_2hanshu(n)

if n<=0

    f=0;

else

    f=disancishiyan5_2_2hanshu(n-1)+n*(n+1);

end

脚本文件:

[f(40)]=disancishiyan5_2_2hanshu(40);

[f(30)]=disancishiyan5_2_2hanshu(30);

[f(20)]=disancishiyan5_2_2hanshu(20);

y=f(40)/(f(30)+f(20));

fprintf("f(n)=1*2+2*3+3*4+…+n*(n+1)时,y的值是%f\n",y)

运行结果:

  1. 魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。MATLAB中可用magic(x)生成行、列数为x的矩阵。本题需要设计一个验证魔方矩阵的函数,通过计算矩阵各行、各列以及对角线元素之和,验证上述特性是否成立。

函数文件:

function disancishiyan5_3(A)

[n,m] = size(A);

if n<3 || m<3

    disp('你输入了一个错误的矩阵');

elseif n ~= m

    disp('输入的矩阵必须是方阵!');

else

    B = [sum(A,1),sum(A,2)',sum(diag(A))',sum(diag(rot90(A)))'];

    if B(1) == B(2) & B(2) == B(3) & B(3) == B(4) & B(4) == B(1)

        disp('这是一个魔方矩阵');

    else

        disp('这不是一个魔方矩阵');

    end

end

脚本文件:

A = input("请输入一个矩阵:")

disancishiyan5_3(A)

运行结果:

MATLAB M文件的调试_第3张图片

六、实验总结

简单陈述一下本次实验后对于函数文件和循环结构的认知,简述你觉得困扰的地方。

认知:

函数文件:

将特定的算法写成函数的形式,可以提高程序的可重复性和程序设计的效率。并且函数文件定义了输出参数和输入参数的对应关系,方便外部调用。事实上,MATLAB提供的标准函数都是由函数文件定义的。

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

f unction 输出参数表=函数名(输入参数表)

函数体语句

此外,函数文件还有调用以及递归调用的用法。

循环结构:

循环结构的基本思想就是重复,重复执行某些语句,以满足大量的计算要求。虽然每次循环执行的语句相同,但语句中一些变量的值是变化的,而且当循环到一定次数或满足条件后能结束循环。

MATLAB提供了两种实现循环结构的语句:for语句while语句

一般情况下,对于事先能确定循环次数的循环结构,使用for语句是比较方便的。for语句的格式如下:

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

     循环语句体

end

一般情况下,条件为 true 时重复执行的 while 循环,while语句格式如下:

while 条件

    循环语句体

end

困扰:

语句体不便构造。

你可能感兴趣的:(MATLAB,matlab,开发语言)