飞行仿真实验报告一彭尧坤35050109.docx

上传人:b****2 文档编号:14334 上传时间:2022-09-30 格式:DOCX 页数:19 大小:390.08KB
下载 相关 举报
飞行仿真实验报告一彭尧坤35050109.docx_第1页
第1页 / 共19页
飞行仿真实验报告一彭尧坤35050109.docx_第2页
第2页 / 共19页
飞行仿真实验报告一彭尧坤35050109.docx_第3页
第3页 / 共19页
飞行仿真实验报告一彭尧坤35050109.docx_第4页
第4页 / 共19页
飞行仿真实验报告一彭尧坤35050109.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

飞行仿真实验报告一彭尧坤35050109.docx

《飞行仿真实验报告一彭尧坤35050109.docx》由会员分享,可在线阅读,更多相关《飞行仿真实验报告一彭尧坤35050109.docx(19页珍藏版)》请在冰豆网上搜索。

飞行仿真实验报告一彭尧坤35050109.docx

飞行仿真实验报告一彭尧坤35050109

 

航空科学与工程学院

 

《飞行仿真实验》

实验报告

(一)

 

*******

学号:

********

专业方向:

飞行力学与控制

*******

2008年3月9日

实验一简单二阶系统仿真实验

实验所属课程名称:

飞行仿真(FlightSimulation)

一.实验目的

了解仿真技术的主要内容,通过简单的入门训练,让学生动手建模和解算,初步了解仿真的主要过程,以形成计算机仿真的初步感性认识。

二.实验内容及步骤

1.了解仿真技术概述和相关文献,建立简单的弹簧阻尼二阶系统数学模型;

2.分别采用欧拉法和龙格库塔法建立给定系统的计算机离散仿真解算模型;

3.使用C/C++语言编写非实时仿真计算程序,包括上面两种数值积分算法(欧拉法和龙格库塔法)在两种标准输入下(脉冲和阶跃)的仿真运算,调试并运行程序;

4.合理选取数值积分的步长,选用熟悉的曲线绘图工具打印上面四种时间响应仿真计算结果,分析比较两种算法的特点;

5.根据响应的结果,通过作图法求解出所选二阶系统动态特性的参数(周期、半衰期、超调量、调节时间等)。

6.修改物理系统参数重新进行仿真解算,观察系统时间响应随系统参数的变化情况。

打印典型结果并说明。

三、实验要求及考核方式

1.要求学生直接上机独立列写方程,编写计算机程序解算,得出正确的数据结果和曲线图。

注意数据单位、曲线图示等的规范化。

2.根据实验内容的6个步骤,按照给定的封面格式,分6个主要部分撰写实验报告。

严禁抄袭!

3.本次实验报告占总成绩的40%。

四、实验报告正文

1.数学模型的建立:

图中:

F(t)-------作用于系统的外力;

y(t)-------质量块m的位移;

k-------弹簧比例系数;

f-------阻尼系数。

如上图所示,在外力F(t)的作用下,如果弹簧恢复力和阻尼力与F(t)不能平衡,则质量块m将有加速度,进而使速度和位移发生变化。

根据牛顿第二定律,可得:

2.用数值分析方法建立计算机离散仿真解算模型:

将上述模型方程转换可得:

令:

=

,则有

化为一阶方程组的初值问题

a.四阶龙格-库塔格式

其中,

b.改进的欧拉格式

预报

校正

3.程序的编写及运行:

阶跃输入的龙格-库塔格式程序:

#include

main()

{

doubleshuru(floata,floatb,floatc);

intN,i,n,j,k,r,s;

floatt0,h,x1,x2;

floatarray[20][8];

doubley,z,y0,z0,K1,K2,K3,K4,L1,L2,L3,L4;

y0=0;t0=0;z0=0;h=0.1;N=80;

for(i=1;i<=N;i++)

{x1=t0+1/2*h;x2=t0+h;

K1=z0;L1=shuru(t0,y0,z0);

K2=z0+h/2*L1;L2=shuru(x1,y0+1/2*h*K1,z0+1/2*h*L1);

K3=z0+h/2*L2;L3=shuru(x1,y0+1/2*h*K2,z0+1/2*h*L2);

K4=z0+h*L3;L4=shuru(x2,y0+h*K3,z0+h*L3);

y=y0+h/6*(K1+2*K2+2*K3+K4);

z=z0+h/6*(L1+2*L2+2*L3+L4);

if(i%4!

=0)

{n=i%4;k=2*(n-1);j=i/4;

array[j][k]=i;

k=k+1;

array[j][k]=y;

}

if(i%4==0)

{j=i/4;

array[j-1][6]=i;

array[j-1][7]=y;

}

t0=x2;y0=y;z0=z;}

for(r=0;r<=19;r++)

{

for(s=0;s<=7;s++)

printf("%5.4f",array[r][s]);

printf("\n");

}

}

doubleshuru(floata,floatb,floatc)

{

floatA,B,C,F,z,m,k,f;

m=3.0,k=5.0,f=0.8;

F=5.0;

A=F/m;B=k/m;C=f/m;

z=A-B*b-C*c;

return(z);

}

脉冲输入的龙格-库塔格式程序:

#include

main()

