计算机仿真实验报告 MATLAB
Matlab仿真实验报告_发布

2、实验目的
通过本次实验,应该掌握: (1) 用傅立叶变换进行信号分析时基本参数的选择。 (2) 经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT) 后信号频 谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都 是离散的。 (3) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基 2 时间抽选法) ,体 会快速算法的效率。 (4) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨 率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。 (5) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念 的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和 MPEG Audio。
~4~
MATLAB 仿真实验报告
N=4000; % N>1/TΔf=1/357*T
n=0:1:N-1; f=fs*n/N;
%DTMF 信号编码 dtmf(1,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(1)*T*n); dtmf(2,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(2)*T*n); dtmf(3,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(3)*T*n); dtmf(4,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(1)*T*n); dtmf(5,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(2)*T*n); dtmf(6,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(3)*T*n); dtmf(7,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(1)*T*n); dtmf(8,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(2)*T*n); dtmf(9,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(3)*T*n); dtmf(10,:)=sin(2*pi*row(4)*T*n)+sin(2*pi*col(2)*T*n); %1 %2 %3 %4 %5 %6 %7 %8 %9 %0
matlab仿真实验报告

matlab仿真实验报告Matlab仿真实验报告引言:Matlab是一种广泛应用于科学和工程领域的数值计算软件,它提供了强大的数学和图形处理功能,可用于解决各种实际问题。
本文将通过一个具体的Matlab 仿真实验来展示其在工程领域中的应用。
实验背景:本次实验的目标是通过Matlab仿真分析一个电路的性能。
该电路是一个简单的放大器电路,由一个输入电阻、一个输出电阻和一个放大倍数组成。
我们将通过Matlab对该电路进行仿真,以了解其放大性能。
实验步骤:1. 定义电路参数:首先,我们需要定义电路的各个参数,包括输入电阻、输出电阻和放大倍数。
这些参数将作为Matlab仿真的输入。
2. 构建电路模型:接下来,我们需要在Matlab中构建电路模型。
可以使用电路元件的模型来表示电路的行为,并使用Matlab的电路分析工具进行仿真。
3. 仿真分析:在电路模型构建完成后,我们可以通过Matlab进行仿真分析。
可以通过输入不同的信号波形,观察电路的输出响应,并计算放大倍数。
4. 结果可视化:为了更直观地观察仿真结果,我们可以使用Matlab的图形处理功能将仿真结果可视化。
可以绘制输入信号波形、输出信号波形和放大倍数的变化曲线图。
实验结果:通过仿真分析,我们得到了以下实验结果:1. 输入信号波形与输出信号波形的对比图:通过绘制输入信号波形和输出信号波形的变化曲线,我们可以观察到电路的放大效果。
可以看到输出信号的幅度大于输入信号,说明电路具有放大功能。
2. 放大倍数的计算结果:通过对输出信号和输入信号的幅度进行计算,我们可以得到电路的放大倍数。
通过比较不同输入信号幅度下的输出信号幅度,可以得到放大倍数的变化情况。
讨论与分析:通过对实验结果的讨论和分析,我们可以得出以下结论:1. 电路的放大性能:根据实验结果,我们可以评估电路的放大性能。
通过观察输出信号的幅度和输入信号的幅度之间的比值,可以判断电路的放大效果是否符合设计要求。
matlab计算机实验报告

