一、实验目的 (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); 运行结果: |
四、循环结构
脚本文件: 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("(1)y<3时的最大值为%d\n",n) fprintf("(2)与(1)对应的n值对应的y值为%f\n",y) 运行结果:
脚本文件: 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) 运行结果:
脚本文件: 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) 运行结果:
脚本文件: 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) 运行结果: |
五、函数文件
函数文件: 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 运行结果:
(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) 运行结果:
函数文件: 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提供的标准函数都是由函数文件定义的。 函数文件由function语句引导,其基本结构如下: f unction 输出参数表=函数名(输入参数表) 函数体语句 此外,函数文件还有调用以及递归调用的用法。 循环结构: 循环结构的基本思想就是重复,重复执行某些语句,以满足大量的计算要求。虽然每次循环执行的语句相同,但语句中一些变量的值是变化的,而且当循环到一定次数或满足条件后能结束循环。 MATLAB提供了两种实现循环结构的语句:for语句和while语句。 一般情况下,对于事先能确定循环次数的循环结构,使用for语句是比较方便的。for语句的格式如下: for 循环变量=表达式1:表达式2:表达式3 循环语句体 end 一般情况下,条件为 true 时重复执行的 while 循环,while语句格式如下: while 条件 循环语句体 end 困扰: 语句体不便构造。 |
MATLAB M文件的调试
最新推荐文章于 2023-03-03 18:52:13 发布