三、建立和执行函数文件 定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在脚本文件中调用该函数文件。 %T3
function [y1,y2,y3,y4] = fushu(a,b)
%建立y1,y2,y3,y4关于a和b的函数关系
y1=exp(a+b*i) %y1求出定复数的指数
y2=log(a+b*i) %y2求出定复数的对数
y3=sin(a+b*i) %y3求出定复数的正弦
y4=cos(a+b*i) %y3求出定复数的余弦
end |
四、循环结构 1.根据y=1+1/3+1/5+……+1/(2n-1),求 (1)y<3时的最大值;(2)与(1)的n值对应的y值。 %T4.1
y1=0;
for n1=1:1000000 %设置循环,由于不知道会循环多少次,则把数设置成一个很大的数
y1=y1+(1/(2*n1-1)); %根据题目写出y1关于n1的关系
if y1<3 %要是y1的值小于3,则继续进入到循环里
continue
end
break %当找到y1的值大于3后直接结束循环
end
n1=n1-1 %由于找到的n1值是第一个大于3的值,因此要减去1
y1=y1-(1/(2*n1-1))
%同理,循环出来的是第一个大于3的n1的值对应的y1值,因此要减去上一个n1值对应的y1值 2.已知f1=1, f2=0, f3=1, fn=fn-1-2fn-2+fn-3求,f1~f100中:(1)最大值、最小值、各数之和。(2)正数、零、负数的个数。 %T4.2
for n2=1:100 %设置循环
if n2==1 %当n2等于1的时候f等于1,n2等于2时f=0,n2等于3的时候f等于1
f(n2)=1;
max=f(n2); %先假设最大值为最初值
elseif n2==2
f(n2)=0;
elseif n2==3
f(n2)=1;
else %当n2大于等于4后,满足题目条件
f(n2)=f(n2-1)-2*f(n2-2)+f(n2-3);
end
if f(n2)>max %如果在循环里出现f的值大于假设的最大值,则最大值被替换
max=f(n2);
end
end
maxf=max
minf=min(f) %使用函数找出最小值和总数之和
sumf=sum(f)
zhengshu=length(find(f>0)) %先利用find的函数找出特殊值,再用length函数计算出个数
zero=length(find(f==0))
fushu=length(find(f<0)) 3.求解圆周率π的近似值,使用常用公式之一π≈4*(1-1/3+1/5-1/7+1/9……),直到最后一项的绝对值小于10-7为止。 %T4.3
pi=1;
n3=3;
flag=-1; %用于标记每一项前面的正负号
while 1/n3>10^(-7) %当满足条件时,继续循环
pi=pi+flag*(1/n3);
flag=-flag; %改变正负号
n3=n3+2;
end
pi=4*pi 4.若两个连续自然数的乘积减1是素数,则称这两个连续自然数是亲密数对,该素数是亲密素数。例如,2*3-1=5,由于5是素数,所以2和3是亲密数对,5是亲密素数。求[2,50]区间内:(1)有多少个亲密数对。(2)与上述亲密数对对应的所有亲密素数之和。 %T4.4
n=0;%用于计算亲密数对的数量
sumsushu=0;%用于计算亲密素数的总和
for x=2:49 %设置循环要求,不能设置成2:50,因为要是50和51为亲密数对,那么51不在范围内
y4=x*(x+1)-1; %判断是否为亲密素数、亲密数对的条件
for i=2:y4 %判断y4是否为素数,需要重新设置循环去判断
if rem(y4,i)~=0 %用求余函数,用y4除以从2到它本身的数再求余
%要是余数不等于0则循环继续
continue
end %要是余数等于0则循环结束
break
end
i;
if i==y4 %要是余数等于0且i=y4,即它本身,则可判断此数为素数
n=n+1; %亲密数对+1
sumsushu=sumsushu+y4; %亲密素数之和累计叠加
end
end
n %最后输出亲密数对的个数和亲密素数之和
sumsushu |
五、函数文件 1.一个自然数是素数,且它的数字位置经过任意兑换后仍为素数,则称之为绝对素数。例如13是绝对素数,试求所有两位绝对素数。要求:定义一判断素数的函数文件。 %T5.1
function t51 %定义函数判断是否为绝对素数
for j=10:99 %因为是两位数,因此数应该是从10到99
for i=2:j %循环的嵌套,用于判断该两位数是否为素数
if rem(j,i)~=0 %用该两位数除以从2到它本身的数求余
continue %要是求余不等于0,循环继续
end
break %要是求余等于0,循环结束
end
i;
if i==j %如果求余等于0且只能除以它本身的数,则这两位数为素数
u=rem(j,10); %求出该两位数的个位数字
v=(j-u)/10; %求出该两位数的十位数字
t=u*10+v; %将该两位数进行对换形成新的两位数t
for s=2:t %对t进行素数的判断
if rem(t,s)~=0
continue
end
break
end
s;
if s==t %在j是素数的基础上判断t为素数,则输出原有两位数j
disp(j)
end
end
end 2.已知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) (2) function [f] = t52(n) %建立f关于n的函数
f=n+10*log(power(n,2)+5) %f与n的关系
end
function [h]=t522(n) %建立h与n的函数
h=0; %起初h等于0,后面在循环里累计叠加
for i=1:n %设置循环次数,从1到n
h=h+n*(n+1) ;
end
end 3.魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。MATLAB中可用magic(x)生成行、列数为x的矩阵。本题需要设计一个验证魔方矩阵的函数,通过计算矩阵各行、各列以及对角线元素之和,验证上述特性是否成立。 function mofang(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 |
六、二维图形
- 已知y1 =x2 , y2 =cos(2x), y3 = y1*y2 ,完成下列操作。
- 在同一坐标系下用不同的颜色和线型绘制3条曲线。
- 以子图形式绘制3条曲线。
%T6.1
x61=0:pi/100:2*pi; %定义x61为列向量,在0到2*pi之间,增幅为pi/100
y61=power(x61,2); %定义y61与x61的关系
y62=cos(2.*x61); %定义y62与x61的关系
y63=y61.*y62; %定义y63与x6的关系
plot(x61,y61,'b',x61,y62,'g',x61,y63,'r') %同时将三条线绘制在一个图像上
%y61是蓝色曲线,y62是绿色曲线,y63是红色曲线
%T6.2
x62=0:pi/100:2*pi; %定义x62为列向量,在0到2*pi之间,增幅为pi/100
y621=power(x62,2); %定义y621与x62的关系
y622=cos(2.*x62); %定义y622与x62的关系
y623=y621.*y622; %定义y623与x62的关系
%将图像分割成三个图像
subplot(1,3,1) %第一个图像
plot(x62,y621)
title('y621');
axis([0,2*pi,-30,40]);
subplot(1,3,2) %第二个图象
plot(x62,y622)
title('y622');
axis([0,2*pi,-30,40]);
subplot(1,3,3) %第三个图像
plot(x62,y623)
title('y623');
axis([0,2*pi,-30,40]); |
六、实验总结 简单陈述一下本次实验后对于函数文件和循环结构的认知,简述你觉得困扰的地方。 ①循环结构常用有两种,一种是for循环,一般情况下,对于事先能确定循环次数的循环结构,使用for语句是比较方便的,比如[2:50]; for 循环变量=表达式1:表达式2:表达式3 循环语句 end 另一种是while循环,一般情况下,条件为 true 时重复执行的 while 循环,这种适用于没有给出具体的循环范围,但又需要借助循环结构来判断条件输出特定的结果。 while 条件 循环语句体 End ②函数结构,将特定的算法写成函数的形式,可以提高程序的可重复性和程序设计的效率。并且函数文件定义了输出参数和输入参数的对应关系,方便外部调用。事实上,MATLAB提供的标准函数都是由函数文件定义的。 函数文件由function语句引导,其基本结构如下: f unction 输出参数表=函数名(输入参数表) 函数体语句 ③困扰:循环的嵌套,在实验中,在涉及多个循环的时候,究竟哪个循环在哪个循环的里面,哪个循环又在哪个循环的外面,什么时候应该用continue继续循环,什么时候应该用break跳出循环。 |