matlab计算机实验报告Matlab计算机实验报告引言Matlab是一种强大的计算机软件,广泛应用于科学计算、数据分析和工程设计等领域。
本实验报告旨在介绍我对Matlab的实验研究和应用。
通过实验,我深入了解了Matlab的功能和特点,并通过实际案例展示了其在科学计算和数据处理中的应用。
实验一:基本操作和语法在本实验中,我首先学习了Matlab的基本操作和语法。
通过编写简单的程序,我熟悉了Matlab的变量定义、赋值、运算符和条件语句等基本语法。
我还学习了Matlab的矩阵操作和向量化计算的优势。
通过实例演示,我发现Matlab在处理大规模数据时具有高效性和便捷性。
实验二:数据可视化数据可视化是Matlab的重要应用之一。
在本实验中,我学习了如何使用Matlab绘制各种图表,如折线图、散点图、柱状图和饼图等。
我了解了Matlab 的绘图函数和参数设置,并通过实例展示了如何将数据转化为直观的图形展示。
数据可视化不仅可以帮助我们更好地理解数据,还可以用于数据分析和决策支持。
实验三:数值计算和优化Matlab在数值计算和优化方面具有强大的功能。
在本实验中,我学习了Matlab 的数值计算函数和工具箱,如数值积分、微分方程求解和线性代数运算等。
通过实例研究,我发现Matlab在求解复杂数学问题和优化算法方面具有出色的性能。
这对于科学研究和工程设计中的数值分析和优化问题非常有用。
实验四:图像处理和模式识别Matlab在图像处理和模式识别领域也有广泛的应用。
在本实验中,我学习了Matlab的图像处理工具箱和模式识别算法。
通过实例演示,我了解了如何使用Matlab进行图像滤波、边缘检测和特征提取等操作。
我还学习了一些常见的模式识别算法,如支持向量机和神经网络等。
这些技术在计算机视觉和模式识别中具有重要的应用价值。
实验五:信号处理和系统建模Matlab在信号处理和系统建模方面也有广泛的应用。
在本实验中,我学习了Matlab的信号处理工具箱和系统建模工具。
仿真软件操作实验报告(3篇)

第1篇实验名称:仿真软件操作实验实验目的:1. 熟悉仿真软件的基本操作和界面布局。
2. 掌握仿真软件的基本功能,如建模、仿真、分析等。
3. 学会使用仿真软件解决实际问题。
实验时间:2023年X月X日实验地点:计算机实验室实验器材:1. 仿真软件:XXX2. 计算机一台3. 实验指导书实验内容:一、仿真软件基本操作1. 打开软件,熟悉界面布局。
2. 学习软件菜单栏、工具栏、状态栏等各个部分的功能。
3. 掌握文件操作,如新建、打开、保存、关闭等。
4. 熟悉软件的基本参数设置。
二、建模操作1. 学习如何创建仿真模型,包括实体、连接器、传感器等。
2. 掌握模型的修改、删除、复制等操作。
3. 学会使用软件提供的建模工具,如拉伸、旋转、镜像等。
三、仿真操作1. 设置仿真参数,如时间、步长、迭代次数等。
2. 学习如何进行仿真,包括启动、暂停、继续、终止等操作。
3. 观察仿真结果,包括数据、曲线、图表等。
四、分析操作1. 学习如何对仿真结果进行分析,包括数据统计、曲线拟合、图表绘制等。
2. 掌握仿真软件提供的分析工具,如方差分析、回归分析等。
3. 将仿真结果与实际数据或理论进行对比,验证仿真模型的准确性。
实验步骤:1. 打开仿真软件,创建一个新项目。
2. 在建模界面,根据实验需求创建仿真模型。
3. 设置仿真参数,启动仿真。
4. 观察仿真结果,进行数据分析。
5. 将仿真结果与实际数据或理论进行对比,验证仿真模型的准确性。
6. 完成实验报告。
实验结果与分析:1. 通过本次实验,掌握了仿真软件的基本操作,包括建模、仿真、分析等。
2. 在建模过程中,学会了创建实体、连接器、传感器等,并能够进行模型的修改、删除、复制等操作。
3. 在仿真过程中,成功设置了仿真参数,启动了仿真,并观察到了仿真结果。
4. 在分析过程中,运用了仿真软件提供的分析工具,对仿真结果进行了数据分析,并与实际数据或理论进行了对比,验证了仿真模型的准确性。
matlab仿真实验报告,Matlab仿真及其应用实验报告.doc

