实验操纵系统数字仿真之数值积分法.docx
- 文档编号:8330799
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:1.05MB
实验操纵系统数字仿真之数值积分法.docx
《实验操纵系统数字仿真之数值积分法.docx》由会员分享,可在线阅读,更多相关《实验操纵系统数字仿真之数值积分法.docx(15页珍藏版)》请在冰豆网上搜索。
实验操纵系统数字仿真之数值积分法
实验:
操纵系统数字仿真之数值积分法
实验目的:
学会并把握数值积分法的大体原理和方式,了解欧拉法,梯型法,龙格-库塔法的区别,并熟练地利用这些方式。
观看并分析整体离散法、分环节离散法、欧拉法、梯形法、龙格-库塔法这几种方式原理上的不同,分析他们各自的优缺点。
实验原理:
欧拉法:
欧拉法是最简单的单步法,它是一阶的,精度较差。
但由于公式简单,计算方便,也易于明白得,因此在讨论微分方程初值问题的数值解时通常先讨论欧拉法。
梯形法:
梯形法与欧拉法相较,梯形法的e要比欧拉法的e更接近实际值,它舍弃的部份更少,它在每一步顶用了两个点的输入,使得计算加倍精准。
龙格-库塔法:
龙格—库塔法是采纳间接利用台劳展开式的思路,即用在n个点上的函数值的线性组合来代替的导数,然后按台劳展开式确信其中的系数,以提高算法的阶数。
如此既能幸免计算函数的导数,同时又保证了计算精度。
由于龙格—库塔法具有许多优势,故在许多仿真程序包中,它是一个最大体的算法之一。
实验进程:
分环节离散法得出的响应曲线:
整体离散法得出的响应曲线:
用一阶欧拉法得出的系统响应曲线:
欧拉法是求出当前系统的斜率(转变规律),假设那个转变规律在下一次转变前不改变。
那么系统下一次值就能够够通过1.当前值2.斜率3.步长来确信。
比如说系统当前值x(t),斜率x‘(t),仿真步长dt。
那么x(t+dt)=x(t)+x’(t)*dt
程序代码:
clc;closeall;clearall;
sampleTime=0.1;
simuTime=2000;
t=sampleTime:
sampleTime:
simuTime;
K=1.2;n=3;T=20;
[kp,ki]=PID_Gain(1.2,20,3,0);
x=zeros(1,4);
fori=1:
fix(simuTime/sampleTime)
u(i)=1;
end
fori=1:
fix(simuTime/sampleTime)
e=ST_RK_1(x,u(i),kp,ki,T,K,n);
x=x+e*sampleTime;
y(i)=x(4);
end
plot(t,y);
text=Tvalue1(y,sampleTime);
legend(text);
自程序ST_RK_1代码:
functionE=ST_RK_1(x,u,kp,ki,T,K,n)
E
(1)=(u-x(4))*ki;
E
(2)=(x
(1)+kp*E
(1)/ki)*K/T-x
(2)/T;
E(3)=x
(2)/T-x(3)/T;
E(4)=x(3)/T-x(4)/T;
end
用梯形法得出系统响应曲线:
假设采纳欧拉法,误差为红色曲线围成的面积,而若是用梯形法,误差减少为蓝色曲线围成的面积。
同时,要求出蓝色曲线围成的面积,就要先出下一个点的值。
因此增加了计算量。
算法:
先用欧拉法求出下一个点的值,用下一个点的值求那个点的斜率,接着就能够求出梯形的面积。
用新的面积(代表斜率)求出下一个点的值。
实验程序代码(与之前相同的部份没有复制):
u(i+1)=u(i);
fori=1:
fix(simuTime/sampleTime)
x0=x;
e1=ST_RK_1(x,u(i),kp,ki,T,K);
x=x0+e1*sampleTime;
e2=ST_RK_1(x,u(i+1),kp,ki,T,K);
e=(e1+e2)/2;
x=x0+e*sampleTime;
y(i)=x(4);
end
程序响应曲线:
用龙格-库塔法得出的系统响应曲线:
当采取龙格—库塔法(四阶)时,需要用到多个系统斜率。
具体原理不在论述。
程序代码:
u(i+1)=u(i);
fori=1:
fix(simuTime/sampleTime)
x0=x;
e1=ST_RK_1(x,u(i),kp,ki,T,K);
x=x0+e1*sampleTime/2;
e2=ST_RK_1(x,(u(i+1)+u(i))/2,kp,ki,T,K);
x=x0+e2*sampleTime/2;
e3=ST_RK_1(x,(u(i+1)+u(i))/2,kp,ki,T,K);
x=x0+e3*sampleTime;
e4=ST_RK_1(x,u(i+1),kp,ki,T,K);
e=(e1+e4)/6+(e2+e3)/3;
x=x0+e*sampleTime;
y(i)=x(4);
end
系统的响应曲线:
从之前的几个曲线来看,除散布离散法与step(视为标准响应曲线)相差比较大之外,剩余的曲线与标准曲线的区别不大,误差约为千分之一。
接下来咱们要考虑,随着仿真步距增大,系统失真速度的快慢。
系统程序代码:
clc;closeall;clearall;
sampleTime=0.1;
simuTime=500;
t=sampleTime:
sampleTime:
simuTime;
K=1.2;n=3;T=20;
[kp,ki]=PID_Gain(1.2,20,3,0);
x=zeros(1,4);
fori=1:
fix(simuTime/sampleTime)
u(i)=1;
end
u(i+1)=u(i);
fori=1:
fix(simuTime/sampleTime)
e=ST_RK_1(x,u(i),kp,ki,T,K,n);
x=x+e*sampleTime;
y1(i)=x(4);
end
x=zeros(1,4);
fori=1:
fix(simuTime/sampleTime)
x0=x;
e1=ST_RK_1(x,u(i),kp,ki,T,K);
x=x0+e1*sampleTime;
e2=ST_RK_1(x,u(i+1),kp,ki,T,K);
e=(e1+e2)/2;
x=x0+e*sampleTime;
y2(i)=x(4);
end
x=zeros(1,4);
fori=1:
fix(simuTime/sampleTime)
x0=x;
e1=ST_RK_1(x,u(i),kp,ki,T,K);
x=x0+e1*sampleTime/2;
e2=ST_RK_1(x,(u(i+1)+u(i))/2,kp,ki,T,K);
x=x0+e2*sampleTime/2;
e3=ST_RK_1(x,(u(i+1)+u(i))/2,kp,ki,T,K);
x=x0+e3*sampleTime;
e4=ST_RK_1(x,u(i+1),kp,ki,T,K);
e=(e1+e4)/6+(e2+e3)/3;
x=x0+e*sampleTime;
y3(i)=x(4);
end
holdon;
plot(t,y1);plot(t,y2);plot(t,y3);
text=[];
text=strvcat(text,Tvalue1(y1,sampleTime));
text=strvcat(text,Tvalue1(y2,sampleTime));
text=strvcat(text,Tvalue1(y3,sampleTime));
legend(text);
title(['仿真时刻=',str1]);
依照上图,咱们能够看出当仿真步距比较小的时候,数值积分法经常使用的三种方式得出的实验精度差不多。
可是当仿真步距慢慢增大,计算量较小,解题阶次较低的欧拉法最先显现失真,接着是梯形法。
贴上一张整体离散法,仿真步距为20时:
当仿真步距为1时,欧拉法的稳固时刻达到199s。
当仿真步距为5时,分环节离散法稳固时刻超过200s。
仿真步距为10和20时,整体离散法和梯形法稳固时刻均改变,梯形法改变量略低于整体离散法。
要说一句的是:
那个地址的整体离散法用的n为2。
当n更大时,引入的计算会更多,可是计算更精准。
当系统的阶次提高时,系统的响应别离为:
当输入为
fori=1:
fix(simuTime/sampleTime)
u(i)=0.8+0.0002*i;
end
fori=1:
fix(simuTime/sampleTime)
u(i)=1+0.0002*i-0.0000002*i.^2;
end
响应曲线:
咱们假设龙格-库塔为标准的响应曲线,能够看出欧拉法和梯形法与龙格法相差并非大。
自己设计的方式:
我以为在大多数情形下,输入为阶越信号或阶越信号加上一点白噪声,或说信号转变稳固在一个较小范围内。
因此系统转变的斜率一样会慢慢变小。
如:
因为用梯形法算出的值大多数情形下会小于实际值(除非斜率为一个定值),我假想利用高中的不等式变换,将e略微的扩大,使误差相抵,减少一部份。
编程只要把梯形法中的一句话
e=(e1+e2)/2;
改成:
e=sqrt((e1.^2+e2.^2)/2);
实际成效图:
得出系统发散的结论,说明那个方式不行。
实验结果分析:
其实数值积分法的要领是如何使求出的e逼近实际值。
用欧拉法会造成相对来讲十分大的误差,梯形法次之,龙格-库塔法最接近实际的e值。
因为增加仿真步距会使得系统的准确性下降,当利用相同的较大的仿真步距时,系统反映的越准确,系统在相同的较小的仿真步距下也应该更准确。
那么精准性排名为:
欧拉法小于分环节离散法小于梯形法小于n取2时整体离散法小于四阶龙格-库塔法。
在利用数值积分法时,若是求e的时候显现的误差较小时,对系统的阻碍较小。
(比如说龙格-库塔法和欧拉法之间的误差)若是是较大的误差,如
和
的误差,可致使系统直接发散。
论达到相同的精准度时需要的计算量,龙格库塔法小于梯形法小于欧拉法。
换句话说,在次数足够多时,做了相同次计算量的龙格库塔法要比梯形法和欧拉法精准。
(假设龙格库塔每次循环需要4次计算,梯形法需要2次计算,欧拉法需要1次计算)
实验中显现的问题:
问题有两个:
1.梯形法和龙格库塔法是因为处置高阶输入信号时能够更准确,但是在我做的两次实验中,当输入高阶信号时,欧拉法和梯形法能够跟得上龙格-库塔法的转变规律,而且稳固时刻也只差一个仿真步距,什么缘故?
是因为我做的实验次数不够多仍是因为我的明白得错误。
2.在自己设计仿真方式时,我把误差e估量得偏大致使系统发散,能够明白得成偏大的值通过不断累计,在后时期时造成庞大误差。
而当我把e估量得偏小:
e=sqrt(e1.*e2)时(能够证明那个几何平均根要比算术平均根(e1+e2)/2要小。
但是我发觉系统仍是发散的。
这是什么缘故?
而且两个图像转变规律很相似。
(当e取sqrt(e1.*e2)时)
二者之间的误差(平方和-几何平均值)(系统比较接近。
十的四次方和十的八次方相较)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 操纵 系统 数字 仿真 数值 积分