{

doubleshuru(floata,floatb,floatc);

intN,i,n,j,k,r,s;

floatt0,h,x1,x2;

floatarray[20][8];

doubley,z,y0,z0,K1,K2,K3,K4,L1,L2,L3,L4;

y0=0;t0=0;z0=0;h=0.1;N=80;

for(i=1;i<=N;i++)

{x1=t0+1/2*h;x2=t0+h;

K1=z0;L1=shuru(t0,y0,z0);

K2=z0+h/2*L1;L2=shuru(x1,y0+1/2*h*K1,z0+1/2*h*L1);

K3=z0+h/2*L2;L3=shuru(x1,y0+1/2*h*K2,z0+1/2*h*L2);

K4=z0+h*L3;L4=shuru(x2,y0+h*K3,z0+h*L3);

y=y0+h/6*(K1+2*K2+2*K3+K4);

z=z0+h/6*(L1+2*L2+2*L3+L4);

if(i%4!

=0)

{n=i%4;k=2*(n-1);j=i/4;

array[j][k]=i;

k=k+1;

array[j][k]=y;

}

if(i%4==0)

{j=i/4;

array[j-1][6]=i;

array[j-1][7]=y;

}

t0=x2;y0=y;z0=z;}

for(r=0;r<=19;r++)

{

for(s=0;s<=7;s++)

printf("%5.4f",array[r][s]);

printf("\n");

}

}

doubleshuru(floata,floatb,floatc)

{

floatA,B,C,F,z,m,k,f;

m=3.0,k=5.0,f=0.8;

if(a<0.1)F=5.0;

elseF=0;

A=F/m;B=k/m;C=f/m;

z=A-B*b-C*c;

return(z);

}

阶跃输入的欧拉格式程序:

#include

main()

{

doubleshuru(floata,floatb,floatc);

intN,i,n,j,k,r,s;

floatt0,t1,h;

floatarray[20][8];

doubley,z,y0,z0,y1,z1;

y0=0;t0=0;z0=0;h=0.1;N=80;

for(i=1;i<=N;i++)

{t1=t0+h*i;

y1=y0+h*z0;

z1=z0+h*shuru(t0,y0,z0);

y=y0+h/2*(z0+z1);

z=z0+h/2*(shuru(t0,y0,z0)+shuru(t1,y1,z1));

if(i%4!

=0)

{n=i%4;k=2*(n-1);j=i/4;

array[j][k]=i;

k=k+1;

array[j][k]=y;

}

if(i%4==0)

{j=i/4;

array[j-1][6]=i;

array[j-1][7]=y;

}

t0=t1;y0=y;z0=z;}

for(r=0;r<=19;r++)

{

for(s=0;s<=7;s++)

printf("%5.4f",array[r][s]);

printf("\n");

}

}

doubleshuru(floata,floatb,floatc)

{

floatA,B,C,F,z,m,k,f;

m=3.0,k=5.0,f=0.8;

F=5.0;

A=F/m;B=k/m;C=f/m;

z=A-B*b-C*c;

return(z);

}

脉冲输入的欧拉格式程序:

#include

main()

{

doubleshuru(floata,floatb,floatc);

intN,i,n,j,k,r,s;

floatt0,t1,h;

floatarray[20][8];

doubley,z,y0,z0,y1,z1;

y0=0;t0=0;z0=0;h=0.1;N=80;

for(i=1;i<=N;i++)

{t1=t0+h*i;

y1=y0+h*z0;

z1=z0+h*shuru(t0,y0,z0);

y=y0+h/2*(z0+z1);

z=z0+h/2*(shuru(t0,y0,z0)+shuru(t1,y1,z1));

if(i%4!

=0)

{n=i%4;k=2*(n-1);j=i/4;

array[j][k]=i;

k=k+1;

array[j][k]=y;

}

if(i%4==0)

{j=i/4;

array[j-1][6]=i;

array[j-1][7]=y;

}

t0=t1;y0=y;z0=z;}

for(r=0;r<=19;r++)

{

for(s=0;s<=7;s++)

printf("%5.4f",array[r][s]);

printf("\n");

}

}

doubleshuru(floata,floatb,floatc)

{

floatA,B,C,F,z,m,k,f;

m=3.0,k=5.0,f=0.8;

if(a<0.1)F=5.0;

elseF=0;

A=F/m;B=k/m;C=f/m;

z=A-B*b-C*c;

return(z);

}

4.程序运行结果及图形反应:

阶跃输入的龙格-库塔格式:

a.运行结果

b.图形反应

脉冲输入的龙格-库塔格式

a.运行结果

b.图形反应

阶跃输入的欧拉格式

a.运行结果

b.图形反应

脉冲输入的欧拉格式

a.运行结果

b.图形反应

5.系统动态特性参数

由于在进行程序编译运行时,出现了由于要反应的值太多,导致屏幕无法显示更多的数据,为保证数据的连续性,故只让其进行了80次的迭代计算,从而数值点个数较少,导致在响应图中无法完全反应整个过程的趋势,但是从有限的数据点,还是给我们提供了一些有用的信息,而且与物理事实吻合较好。

阶跃响应:

延迟时间

0.9(s)

上升时间

0.7(s)

峰值时间

2.4(s)

超调量

80%

脉冲响应:

周期T:

5.0(s)

半衰期t:

8.0(s)

6.系统响应随参数的变化(以脉冲响应为例)

随质量m的变化:

m=1时,

m=3时,

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1