matlab仿真实验报告,Matlab仿真及其应⽤实验报告.doc Matlab仿真及其应⽤ 实验报告温州⼤学物理与电⼦信息⼯程学院Matlab仿真及其应⽤ 实验报告课程名称:Matlab仿真及其应⽤班 级:10电信姓名:吴** 学号:1011000****实验地点:5B305⽇期:12.25实验⼆ Matlab 基本编程基础[实验⽬的和要求]熟悉MATLAB环境与⼯作空间熟悉变量与矩阵的输⼊、矩阵的运算熟悉M⽂件与M函数的编写与应⽤熟悉MATLAB控制语句与逻辑运算掌握if语句、switch语句、try语句的使⽤。
掌握利⽤for语句、while语句实现循环结构的⽅法。
[实验内容]1⾏100列的Fibonacc 数组a,a(1)=a(2)=1,a(i)=a(i-1)+a(i-2),⽤for循环指令来寻求该数组中第⼀个⼤于10000的元素,并之处其位置i。
编写M函数表⽰曲线以及它的包络线,并从命令窗⼝输⼊命令语句绘制曲线。
t的取值范围是[0,4π]。
设,编写⼀个M函数⽂件,使得调⽤f(x)时,x可⽤矩阵代⼊,得出的f(x)为同阶矩阵。
根据,求时的最⼤n值;与(1)的n值对应的y值。
已知求中,最⼤值、最⼩值、各数之和,以及正数、零、负数的个数。
输⼊⼀个百分制成绩,要求输出成绩等级A,B,C,D,E。
其中,90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
求分段函数的值。
⽤if语句实现输出x=-5.0, -3.0, 1.0, 2.0, 2.5, 3.0, 5.0时的y值。
编写⼀M函数,实现近似计算指数,其中x为函数参数输⼊,当n+1步与n步的结果误差⼩于0.00001时停⽌。
编写⼀M函数,a和x作为M函数参数输⼊,函数⾥⾯分别⽤if结构实现函数表⽰实验结果及分析:1.a=ones(1,100); %定义数组for i=3:100a(i)=a(i-1)+a(i-2);if(a(i)>10000)a(i),break;endend ,i2.function y=ff(t)y1=exp(-t/3);y2=exp(-t/3).*sin(3*t); y=[y1;y2]3.function y=f(x);a=input('输⼊a值:');x=input('输⼊x值:');if(x<=-a)y=-1;elseif(x-a)y=x/a;elsey=1;endend4.for n=1:100f(n)=1./(2*n-1);y=sum(f)if y>=3my=y-f(n)breakendendmy5.f(1)=1,f(2)=0,f(3)=1; for n=4:100f(n)=f(n-1)-2*f(n-2)+f(n-3);enda=sum(f);b=max(f);c=min(f);p=f==0,d=sum(p);%p等于f为0的个数p1=f>0,e=sum(p1);p2=f<0,f=sum(p2);a,b,c,d,e,f6.clear;n=input('输⼊成绩:');m=floor(n/10);%取整switch mcase num2cell(9:10)disp('A'); %显⽰在控制框case 8disp('B');case 7disp('C');case 6disp('D');case num2cell(0:5)disp('E');otherwisedisp('error')end7.function y=ex3_4(x)for i=1:length(x)if (x(i)<0)&(x(i)~=-3)y(i)=x(i)^2+x(i)-6elseif (x(i)>=0)&(x(i)<5)&(x(i)~=2)&(x(i)~=3) y(i)=x(i)^2-5*x(i)+6else y(i)=x(i)^2-x(i)-1 endendy8.function t=ex3_4(x) n=0;t=1;y=1;x=input(‘’);while y>=0.00001n=n+1;y=x^n/factorial(n);t=t+y;endn9.function y=f(x);a=input('输⼊a值:'); x=input('输⼊x值:'); if。
自动控制原理MATLAB仿真实验报告

