MATLAB与仿真上机练习题目Word下载.docx
《MATLAB与仿真上机练习题目Word下载.docx》由会员分享,可在线阅读,更多相关《MATLAB与仿真上机练习题目Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
![MATLAB与仿真上机练习题目Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/13/1640fa64-2bd5-45f3-a306-8c645971e5cd/1640fa64-2bd5-45f3-a306-8c645971e5cd1.gif)
要求
(1)a、b、c由键盘输入
(2)输出的时候区分相同的根、实数根和复数根,即先输出“该二元一次方程具有相同的实数根/复数根/两个不同/实数根/复数根”,再输出具体的值。
实验4:
自定义一个函数mymax,实现matlab函数max的功能,要求输出一个参数时,则输出最大值;
若要求输出两个参数,输出最大值和最大值的位置;
若要求输出其他参数,则报错。
1.若输入向量为一个常数,则输出该数本身;
2.若输入向量为一维(行向量或者列向量),则输出最大值;
3.若输入向量为二维,则输出每一列的最大值
4.若输入向量为三维以上,则输出每一按照列取出的维度的最大值(课后思考)
实验5:
对一组测量数据t=[0,0.2,0.4,1.3,5.6]'
,y=[0.8,0.7,0.6,0.5,0.2]'
,用以下函数来拟合这组数据:
,画出拟合结果,并给出的值。
实验6:
对正弦波,完成如下任务:
1.对该正弦波一个周期采样1024点,画出波形;
2.对每个采样点量化成10位,并按照二进制补码进行编码;
3.将编码后的1024个样点保存在sample1024.txt文件中;
提示:
正弦波的处理过程如下:
采样
量化
编码
正弦波
采样:
将正弦波一个周期[0,2*pi],采样1024点,采样后的数据是浮点数,数据范围是[-1,1];
量化:
将采样后的数据从浮点型转换成定点型,即转换成10bit整型数,数据范围将变成[-512,511];
编码:
将量化后的10bit整型数按照二进制补码规则进行编码;
实验结果
\work\xiangpiqiu.m
clc
clearall;
%%%%%%%%%%%%%%%%%
%v0=input('
请输入初始速度v0'
);
%h0=input('
请输入初始高度h0'
%以正上方为正速度,以下方为负速度
v0=10;
h0=50;
g=-9.81;
t=0:
0.01:
50;
%以0.01为间隔,共500s
%h=0.5.*g.*t.^2+v0*t+h0;
%离地面距离h
t1=roots([0.5.*g,v0,h0]);
%当地面距离为0,即第一次落地时所需时间t1
t11=min(t1(t1>
0));
%对求解的根t做如下处理:
小于等于0的t舍弃,大于0的t取最小值,即第一次落地时真正的时间t11
v1=g.*t11+v0;
%即第一次落地时的速度v1
%%%%%%%%%%假设无能量损耗,完全刚性,即以同样速度v1反弹回空中
v2=-v1;
%h2=0.5.*g.*t.^2+v2*t;
%t2=roots([0.5.*g,v2,0]);
%当地面距离为0,即第二次落地时所需时间t2
t2=-v2./(0.5.*g);
%当地面距离为0,即第二次落地时所需时间t2。
与上式等价
%%%%%%%%%%求解h和v%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%实际为一分段函数,当t<
t11时候,v=g.*t+v0;
h=0.5.*g.*t.^2+v0*t+h0;
%当t11<
t<
t11+t2时候,v=g.*(t-t11)+v2;
h=0.5.*g.*(t-t11).^2+v2*(t-t11);
%当t11+N*t2<
t11+(N+1)*t2时候,v=g.*(t-N*t2-t11)+v2;
h=0.5.*g.*(t-N*t2-t11).^2+v2*(t-N*t2-t11);
%x=(t<
t11).*t+(t>
t11).*mod(t-t11,t2);
将当t<
t11时候与其他时候的t分开
x1=(t<
=t11).*t;
v11=g.*x1+v0;
h11=0.5.*g.*x1.^2+v0*x1+h0;
%%%%%%%%%%%%第一次落地之前的h和v
x2=(t>
v22=g.*x2+v2;
h22=0.5.*g.*x2.^2+v2*x2;
%%%%%%%%%%%%第一次落地之后的h和v
v=v11.*(t<
=t11)+v22.*(t>
t11);
h=h11.*(t<
=t11)+h22.*(t>
subplot(2,1,1)
plot(t,v)
xlabel('
时间'
ylabel('
皮球速度,上为正,下为负'
subplot(2,1,2)
plot(t,h)
xlabel('
皮球离地面的高度'
1
(2)
[x,y]=meshgrid(-4:
0.1:
4,-4:
4);
f1=(x+y).*(x>
=0&
y>
=0)+(x.^2+y.^2).*(x<
0&
y<
0)++(x+y.^2).*(x>
0)+(x.^2+y).*(x<
=0);
%mesh(x,y,f1);
surf(x,y,f1);
%f2=x.*(x>
=0)+(x.^2).*(x<
0)+y.*(y>
=0)+(y.^2).*(y<
0);
%两者效果相同
\work\mymax.m
一维情况
function[maxvalue,maxposition]=mymax(x)
%%%%%%%%%%构造自定义的max函数%%%%%%%%%%
%x:
输入向量,可以为任意维度
%maxvalue:
求得的最大值
%msg=nargchk(1,2,nargout);
%err(msg);
%%maxposition:
最大值所在的位置
%ifnargout<
1&
nargout>
2
%error('
输出参数应该是1或者2'
%end
%size_x=size(x);
maxvalue=x
(1);
maxposition=1;
forii=1:
size(x,2)
ifx(ii)>
maxvalue
maxvalue=x(ii);
maxposition=ii;
end
同时可判断一维、二维的情况
%maxposition:
最大值所在位置
%如果x是一个向量,那么maxvalue便是这个向量元素中的最大值;
%
%如果x是一个二维矩阵,那么maxvalue便是选出每一列中的最大值,返回一个1*n的矩阵,或者说是一个n维行向量。
size_x=size(x);
%求出x的size:
size_x
ndim_x=ndims(x);
%求出x的维度:
ndim_x
ifndim_x==1
%%%%%%%%%%%%%%%%%x为一个常数的情况%%%%%%%%%%%%%%%%%
maxvalue=x;
else
ifndim_x==2
%%%%%%%%%%%%%%%%%%%x为一维向量的情况%%%%%%%%%%%%%%
ifsize_x
(1)==1||size_x
(2)==1
length(x)
else
%%%%%%%%%%%%%%%%x为二维矩阵的情况%%%%%%%%%%%%%
maxvalue=zeros(1,size_x
(2));
maxposition=zeros(1,size_x
(2));
forjj=1:
size_x
(2)
y=x(:
jj);
maxvalue(jj)=y
(1);
maxposition(jj)=1;
size_x
(1)
ify(ii)>
maxvalue(jj)
maxvalue(jj)=y(ii);
maxposition(jj)=ii;
end
t=[0,0.2,0.4,1.3,5.6]'
;
y=[0.8,0.7,0.6,0.5,0.2]'
A=[ones(size(t)),exp(-t),cos(t)];
c=A\y;
T=[0:
6]'
Y=[ones(size(T)),exp(-T),cos(T)]*c;
plot(T,Y,'
-'
t,y,'
o'
title('
最小二乘曲线拟合'
\itt'
ylabel('
\ity'
legend('
拟合值'
'
实际值'
c=
0.3836
0.6606
-0.2396