1、根据炮d运动轨迹的参数方程:
x=v0*t*cosα
y=v0*t*sinα-0.5*g*t^2
消去t,求得 y(x)的表达式,即
y=x*tan(alpha)-0.5*g*(x/(v0*cos(alpha)))^2
2、根据已知条件,
v0=0.32e3%km/s
x=10e3%km
使用vpasolve函数,求出alpha(发射角),即
alpha=vpasolve(y==0,[0,+inf]) %36.668°
3、利用x的参数方程,求得发肆嫌射炮d达到10km处的时间tm,即
tm=x/(v0*cos(alpha))
4、使用linspace函数,将t【t0,tm】分割成若干个等份,如50等份
t=linspace(t0,tm,50)
5、计算t对应的x、y值
6、使用plot函数,绘制炮d让兄运行动态轨迹图,即
plot(x,y)
xlabel('x(t)'),ylabel('y(t)'裂滑手)
7、完善上述代码,运行后得到如下运行动态轨迹图
第一个例子导d仿真Matlab源代码(missile simulation)
http://www.matlabsky.com/thread-284-1-1.html
第二例子
%by dynamic
%see also http://www.matlabsky.com
%2009.2.18
%比例导引理想d道胡改仿真凳做备Matlab代码
%给出了比例导引法的差分方程, 采用Matlab语言, 对比例导引法的导d理想d枣毁道进行了三维数据仿真, 绘制出三维理想d道。随导d与目标参数变化情况, 对理想d道的特性进行了分析。
clear all
clc
clear
tt=0.1
sm=0.6*tt
st=0.42*tt
x(1)=0y(1)=0z(1)=0
pmr(:,1)=[x(1)y(1)z(1)]
ptr(:,1)=[25510]
m=3
q(1)=0
o(1)=0
a(1)=0
for(k=2:600)
ptr(:,k)=[25-0.42*cos(pi/6)*tt*k510+0.42*sin(pi/6)*k*tt]
r(k-1)=sqrt((ptr(1,k-1)-pmr(1,k-1))^2+(ptr(2,k-1)-pmr(2,k-1))^2+(ptr(3,k-1)-pmr(3,k-1))^2)
c=sqrt((ptr(1,k)-pmr(1,k-1))^2+(ptr(2,k)-pmr(2,k-1))^2+(ptr(3,k)-pmr(3,k-1))^2)
b=acos((r(k-1)^2+st^2-c^2)/(2*r(k-1)*st))
dq=acos((r(k-1)^2-st^2+c^2)/(2*r(k-1)*c))
if abs(imag(b))>0
b=0.0000001
end
if abs(imag(dq))>0
dq=0.0000001
end
q(k)=q(k-1)+dq
o(k)=o(k-1)+m*dq
a(k)=o(k)-q(k)
c1=r(k-1)*sin(b)/sin(a(k)+b)
c2=r(k-1)*sin(a(k))/sin(a(k)+b)
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b))
dq=a(k)-acos(((c1-sm)^2+c3^2-(c2-st)^2)/(2*(c1-sm)*c3))
if abs(imag(dq))>0
dq=0.0000001
end
q(k)=q(k-1)+dq
o(k)=o(k-1)+m*dq
a(k)=o(k)-q(k)
c1=r(k-1)*sin(b)/sin(a(k)+b)
c2=r(k-1)*sin(a(k))/sin(a(k)+b)
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b))
dq=a(k)-acos(((c1-sm)^2+c3^2-(c2-st)^2)/(2*(c1-sm)*c3))
if abs(imag(dq))>0
dq=0.0000001
end
q(k)=q(k-1)+dq
o(k)=o(k-1)+m*dq
a(k)=o(k)-q(k)
c1=r(k-1)*sin(b)/sin(a(k)+b)
c2=r(k-1)*sin(a(k))/sin(a(k)+b)
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b))
x1(k)=ptr(1,k-1)+c2/st*(ptr(1,k)-ptr(1,k-1))
y1(k)=ptr(2,k-1)+c2/st*(ptr(2,k)-ptr(2,k-1))
z1(k)=ptr(3,k-1)+c2/st*(ptr(3,k)-ptr(3,k-1))
x(k)=pmr(1,k-1)+sm/c1*(x1(k)-pmr(1,k-1))
y(k)=pmr(2,k-1)+sm/c1*(y1(k)-pmr(2,k-1))
z(k)=pmr(3,k-1)+sm/c1*(z1(k)-pmr(3,k-1))
pmr(:,k)=[x(k)y(k)z(k)]
r(k)=sqrt((ptr(1,k)-pmr(1,k))^2+(ptr(2,k)-pmr(2,k))^2+(ptr(3,k)-pmr(3,k))^2)
if r(k)<0.06
break
end
end
sprintf('遭遇时间:%3.1f',0.1*k)
figure(1)
plot3(pmr(1,1:k),pmr(2,1:k),pmr(3,1:k),'k',ptr(1,:),ptr(2,:),ptr(3,:))
axis([0 25 0 5 0 25])
text(x(80),y(80),z(80),'\leftarrow 比例导引')
grid on
beta=atan(h/L) % 发射炮d的最小角度 --- beta是弧度值,不是角度值。alfa=[beta:0.1:70]% 设定抛射角度范围 --- 可能与你的意思不太一样。
现在说下你的出错信息的含义:
v0=A/((cos(sita))*sqrt(L*tan(sita)-h)) % 计算为了击中目标不同抛射漏灶山角度下的速度
分母结果是一个一维数组,而分子却只是一个数,数是不能除以数组的;
你想表达的意思是用A除辩笑以数据的每一个元素,只返中需要改变一下除号形式:
由 / 改为 ./ 点斜杠
类似的 * 对应有.*
幂^对应有 .^
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)