实验一 典型环节的MATLAB 仿真 一、实验目的1.熟悉MATLAB 桌面和命令窗口,初步了解SIMULINK 功能模块的使用方法。
2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。
3.定性了解各参数变化对典型环节动态特性的影响。
二、实验内容① 比例环节1)(1=s G 和2)(1=s G ;Simulink 图形实现:示波器显示结果:② 惯性环节11)(1+=s s G 和15.01)(2+=s s GSimulink 图形实现:示波器显示结果:③ 积分环节s s G 1)(1Simulink 图形实现:示波器显示结果:④ 微分环节s s G )(1Simulink 图形实现:波器显示结果:⑤ 比例+微分环节(PD )2)(1+=s s G 和1)(2+=s s G1)、G1(s )=s+2Simulink 图形实现:示波器显示结果:2)、G2(s)=s+1 Simulink图形实现:示波器显示结果:⑥ 比例+积分环节(PI )s s G 11)(1+=和s s G 211)(2+=1)、G1(1)=1+1/sSimulink 图形实现:示波器显示结果:2)G2(s)=1+1/2s Simulink图形实现:示波器显示结果:三、心得体会通过这次实验我学到了很多,对课本内容加深了理解,熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法,加深对各典型环节响应曲线的理解,这为对课程的学习打下了一定基础。
实验二线性系统时域响应分析一、实验目的1.熟练掌握step( )函数和impulse( )函数的使用方法,研究线性系统在单位阶跃、单位脉冲及单位斜坡函数作用下的响应。
2.通过响应曲线观测特征参量ζ和nω对二阶系统性能的影响。
3.熟练掌握系统的稳定性的判断方法。
二、实验内容1.观察函数step( )的调用格式,假设系统的传递函数模型为243237()4641s s G s s s s s ++=++++绘制出系统的阶跃响应曲线?2.对典型二阶系统222()2n n n G s s s ωζωω=++1)分别绘出2(/)n rad s ω=,ζ分别取0,0.25,0.5,1.0和2.0时的单位阶跃响应曲线,分析参数ζ对系统的影响,并计算ζ=0.25时的时域性能指标,,,,p r p s ss t t t e σ。
计算机仿真实验报告 MATLAB

注:以下所有程序均在MATLAB7.0下运行通过。
实验一MATLAB语言编程一、实验目的:熟悉MATLAB语言及其环境,掌握编程方法。
要求认真听取实验指导老师讲解与演示。
二、具体实验内容、步骤、要求:1.运行交互式学习软件,学习MATLAB语言2.在MATLAB的命令窗口下键入如下命令:INTRO(注意:intro为一个用MATLAB语言编写的幻灯片程序,主要演示常用的MATLAB语句运行的结果。
)然后,根据显示出来的幻灯片右图按钮进行操作,可按START→NEXT→NEXT按钮一步步运行,观察。
3.自编程序并完成上机编辑,调试,运行,存盘:(1)、用MATLAB命令完成矩阵的各种运算。
例如:求出下列运算结果,并上机验证。
(1)A(:,1) %取矩阵A的第一列元素ans =11213141(2)A(2,:) %取矩阵A的第二行元素ans =21 22 23 24(3)A(1:2,2:3) %取矩阵A第一二行第二三列的元素ans =12 1322 23(4)A(2:3,2:3) %取矩阵A第二三行第二三列的元素ans =22 2332 33(5)A(:,1:2) %取矩阵A第一列与第二列元素ans =11 1221 2231 3241 42(6)A(2:3) %取矩阵A第二行与第三行的首列元素ans =21 31(7)A(:) %将矩阵A的所有元素按一列排列ans =11213141122232421323334314243444(8)A(:,:) %显示矩阵Aans =11 12 13 1421 22 23 2431 32 33 3441 42 43 44(9)ones(2,2) %建立一个两行两列的全1矩阵ans =1 11 1(10)eye(2) %建立一个二维的单位矩阵ans =1 00 1(2)、绘制数学函数的图形:例如:,理解数组运算与矩阵运算的功能。
MATLAB程序如下:t=0:0.1:8; %建立向量ty=1-2*exp(-t.*sin(t)); %计算向量t的函数向量yplot(t,y); %利用plot命令绘图xlabel('t');ylabel('y=1-2*e^(-t*sin(t))'); %注释横坐标与纵坐标图1.1 所对应的函数图像4.理解函数文件与命令文件的区别,并自编函数文件并调用。
matlab 仿真实验报告

