- 数列{}的定义是,,,用循环语句编程给出该数列的前40项(要求将结果用行向量x存储)。
%实验1.1.1
clear;
clc;
%初始化向量
x=[0 1];
%进行循环操作
for k=3:40
x(k)=x(k-1)+2*x(k-2);
end
%输出行向量
disp(x);
2.请找出1到1000中满足的正整数a、b。编写函数依次返回行向量a和b(其中a(i), b(i)为第i组解),其中数组a中元素是递增排列。请先写出求解算法,再给出程序。
clear;
clc;
%存储结果向量sol的初始化
sol=[];
%初始化生成a、b
a=1:1000;
b=1:1000;
%循环操作
for i=1:1000
for j=1:1000
if a(i).^2-100*b(j)==a(i)
sol=[sol;a(i) b(j)];
end
end
end
disp(sol);
3.
已知文件SH600004.mat包含了一个矩阵M.通过程序“load SH600004.mat”可以导入该文件存储的矩阵M.矩阵M存储了一只股票的交易数据.矩阵M的每行存储了一天的交易数据.以第i行为例说明矩阵M各列的含义如下:
M(i,1) 日期,整数.如20210301表示矩阵M本行数据为2021年3月1日的交易数据.
M(i,2) 开盘价,单位: 元
M(i,3) 最高价,单位: 元
M(i,4) 最低价,单位: 元
M(i,5) 收盘价,单位: 元
M(i,6) 成交额,单位: 元
M(i,7) 成交量,单位: 股
请完成下列任务:
- 绘制出该只股票最近100个交易日内的收盘价曲线和散点图.
- 绘制出该只股票最近100个交易日的涨幅变化曲线和散点图.“涨幅”通过当日收盘价相对于前一个交易日的“收盘价”来计算.另外再用bar绘制涨幅的柱状图.
% 数据导入方式
d=load('SH600004.mat');
M=d.M;
%1.绘制出该只股票最近100个交易日内的收盘价(M(i,5))曲线和散点图.
%获取最近100天数据
S1=M(end-99:end,5);
x= 1:100;
figure(1);
subplot(1,2,1);
plot(x,S1,'r*');
xlabel('交易日/日');
ylabel('收盘价/元');
title('最近100个交易日的收盘价散点图');
subplot(1,2,2);
plot(x,S1,'r-',LineWidth=1);
xlabel('交易日/日');
ylabel('收盘价/元');
title('最近100个交易日的收盘价曲线图');
%绘制出该只股票最近100个交易日的涨幅变化曲线和散点图
%循环做差获得数据
S2=[S1(1)-M(end-100,5)];
for k=2:100
a(k)=S1(k)-S1(k-1);
S2=[S2,a(k)];
end
figure(2)
subplot(1,3,1);
plot(x,S2,'b*');
xlabel('交易日/日');
ylabel('收盘价/元');
title('最近100个交易日的涨幅变化散点图');
subplot(1,3,2);
plot(x,S2,'b-',LineWidth=1);
xlabel('交易日/日');
ylabel('收盘价/元');
title('最近100个交易日的涨幅变化曲线图');
subplot(1,3,3);
bar(x,S2,1,"grouped","magenta");
xlabel('交易日/日');
ylabel('收盘价/元');
title('最近100个交易日的涨幅变化柱状图');
4.背景:用长度为1200厘米的条材,分别截成长度为64厘米与85厘米的两种成品。
请用穷举法找出一根条材的所有切割方式,并给出每种切割方式的具体信息(包括余料长度)。说明:一根条材最多截出18根64厘米的成品,或14根85厘米的成品。
clc;
clear;
tot_len=1200; len1=85; len2=64;
mat=[];
n1=tot_len/len1;
for k1=1:n1
k2=fix((tot_len-k1*len1)/len2);
if k2>0
remain=tot_len-k1*len1-k2*len2;
mat=[mat;k1,k2,remain];
end
end
disp(mat);
%输出最值时用
% [min_remain,index]=min(mat(:,3));
% qiege_sol=[len1,len2;mat(index,1:2)],
% min_remain
5.已知圆环面的方程如下
其参数方程如下:
其中.下图为一个圆环面示意图.
现在该圆环面所包含的圆环体内内随机产生一些点,并用文本文件记录了这些点的坐标.该文件每行记录了一个点的坐标:第1个为x坐标,第2个为y坐标,第3个为z坐标.
现有两个圆环体的数据文件data_ring1.txt和data_ring2.txt.
第1个圆环体的中心在原点,第2个圆环体的中心不在原点.
请编程完成下列任务:
1.处理第1个圆环体文件 data_ring1.txt
1)估算圆环面方程中的参数R和r;
2)然后编程绘制出该圆环面.
2.处理第2个圆环体文件 data_ring2.txt
1)估算圆环面方程中的圆环体的中心,和参数R和r.
2)然后编程绘制出该圆环面.
clear;
clc;
%读取坐标数据
s1=load('data_ring1.txt');s2=load('data_ring2.txt');
x1=s1(:,1);y1=s1(:,2);z1=s1(:,3);
x2=s2(:,1);y2=s2(:,2);z2=s2(:,3);
%以上xyz均为读取到的文件中的坐标参数
%计算坐标均值,得到近似中心坐标
c1=mean(s1)
c2=mean(s2)
%计算近似平均半径r和R
%关键是:中心到所有样本点的最小距离是R-r,最大距离是R+r
d1=[];
for i=1:100000
d1=[d1;sqrt((c1(1)-x1(i)).^2+(c1(2)-y1(i)).^2+(c1(3)-z1(i)).^2)];
end
d2=[];
for j=1:100000
d2=[d2;sqrt((c2(1)-x2(j)).^2+(c2(2)-y2(j)).^2+(c2(3)-z2(j)).^2)];
end
R1=0.5*(max(d1)+min(d1));
r1=0.5*(max(d1)-min(d1));
R2=0.5*(max(d2)+min(d2));
r2=0.5*(max(d2)-min(d2));
%得到参数方程坐标
u=0:0.01:2*pi;
v=0:0.01:2*pi;
[u,v]=meshgrid(u,v);
%本步骤很重要,使用mesh必用,目的是生成一个矩阵而非向量
subplot(1,2,1);
x11=(R1+r1.*cos(u)).*cos(v);
y11=(R1+r1.*cos(u)).*sin(v);
z11=r1.*sin(u);
mesh(x11,y11,z11);
%hold on;
%plot3(x1,y1,z1,'r*');
%注释掉的代码可以用于检验生成的立体图形是否合理
%去掉注释后图像中会标出所有样本点,可以发现样本点均在图形内
subplot(1,2,2);
x22=(R2+r2.*cos(u)).*cos(v)+c2(1);
y22=(R2+r2.*cos(u)).*sin(v)+c2(2);
z22=r2.*sin(u)+c2(3);
mesh(x22,y22,z22);
axis('square');
%hold on;
%plot3(x2,y2,z2,'r*');