打靶法含Matlab程序.docx
- 文档编号:989877
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:7
- 大小:38.30KB
打靶法含Matlab程序.docx
《打靶法含Matlab程序.docx》由会员分享,可在线阅读,更多相关《打靶法含Matlab程序.docx(7页珍藏版)》请在冰豆网上搜索。
打靶法含Matlab程序
西京学数学软件实验任务书
课程名称
数学软件实验
班级
数0901
学号
0912020107
姓名
李亚强
实验课题
微分方程组边值问题数值算法(打靶法,有限差分法)
实验目的
熟悉微分方程组边值问题数值算法(打靶法,有限差分法)
实验要求
运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成
实验内容
微分方程组边值问题数值算法(打靶法,有限差分法)
成绩
教师
动方向控制减速的推力,主要的控制量只有一个减速推力,减速还会消耗燃料让登月器的质量减小。
所以在极坐标下系统的状态就就是x‘=[质量m,角度theta,高度r,角速度omega,径速度v]这五个量,输入就就是减速力F。
先列微分方程,dx/dt=f(x)+B*F,其中x就是5*1的列向量,质量dm/dt=-F/2940,剩下几个翻下极坐标的手册。
把这个动力学模型放到matlab里就能求解了,微分方程数值解用ode45。
第一问F=0,让您求椭圆轨道非常容易。
注意附件1里说15公里的时候速度就是1、7km/s。
算完以后验证一下对不对,对的话就就是她了,不对的话说明这个椭圆轨道有进动,到时再说。
(2) 算出轨道就能计算减速力了。
这时候您随便给个常数减速力到方程里飞船八成都能降落,但不就是最优解。
想想整个过程,开始降落之前飞船总机械能就那么多,您需要对飞船做负功让机械能减到0。
题目里写发动机喷出翔的相对速度就是一定的,直觉告诉我飞船速度快的时候多喷一些速度慢的时候少喷一些,可以提高做负功的效率。
但就是多喷也不能超过上限7500N,所以这就就是一个带约束优化问题,matlab里边有专用的优化函数,用fmincon就好。
找出最优解以后把过程画出来,瞧瞧F可不可以就是那5个状态量的线性组合,如果就是的话就非常happy,不就是的话再说。
三四阶段您可以扯点图像识别,什么二维复利叶分解找平坦区域,怎么一边下降一边根据自身状态调整路径之类的。
五六阶段还真不知道说什么。
一二阶段肯定就是重点啦
(3) 误差分析其实还挺难的。
可能的误差来源就是地球的引力,月亮绕地球向心加速度,太阳的引力(可能会很小),对自身速度、角度的测量误差(比如您测出自身当前速度100m/s但实际上就是105m/s),控制的时候F大小以及角度的误差(比如您想朝正前方向喷2000N但实际上偏了2度而且F=2010N之类)。
上一问已经求出了最优控制策略与飞船路线,把这些扰动加进去以后算出新的路线减掉理想路线求偏差,然后随便用个卡尔曼滤波器把误差给校正
All for Joy
2014/9/13 11:
14:
38
老师的思路,求大神解答给我一份呀
实验二十七实验报告
1、实验名称:
微分方程组边值问题数值算法(打靶法,有限差分法)。
2、实验目的:
进一步熟悉微分方程组边值问题数值算法(打靶法,有限差分法)。
3、实验要求:
运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成程序设计。
4、实验原理:
1.打靶法:
对于线性边值问题
(1)
假设就是一个微分算子使:
则可得到两个微分方程:
,
,
(2)
,
,(3)
方程
(2),(3)就是两个二阶初值问题、假设就是问题
(2)的解,就是问题(3)的解,且,则线性边值问题
(1)的解为:
。
2.有限差分法:
基本思想就是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程与定解条件中的微商用差商来近似,积分用积分与来近似,于就是原微分方程与定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。
5、实验内容:
%线性打靶法
function[k,X,Y,wucha,P]=xxdb(dydx1,dydx2,a,b,alpha,beta,h)
n=fix((b-a)/h);X=zeros(n+1,1);CT1=[alpha,0];
Y=zeros(n+1,length(CT1));Y1=zeros(n+1,length(CT1));
Y2=zeros(n+1,length(CT1));
X=a:
h:
b;
Y1(1,:
)=CT1;
CT2=[0,1];Y2(1,:
)=CT2;
fork=1:
n
k1=feval(dydx1,X(k),Y1(k,:
))
x2=X(k)+h/2;y2=Y1(k,:
)'+k1*h/2;
k2=feval(dydx1,x2,y2);
k3=feval(dydx1,x2,Y1(k,:
)'+k2*h/2);
k4=feval(dydx1,X(k)+h,Y1(k,:
)'+k3*h);
Y1(k+1,:
)=Y1(k,:
)+h*(k1'+2*k2'+2*k3'+k4')/6,k=k+1;
end
u=Y1(:
1)
fork=1:
n
k1=feval(dydx2,X(k),Y2(k,:
))
x2=X(k)+h/2;y2=Y2(k,:
)'+k1*h/2;
k2=feval(dydx2,x2,y2);
k3=feval(dydx2,x2,Y2(k,:
)'+k2*h/2);
k4=feval(dydx2,X(k)+h,Y2(k,:
)'+k3*h);
Y2(k+1,:
)=Y2(k,:
)+h*(k1'+2*k2'+2*k3'+k4')/6,k=k+1;
end
v=Y2(:
1)
Y=u+(beta-u(n+1))*v/v(n+1)
fork=2:
n+1
wucha(k)=norm(Y(k)-Y(k-1));k=k+1;
end
X=X(1:
n+1);Y=Y(1:
n+1,:
);k=1:
n+1;wucha=wucha(1:
k,:
);
P=[k',X',Y,wucha'];
plot(X,Y(:
1),'ro',X,Y1(:
1),'g*',X,Y2(:
1),'mp')
xlabel('轴\itx');ylabel('轴\ity')
legend('就是边值问题的数值解y(x)的曲线','就是初值问题1的数值解u(x)的曲线','就是初值问题2的数值解v(x)的曲线')
title('用线性打靶法求线性边值问题的数值解的图形')
%有限差分法
function[k,A,B1,X,Y,y,wucha,p]=yxcf(q1,q2,q3,a,b,alpha,beta,h)
n=fix((b-a)/h);X=zeros(n+1,1);
Y=zeros(n+1,1);A1=zeros(n,n);
A2=zeros(n,n);A3=zeros(n,n);A=zeros(n,n);B=zeros(n,1);
fork=1:
n
X=a:
h:
b;
k1(k)=feval(q1,X(k));A1(k+1,k)=1+h*k1(k)/2;
k2(k)=feval(q2,X(k));
A2(k,k)=-2-(h、^2)*k2(k);
A3(k,k+1)=1-h*k1(k)/2;k3(k)=feval(q3,X(k));
end
fork=2:
n
B(k,1)=(h、^2)*k3(k);
end
B(1,1)=(h、^2)*k3
(1)-(1+h*k1
(1)/2)*alpha;
B(n-1,1)=(h、^2)*k3(n-1)-(1+h*k1(n-1)/2)*beta;
A=A1(1:
n-1,1:
n-1)+A2(1:
n-1,1:
n-1)+A3(1:
n-1,1:
n-1);
B1=B(1:
n-1,1);
Y=A\B1;Y1=Y';y=[alpha;Y;beta];
fork=2:
n+1
wucha(k)=norm(y(k)-y(k-1));k=k+1;
end
X=X(1:
n+1);y=y(1:
n+1,1);k=1:
n+1;
wucha=wucha(1:
k,:
);plot(X,y(:
1),'mp')
xlabel('轴\itx');ylabel('轴\ity'),legend('就是边值问题的数值解y(x)的曲线')
title('用有限差分法求线性边值问题的数值解的图形'),
p=[k',X',y,wucha'];
打靶法
3、Matlab
源代码:
创建M文件:
function
ys=dbf(f,a,b,alfa,beta,h,eps)
ff=@(x,y)[y
(2),f(y
(1),y
(2),x)];
xvalue=a:
h:
b;
%x取值范围
n=length(xvalue)
s0=a-0、01;
%选取适当的s的初值
x0=[alfa,s0];
%
迭代初值
flag=0;
%用于判断精度
y0=rk4(ff,a,x0,h,a,b);
ifabs(y0(1,n)-beta)<=eps
flag=1;
y1=y0;
else
s1=s0+1;
x0=[alfa,s1];
y1=rk4(ff,a,x0,h,a,b);
ifabs(y1(1,n)-beta)<=eps
flag=1;
end
end
ifflag~=1
whileabs(y1(1,n)-beta)>eps
s2=s1-(y1(1,n)-beta)*(s1-s0)/(y1(1,n)-y0(1,n));
x0=[alfa,s2];
y2=rk4(ff,a,x0,h,a,b);
s0=s1;
s1=s2;
y0=y1;
y1=y2;
end
end
xvalue=a:
h:
b;
yvalue=y1(1,:
);
ys=[xvalue',yvalue'];
function
x=rk4(f,t0,x0,h,a,b)
%rung-kuta
法求每个点的近似值(参考大作业一)
t=a:
h:
b;
%迭代区间m=length(t);
%区间长度
t
(1)=t0;
x(:
1)=x0;
%迭代初值
fori=1:
m-1
L1=f(t(i),x(:
i));
L2=f(t(i)+h/2,x(:
i)'+(h/2)*L1);
L3=f(t(i)+h/2,x(:
i)'+(h/2)*L2);
L4=f(t(i)+h,x(:
i)'+h*L3);
x(:
i+1)=x(:
i)'+(h/6)*(L1+2*L2+2*L3+L4);
end
4、举例求二阶非线性方程的边值问题:
在matlab控制台中输入:
f=@(x,y,z)(x^2+z*x^2);
x0l=0;
x0u=2*exp(-1);
alfa=0;
beta=2;
h=0、01
dbf(f,x0l,x0u,y0l,y0u,h,1e-6);
>>y=ans(:
2);
x=ans(:
1);
>>plot(x,y,'-r')
>>
结果:
再输入:
>>m=0:
0、01:
2;
>>n=m、*exp(-1/2*m);
>>plot(n,m)
>>plot(x,y,'-r',n,m,'-b')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打靶 Matlab 程序