matlab 仿真实验报告Matlab 仿真实验报告引言:在科学研究和工程应用中,仿真实验是一种非常重要的手段。
通过在计算机上建立数学模型和进行仿真实验,我们可以更好地理解和预测现实世界中的各种现象和问题。
Matlab作为一种强大的科学计算软件,被广泛应用于各个领域的仿真实验中。
本文将介绍我进行的一次基于Matlab的仿真实验,并对实验结果进行分析和讨论。
实验背景:在电子通信领域中,信号的传输和接收是一个重要的研究方向。
而在进行信号传输时,会受到各种信道的影响,如噪声、衰落等。
为了更好地理解信道的特性和优化信号传输方案,我进行了一次关于信道传输的仿真实验。
实验目的:本次实验的目的是通过Matlab仿真,研究不同信道条件下信号传输的性能,并对比分析不同传输方案的优劣。
实验步骤:1. 信道建模:首先,我需要建立信道的数学模型。
根据实际情况,我选择了常见的高斯信道模型作为仿真对象。
通过Matlab提供的函数,我可以很方便地生成高斯噪声,并将其加入到信号中。
2. 信号传输方案设计:接下来,我需要设计不同的信号传输方案。
在实验中,我选择了两种常见的调制方式:频移键控(FSK)和相移键控(PSK)。
通过调整不同的调制参数,我可以模拟不同的传输效果。
3. 信号传输仿真:在信道模型和传输方案设计完成后,我开始进行信号传输的仿真实验。
通过Matlab提供的信号处理函数,我可以很方便地生成调制后的信号,并将其传输到信道中。
4. 信号接收和解调:在信号传输完成后,我需要进行信号接收和解调。
通过Matlab提供的信号处理函数,我可以很方便地对接收到的信号进行解调,并还原出原始的信息信号。
5. 仿真结果分析:最后,我对仿真结果进行分析和讨论。
通过对比不同信道条件下的传输性能,我可以评估不同传输方案的优劣,并得出一些有价值的结论。
实验结果与讨论:通过对不同信道条件下的信号传输仿真实验,我得到了一些有价值的结果。
首先,我观察到在高斯噪声较大的信道条件下,PSK调制比FSK调制具有更好的抗干扰性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注:以下所有程序均在MATLAB7.0下运行通过。
实验一MATLAB语言编程一、实验目的:熟悉MATLAB语言及其环境,掌握编程方法。
要求认真听取实验指导老师讲解与演示。
二、具体实验内容、步骤、要求:1.运行交互式学习软件,学习MATLAB语言2.在MATLAB的命令窗口下键入如下命令:INTRO(注意:intro为一个用MATLAB语言编写的幻灯片程序,主要演示常用的MATLAB语句运行的结果。
)然后,根据显示出来的幻灯片右图按钮进行操作,可按START→NEXT→NEXT按钮一步步运行,观察。
3.自编程序并完成上机编辑,调试,运行,存盘:(1)、用MATLAB命令完成矩阵的各种运算。
例如:求出下列运算结果,并上机验证。
(1)A(:,1) %取矩阵A的第一列元素ans =11213141(2)A(2,:) %取矩阵A的第二行元素ans =21 22 23 24(3)A(1:2,2:3) %取矩阵A第一二行第二三列的元素ans =12 1322 23(4)A(2:3,2:3) %取矩阵A第二三行第二三列的元素ans =22 2332 33(5)A(:,1:2) %取矩阵A第一列与第二列元素ans =11 1221 2231 3241 42(6)A(2:3) %取矩阵A第二行与第三行的首列元素ans =21 31(7)A(:) %将矩阵A的所有元素按一列排列ans =11213141122232421323334314243444(8)A(:,:) %显示矩阵Aans =11 12 13 1421 22 23 2431 32 33 3441 42 43 44(9)ones(2,2) %建立一个两行两列的全1矩阵ans =1 11 1(10)eye(2) %建立一个二维的单位矩阵ans =1 00 1(2)、绘制数学函数的图形:例如:,理解数组运算与矩阵运算的功能。
MATLAB程序如下:t=0:0.1:8; %建立向量ty=1-2*exp(-t.*sin(t)); %计算向量t的函数向量yplot(t,y); %利用plot命令绘图xlabel('t');ylabel('y=1-2*e^(-t*sin(t))'); %注释横坐标与纵坐标图1.1 所对应的函数图像4.理解函数文件与命令文件的区别,并自编函数文件并调用。
命令文件可以理解为简单的M文件,命令文件中的变量都是全局变量。
函数文件是在命令文件的基础之上多添加了一行函数定义行,其代码组织结构和调用方式与对应的命令文件截然不同。
函数文件是以函数声明行“function...”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。
函数运行完毕之后,其定义的变量将从工作区间中清除。
而命令文件只是将一系列相关的代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。
而多数函数文件一般都有输入和输出变量,并见有返回结果。
举例如下:已知非线性方程组求系统在初始条件为的数值解。
1)定义方程组的m函数equ.mfunction xs=equ(xi)x=xi(1);y=xi(2);z=xi(3);xs=zeros(3,1);xs(1)=sin(x)+y^2+log(z)-7;xs(2)=3*x+2^y-z^3+1;xs(3)=x+y+z-5;2)方程组求解x0=[1 1 1];xyz=fsolve(@equ,x0)xyz =0.5991 2.3959 2.0050在调用fsolve命令求解方程时调用了自定义的equ函数。
5.学会通过Help,熟悉MATLAB中为用户提供的功能各异的函数与命令。
只需在MATLAB命令窗口中键入help 命令名或函数名,按回车键后即会显示该命令或函数的相关说明。
根据说明即可自学如何使用该命令或函数。
例如键入help eig实验二数值积分算法练习与函数调用一、实验目的:理解数值积分法,熟练掌握MATLAB的函数调用。
二、实验示例介绍:1.用Euler法求初值问题的数值解:设方程如下:取步长h=0.1,名为FZSYZ1.M上机用如下程序名FZSYZ1.M可求出数值解。
2.在MATLAB中提出了现成的数值积分函数,如ode1、ode23、ode45求解微分方程组,下面介绍ode23它为二阶/三阶的RKF方法在MATLAB的ToolBox。
文件夹中的MATLAB/funfun下的M文件,在此介绍其调用方法与应用示例如下:[t,x]=ode23(‘系统函数名’,)其中,系统函数名为描述系统状态方程的M函数的名称,该函数名在调用时应该用引号括起来(文件名字串),为起始与终止时间,为系统初始变量的值(列向量),为控制解的精度(缺省值为=在ode23中),trace为输出形式控制变量,非零则程序运行的每步都显示出来。
trace为缺省值时——不显示中间结果。
t为输出参数返回积分的时间离散值(列向量)。
X:输出参量,返回每个时间点值的解的列向量。
注意:系统函数的编写格式为固定的。
例如:若MATLAB求解初值问题的解,其方程如下:第一步:编写如下程序:function xdot=fun21(t,x)xdot=x-t^2并以fun21.m存盘。
第二步:编写如下程序并以fzsy22.m存盘。
t0=0;tf=3;tol=1e-6;x0=1;trace=1;[t,x]=ode23('fun21',t0,tf,tol,trace)plot(t,x)第三步:在命令窗口下运行fzsy21即可求出x的解,并画出曲线。
3.实验具体内容、步骤、要求:(1)运行交互式软件中函数调用,学习程序,(2)试将(2-2)方程改为用Euler编程求解,试比较用ode23求解结果。
MATLAB源程序如下:%ode23求解t0=0;tf=3;tol=1e-6;x0=1;trace=1;[t,x]=ode23('fun21',t0,tf,tol,trace);plot(t,x,'r');hold on;%Euler求解h1=0.1;t=[t0:h1:tf];n=length(t);u=x0;uu(1)=u;for i=2:ndu=u-t(i-1)^2;u=du*h1+u;uu(i)=u;endplot(t,uu,'b--');hold off;图2.1 式(2-2)用Euler编程与ode23算法求解结果(3)试将(2-1)方程改为用ode23算法调用求解,并试比较结果。
图2.2 式(2-1)用Euler编程与ode23算法求解结果从比较可知:Euler需要小步长,不能自动确定步长;ode23算法自动确定步长,如果误差小于指定的精度,进行下一步,否则缩小步长,因此ode23算法比Euler算法更为准确,但占用的计算时间更长。
(4)利用ode23或ode45求解线性时不变系统微分方程并绘制出的曲线。
式中MATLAB程序清单如下:%函数(y(t) ) ̇=Ay(t)function ys=fun22(t,y)ys=zeros(2,1);ys(1)=-0.5*y(1)+y(2);ys(2)=-y(1)-0.5*y(2);%利用ode45求解其数值解并作图t0=0;tf=4;tol=1e-6;y0=[0;1];trace=1;y=zeros(2,1);[t,y]=ode45('fun22',t0,tf,y0,tol,trace);plot(t,y(:,1),'r');hold on;plot(t,y(:,2),'b');hold off;图2.3 第(4)问利用ode45算法求解所得y(t)曲线(5)求出与的单位阶跃响应,并分别求出状态空间模型。
MATLAB程序清单如下:num1=[2];den1=[1 2 1];g1=tf(num1,den1);%构造连续传函G1(S)num2=[1];den2=[2 3 3 1];g2=tf(num2,den2);%构造连续传函G2(S)step(g1);hold on;%画出G1(S)的阶跃响应step(g2);hold off;%画出G2(S)的阶跃响应[A1,B1,C1,D1]=tf2ss(num1,den1)%得到G1(S)的状态空间描述[A2,B2,C2,D2]=tf2ss(num2,den2)%得到G2(S)的状态空间描述从MATLAB窗口中得到的结果可知,对应的状态空间模型为:对应的状态空间模型为:图2.4 传递函数G1(S)与G2(S)对应的单位阶跃响应选做题一:已知系统传递函数为求对应的零极点模型,绘制系统阶跃响应。
MATLAB程序清单如下:num=[200 400];den=conv([1 1],[1 10 42]);g=tf(num,den);%构造连续传递函数[z,p,k]=tf2zp(num,den)%将普通传函转化为零极点模型step(g);在MATLAB命令窗中显示如下结果:z =-2p =-5.0000 + 4.1231i-5.0000 - 4.1231i-1.0000k =200所以对应的零极点模型为。
图2.5 选做题一中的传递函数对应的单位响应曲线图选做题二:已知一个二阶系统为,分别取R=0与R=0.5时,系统模型取不同步长的数值解(h=0.5~0.001)。
MATLAB程序清单如下:function ys=cstep(t,y)R=0;ys=zeros(2,1);ys(1)=y(2);ys(2)=-2*R*y(2)-y(1);[t,y]=ode45(@cstep,[0:0.5:5],[100 0]);plot(t,y(:,1),'r--');hold on;tol=1e-6;trace=1;t0=0;tf=5;[t1,y1]=ode45('cstep',t0,tf,[100 0],tol,trace);plot(t1,y1(:,1),'b');hold off在MATLAB命令窗中显示如下结果:图2.6 R=0时的仿真图2.7 R=0.5时的仿真从图2.6与图2.7可以看出,步长越短,仿真结果越接近准确值。
当步长取0.5时,可以看到与步长取0.001时有明显偏离,而采取自动步长的ode45算法与步长取0.001的仿真结果一致。
(6)设方程式为用各种数值积分法与不同步长求方程式的数值解,并比较之。
MATLAB程序清单如下:%欧拉法求解子函数function [uu,t]=euler(t,h1,y0)n=length(t);u=y0;uu(1)=u;for i=2:ndu=-40*u;u=du*h1+u;uu(i)=u;end%主程序t0=0;tf=0.5;y0=2;h1=0.01;t1=[0:h1:1];[uu1,t1]=euler(t,h1,y0);%步长取0.01,用欧拉法求解plot(t1,uu1,'r');hold on;h2=0.001;%步长取0.01,用欧拉法求解t2=[0:h2:1];[uu2,t2]=euler(t2,h2,y0);plot(t2,uu2,'b');hold on;tol=1e-6;trace=1;u0=1;[t,u]=ode23('fun26',t0,tf,y0,tol,trace);%用ode23求解,步长自定plot(t,u,'g--');hold off;gridgtext('Euler0.01');gtext('Euler0.001');gtext('ode23');在MATLAB命令窗中显示如下结果:图2.8 采用不同算法对第(6)题微分方程求解结果示意图从图2.5可以看出,采用欧拉法求解时,步长选取越短,其结果越接近真实值,选用龙阶-库塔法时,由于程序自动变步长直到达到预设精度,因此利用该方法求得的结果较准确。