电子科技大学数学实验1:程序设计基础实验

1 程序设计基础实验

1.1 基础训练

请编程计算 s = 1.04 + 1.0 4 2 + 1.0 4 3 + ⋯ + 1.0 4 2 5 s=1.04+1.04^2+1.04^3+\cdots+1.04^25 s=1.04+1.042+1.043++1.0425. 编写一个函数返回计算结果s.

function s=myfun
a=1.04;
s=0;
for i=1:25
  s=s+a^i;
end
end

ans =

43.3117

将区间[0,52]上等间隔的取50个数据(含区间端点)赋给变量v,并将v的元素逆序排列赋给向量w.

解:

v=linspace(0,52,50);
w=v(end:-1:end-size(v, 2)+1)

w =

1 至 5 列

52.0000 50.9388 49.8776 48.8163 47.7551

后边省略不写

数列 x n , x 1 = 0 , x 2 = 1 , x n = x n − 1 + 2 x n − 2 {x_n},x_1=0,x_2=1,x_n=x_{n-1}+2x_{n-2} xn,x1=0,x2=1,xn=xn1+2xn2
用循环语句编程给出该数列的前40项(要求将结果用行向量x存储)。

解:

x1=0;
x2=1;
x=[x1,x2];
for i=3:40
  xi=x(1,(i-1))+2*x(1,(i-2));
  x=[x,xi];
end
disp(x)

由于数目过大 matlab采用了科学计数法 输出结果为:

ans =

1.0e+11 *

1 至 5 列

​ 0 0.0000 0.0000 0.0000 0.0000 …

34 至 40 列

0.0286 0.0573 0.1145 0.2291 0.4581 0.9163 1.8325

想要看出规律可以减少循环次数 比如前十项:

ans =

1 至 8 列

​ 0 1 1 3 5 11 21 43

9 至 10 列

85 171 …

算法设计, 循环语句与枚举法

请找出1到1000中满足 a 2 − 100 b = a a^2-100b=a a2100b=a的正整数 a , b ( 1 ≤ a ≤ 1000 , 1 ≤ b ≤ 1000 ) a,b(1\le a \le 1000, 1\le b \le 1000) a,b(1a1000,1b1000)。编写函数依次返回行向量a,b(其中a(i), b(i)为第i组解),其中数组a中元素是递增排列。请先写出求解算法,再给出程序。

解:

function [a,b]=myfun
a=[];
b=[];
for x=1:1000
  for y=1:1000if x^2-x-100*y==0
​      a=[a,x];
​      b=[b,y];end
  end
end

>> [a,b]=myfun

a =

1 至 8 列

25 76 100 101 125 176 200 201

9 至 12 列

225 276 300 301

b =

1 至 8 列

​ 6 57 99 101 155 308 398 402

9 至 12 列

504 759 897 903

请在区间[-2,2]上随机投点,估算出 f ( x ) = 5 x 2 − e x s i n x − 8 f(x)=5x^2-e^{xsinx}-8 f(x)=5x2exsinx8在该区间上的最小值点. 提示:用代码-2+4*rand可以产生区间[-2,2]上的随机数.画出曲线图,标出最小值点。

解:

f=@(x)5*x^2-exp(x*sin(x))-8;%定义函数
Y=[];
X=[];
for i=1:200 %循环随机取值
  x=-2+4*rand;
  X=[X,x];
  Y=[Y,f(x)];%向量存储
end

plot(X,Y,'r.') %绘图
ymin=min(Y);%找到最小点
[a,b]=find(Y==ymin)%最小点的位置
xmin=X(a,b);%最小点对应的x
str=strcat('(',num2str(xmin),',',num2str(min(y)),')');%转化为符变量
text(xmin,ymin,str)

在这里插入图片描述

1.2 综合训练

一.实验问题

背景:用长度为1200厘米的条材,分别截成长度为64厘米与85厘米的两种成品。

请用穷举法找出一根条材的所有切割方式,并给出每种切割方式的具体信息(包括余料长度)。说明:一根条材最多截出18根64厘米的成品,或14根85厘米的成品。

二. 实验目的

认识穷举法及其实现方式。熟悉for语句在穷举法中的应用。

三.实验过程

fprintf('切割方式可以为:\n')

for i=0:18

  y=l-64*i;

  j=floor(y/85);

  yuliao=l-i*64-j*85;

  if yuliao<64fprintf('64厘米%d根;85厘米%d根;余料%d厘米\n',i,j,yuliao)

  end

end

>> Untitled2

切割方式可以为:

64厘米0根;85厘米14根;余料10厘米

64厘米1根;85厘米13根;余料31厘米

64厘米2根;85厘米12根;余料52厘米

64厘米4根;85厘米11根;余料9厘米

64厘米5根;85厘米10根;余料30厘米

64厘米6根;85厘米9根;余料51厘米

64厘米8根;85厘米8根;余料8厘米

64厘米9根;85厘米7根;余料29厘米

64厘米10根;85厘米6根;余料50厘米

64厘米12根;85厘米5根;余料7厘米

64厘米13根;85厘米4根;余料28厘米

64厘米14根;85厘米3根;余料49厘米

64厘米16根;85厘米2根;余料6厘米

64厘米17根;85厘米1根;余料27厘米

64厘米18根;85厘米0根;余料48厘米

四. 实验自评与改进方向

总体完成情况还算可以,达到了题目的要求。但是输出不是很美观。后续的改进可以使用数组存储的方法,第一行输出长度,下边输出切割的根数。即类似表格的展示方式。这样的输出更为美观。

另外在前边的第三题中,由于科学计数法输出结果,导致前边较小的数字无法正常显示,课后可以学习一下如何调整输出的方式。

五. 实验体会,收获及建议

题目主要涉及的是循环的相关知识,这是整个实验中最基础的内容,合理的使用用matlab去解决实际问题。将知识真正的应用到了实际生活中。

在编程中遇到的一些意想不到的问题也让我意识到,要在平时多加练习,不能眼高手低。不能仅仅掌握课堂上的函数命令,在课余时间多去看一些编程,丰富自己的函数储备,并且学习思路,从而让自己的编程更加容易。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
西安科技大学Matlab数学实验是一门将数学理论与计算机科学相结合的实践课程。通过这门课程,学生将学习如何利用Matlab软件进行数学建模计算。 这门实验课程旨在培养学生的数学建模计算思维能力,提高他们的创新能力、动手能力和解决实际问题的能力。学生将通过实践研究和分析真实的数学问题,运用Matlab软件进行数据分析、模拟计算、图像处理等方面的操作和实验。而这些实验内容既有基础数学理论知识的应用,也有对实际问题的分析和解决。 在实验中,学生将学习如何使用Matlab软件进行数学建模和模拟实验,通过编写和运行代码来解决数学问题。他们将学习如何使用Matlab进行矩阵运算、符号计算、曲线拟合、数值积分和微分方程求解等。同时,学生还将学习如何利用Matlab进行数据可视化和图像处理,从而更好地理解与展示数学理论。 这门实验课程不仅能够提高学生的Matlab应用能力,还可以培养学生的科研兴趣和创新精神。通过实践探索和解决实际问题,学生们将提升他们的问题解决能力和团队合作能力。 综上所述,西安科技大学Matlab数学实验是一门结合数学理论与计算机科学的实践课程,通过Matlab软件的应用,学生将能够提高他们的数学建模计算能力,并培养他们的创新能力和解决实际问题的能力。这门实验课程不仅有利于学生的学术发展,同时也对他们的职业发展具有积极的促进作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值