实验二:Matlab 程序设计
目录
1. 编制分支程序实现以下计算,a, b, c, x的值从键盘输入,其中:a为自己学号的第1-3位,b为自己学号的第4-6位,c位为自己学号的第7-9位,x位为自己学号的10-12位。
3. 输入20个数,求其中最大数和最小数,要求分别用循环结构和Matlab的max和min函数来实现。
4. 编写一个函数文件,求小于任意自然数n的Fibnacci数列各项,Fibnacci数列定义如下:
5. 编写一个函数文件,以向量为参数,对向量元素进行排序并输出。
编写程序,用如下迭代公式求编辑,其中,a=113。迭代终止条件为编辑,迭代初值编辑,迭代次数不超过100次。分别对迭代结果和准确值进行比较,并统计迭代次数。
一、 实验目的:
1. 理解 Matlab 程序设计方法;
2. 能采用 M 语言实现算法设计与验证;
3. 设计编写 Matlab 函数文件。
二、实验器材:
安装 MATLAB 软件的 PC 机
三、实验内容及结果
1. 编制分支程序实现以下计算,a, b, c, x的值从键盘输入,其中:a为自己学号的第1-3位,b为自己学号的第4-6位,c位为自己学号的第7-9位,x位为自己学号的10-12位。
程序设计:
a=input('输入a:');
%请求用户输入
b=input('输入b:');
c=input('输入c:');
x=input('输入x:');
if x>=0 &&x<10
y=a*x^2+b*x+c;
elseif x>=10 && x<20
y=a*sin(b)^c+x;
else
y=log(abs(b+c/x));
end
disp("计算结果为:"+y);
实验结果及分析:
分析:
根据 x 的取值,判断使用哪一个计算公式,因为 x=223 大于20,所以使用y=ln|b+c/x|,带入计算得出y约为5.3536
2. 产生20个两位随机整数,输出其中小于平均值的偶数。
程序设计:
n=randi([10,99],[1,20]);
%产生在10到99之间的1行20列的随机整数
a=mean(n);%计算平均数
num=1;%建立索引
for i=1:20
if n(i)<a && rem(n(i),2)==0
%rem求除后的余数
s(num)=n(i);
num=num+1;
end
end
disp("20个两位随机整数为:");
disp(n);
disp("20个两位随机整数的平均数为:");
disp(a);
disp("20个两位随机整数中低于平均值的偶数为:");
disp(s);
实验结果及分析:
分析:
通过 rendi 函数产生在 10 到 99 之间的 1 行 20 列的随机整数,通过 mean 函数计 算出平均值,进入 for 循环,经过 if 语句判断条件 n(i)
3. 输入20个数,求其中最大数和最小数,要求分别用循环结构和Matlab的max和min函数来实现。
程序设计:
第一种:使用MATLAB函数
clc
clear
%使用Matlab的max和min函数
for i=1:20
A(i)=input('输入20个数:');
end
disp("最大值:"+max(A));
disp("最小值:"+min(A));
第二种:循环结构
%循环结构
for i=1:20
A(i)=input('输入20个数:');
end
maxa=A(1);
mina=A(1);
for i=2:20
if maxa<A(i)
maxa=A(i);
end
if mina>A(i)
mina=A(i);
end
end
disp("最大值:"+ maxa);
disp("最小值:"+ mina);
实验结果及分析:
分析:
循环结构通过现将第一个数赋到 maxa(mina) 中,然后一个数与一个数进行比较,若遇到比其大(小) 的数,则将其存到 maxa(mina)中,将原来的数覆盖, 最后结束循环,输出 maxa(mina)
4. 编写一个函数文件,求小于任意自然数n的Fibnacci数列各项,Fibnacci数列定义如下:
函数文件内容:
function f = Fibnacci(n)
% fibonacci 计算小于n的Fibonacci数列
% 输入参数:n - 自然数
% 输出参数:f - 小于n的Fibonacci数列
f = [1, 1];
i = 2;
while f(i) + f(i-1) < n
f(i+1) = f(i) + f(i-1);
i = i + 1;
end
脚本中调用函数的语句:
Fibnacci(3) %参数3,可改变参数多次测试
实验结果及分析:
分析:
Fibnacci 数列中,f(1)=f(2)=1,f(3)=2, f(4)=3,在脚本调用函数时所给自然数 n=3,可知输出结 果应为 1 1 2,对应实验结果,与预测一致。
5. 编写一个函数文件,以向量为参数,对向量元素进行排序并输出。
函数文件内容:
function f = sort_vector(vec)
f= sort(vec);
end
脚本调用函数:
disp("原序列为")
vec = [10,454,1,2151,6,98]
disp("排序后为");
disp(sort_vector(vec));
实验结果及分析:
分析:
B = sort(A) 按升序 对 A 的元素进行排序。 如果 A 是向量,则 sort(A) 对向量元素进行排序。
四、思考题
编写程序,用如下迭代公式求
,其中,a=113。迭代终止条件为
,迭代初值
,迭代次数不超过100次。分别对迭代结果和准确值进行比较,并统计迭代次数。
当
时,有
,可得迭代公式如下:
程序设计:
a=113;x0=1.0;
xn=x0;z=1e-5;
n=0;
while 1
xn1=xn/2+a/(2*xn);
n=n+1;%迭代次数
if abs(xn1-xn)<=z break
end
xn=xn1;
if n>100 break
end
end
disp("结果为");
disp(num2str(xn));
disp("准精确值为");
disp(num2str(sqrt(a)));
disp("迭代次数为");
disp(num2str(n));
实验结果及分析:
分析:
程序中有两个跳出循环的条件,一个是,一个是迭代次数超过100次。
当a=113时,通过迭代的法求根号a的值,是因为跳出循环,并且求出了其根号值。