Matlab与Simulink系统仿真学习心得
班级:07610 学号:072019 姓名:马楠
第一部分:Matlab学习心得以及实践
Matlab是迄今为止我所见到过的功能最为强大实用范围宽广的软件。的确Matlab适用于教学,航天,网络仿真等等。而且提供了很多功能强大的工具箱,并且最为突出的是它自带的很全面细致的帮助文档,无论你是初学者还是老手都会惊叹于此,你也不必去花很多时间去熟悉那些繁杂的命令,并且很容易通过这些帮助文档得到关于这些函数最精准的用法。
Matlab是一个建立在矩阵操作上的软件,我想要想真正懂得并理解Matlab与一般的语言比如C或者java的区别,那么你就应该真正理解矩阵的思想。而且要熟悉Matlab对矩阵存储的方式(在下文中我会详细解释与之相关的内容),这样对提高你的代码执行效率与易懂性都有很大的帮助。
但是Matlab究竟应该怎么定位呢?一个编程软件,一个数学工具,一个工具箱,一个开发引擎,一个仿真工具,一个虚拟现实软件…… 的确要精准的说出Matlab的作用很难,或许去定义这个东西到底是用来干什么的并不重要,It is just a tool。
关于Matlab的学习方法,我想与别的语言有很大不同,对于汇编或者C,我们应当很注重底层的一些操作,比如栈或者队列存储数据的方式,int或者double类型转换的时候产生的数据丢失,或者指针方面很头疼的一些东西,但是对于Matlab你根本不必去注重这些东西,也不必去清除的记得那个函数的具体调用方式,那个函数的内容与结构等等。你需要的只是相当用一个笔记本写下你一步一步实现目标的步骤而已。一种草稿纸式的语言。你所学的东西很大部分都是为你要做的目标来服务的,也许这就是当初面向对象式语言产生的原因,但是Matlab就是这种语言的一个代表。
好了,就说到这里了,接下来是我自己学习中对Matlab的一些应用中所遇到的问题以及思考方式和解决办法。
1 离散信号卷积:
N1=input('N1=');%输入N1 N2=input('N2=');%输入N2
k1=0:(N1-1);%定义序列f1的对应序号向量 k2=0:(N2-1);% 序列f2的对应序号向量 f1=ones(1,N1);?为阶跃序列 f2=0.5*k2;ò为斜坡序列
[f,k]=dconv(f1,f2,k1,k2)%求离散卷积
其中dconv函数的代码为:
function [f,k]=dconv(f1,f2,k1,k2) %The function of compute f=f1*f2
% f: 卷积和序列f(k)对应的非零样值向量 % k: 序列f(k)的对应序号向量 % f1: 序列f1(k)非零样值向量 % f2: 序列f2(k)的非零样值向量 % k1: 序列f1(k)的对应序号向量 % k2: 序列f2(k)的对应序号向量
f=conv(f1,f2) %计算序列f1与f2的卷积和f k0=k1(1)+k2(1); %计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度
k=k0:k0+k3 %确定卷积和f非零样值的序号向量 subplot(2,2,1) stem(k1,f1) title('f1(k)') xlabel('k') ylabel('f1(k)') subplot(2,2,2)
%在子图1绘序列f1(k)时域波形图
stem(k2,f2) %在图2绘序列f2(k)时波形图 title('f2(k)') xlabel('k') ylabel('f2(k)') subplot(2,2,3) stem(k,f); %在子图3绘序列f(k)的波形图 title('f(k)f1(k)与f2(k)的卷积和f(k)') xlabel('k') ylabel('f(k)')
h=get(gca,'position'); h(3)=2.5*h(3);
set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍
2 一次物理实验中的数据处理,关于非线性电阻。
x=[12.042 11.844 11.644 11.444 11.244 11.043 10.843 10.645 10.447 10.240 10.054 9.843 9.640 9.447 8.950 8.448 7.946 7.441 6.940 6.444 5.942 5.446 4.946 4.445 3.944 3.447 2.942 2.442
2.246 2.045 1.846 1.643 1.464 1.252 1.038 0.849 0.642 0.448 0.208 0 ];
y=[0.601 0.915 1.349 1.742 2.152 2.572 2.994 3.414 3.840 4.285 4.678 4.612 4.526 4.447 4.246 4.043 3.846 3.635 3.433 3.232 3.028 2.827 2.625 2.442 2.220 2.018 1.814 1.614 1.535 1.455 1.376 1.235 1.101 0.950 0.791 0.642 0.491 0.341 0.158 0.001]
p1=polyfit(x(1:11),y(1:11),1); p2=polyfit(x(11:31),y(11:31),1); p3=polyfit(x(31:end),y(31:end),1); Y1=vpa(poly2sym(p1,'x'),6) Y2=vpa(poly2sym(p2,'x'),6) Y3=vpa(poly2sym(p3,'x'),6)
x1=min(x(1:11)):0.1:max(x(1:11)); x2=min(x(11:31)):0.1:max(x(11:31)); x3=min(x(31:end)):0.1:max(x(31:end)); y1=polyval(p1,x1); y2=polyval(p2,x2); y3=polyval(p3,x3);
plot(x,y,'o',x1,y1,x2,y2,x3,y3) ; xlabel('电压值U/v'); ylabel('电流值I/mA');
title('非线性电阻伏安特性曲线'); grid on
54.543.532.521.510.5002468101214
3:三维立体图形灯光效果 [x,y]=meshgrid(-8:0.5:8); R=sqrt(x.^2+y.^2)+eps; z=sin(R)./R;