策划几个数据集在一个For循环

22日视图(30天)
乔治
乔治 2023年3月8日
评论道: 威廉•罗斯 2023年3月9日
我通过一个工作问题,需要我来计算对象的轨迹基于角最初抛出的物体。这部分问题的最终目标是有一个图显示所有的轨迹在一个阴谋。角度我想遍历10 0到80度。然而,当我运行脚本,我得到一个情节,所有的数据都是一样的,所有的数据(无论角)有相同的输出(就是明证的传奇情节)。如果我改变角变量只有一个值(即10,而不是0:10:80),该计划将成功输出图形的角。有人能帮我解决我的问题是什么?
clc
清晰的
%不变的变量
m = 0.175;%,公斤
D = 0.26;%直径,
=(π/ 4)* D ^ 2;%,m ^ 2
g = 9.81;% m / s ^ 2
rho_air = 1.23;^ %空气密度,公斤/米3
AoA_rad =函数(4);%拖Calc的攻角。
%的位置变量
x_prev = 0;
y_prev = 1;
x_new = 0;
y_new = 1;
%的时间变量
t_start = 0;
t_step = . 01;
t_end = 7;
t_total = 0;
时间= t_start: t_step: t_end;
%循环变量/矩阵
韦尔= 14;
Coord = 0(长度(时间),2);
数= 1;
%绘制信息
持有
标题(的飞盘在恒定的速度和角度不同)
包含(的水平距离(米))
ylabel (的垂直距离(米))
网格
传说
j = 0:10:80%角度遍历
我= t_start: t_step: t_end
alpha_rad =函数(j);
β=函数(90 - j);
%定义和加法的力量
Cd = 0.08 + (2.72 * alpha_rad) * (alpha_rad-AoA_rad) ^ 2;
Cl = 0.15 + (1.4 * alpha_rad);
Fd = (cd * rho_air * *(韦尔^ 2))/ 2;
Fl = (Cl * rho_air * *(韦尔^ 2))/ 2;
Sum_Fx = Fd * sin(β)fl * sin (alpha_rad);
Sum_Fy = Fd * cos(β)+ Fl * cos (alpha_rad)——(m * g);
%发现加速度和新速度
ax = Sum_Fx / m;
唉= Sum_Fy / m;
u0x =韦尔* cos (alpha_rad);
v0y =韦尔* sin (alpha_rad);
情况= u0x + i * ax;
= v0y + i *啊;
%发现x和y坐标
x_new = x_prev + u0x *我+ 0.5 * ax * (i ^ 2);
y_new = y_prev + v0y *我+ 0.5 * - g * (i ^ 2);
Coord(计数,1)= x_new;
Coord(统计,2)= y_new;
x_prev = x_new;
y_prev = y_new;
数=计数+ 1;
韦尔=√(情况^ 2)+ (v0 ^ 2));
结束
情节(Coord (: 1) Coord (:, 2))
ylim (10 [0])
xlim (30 [0])
结束

答案(1)

威廉•罗斯
威廉•罗斯 2023年3月9日
你写的:
x_new = x_prev + u0x *我+ 0.5 * ax * (i ^ 2);
这是不正确的,因为你如何定义变量。你把我定义为当前时间。xprev更新在每个内循环通过。因此你应该使用dt,步长,而不是我=时间,这更新的步骤。你的方程y_new有相同的问题。
检查内部循环代码识别计算,可以拉到外循环,也就是说,任何东西都是一样的在每一个内部循环。
我将使用NxM数组X, Y,韦尔,等等,其中N =长度(时间)和M =数量的角度。
我将改变循环变量的整数并使用它们作为数组索引x (I, j)和y (I, j),你会填满你的循环。
这是一个简单的例子为一个球推出了不同的角度。系统要复杂得多,所以你的方程ax, ay会有所不同。
dt = . 01;%时间步(s)
时间= 0:dt: 2;%时间不是循环中使用,但你可以用它来阴谋(t) x (:, j)),等等
角= 0:10:80;
N =长度(时间);M =长度(角);
g = -9.8;% y accel m / s ^ 2
x = 0 (N, M);y = 0 (N, M);%分配数组x, y
x(1:) = 0(1米);%初始距离(米)
y(1:) =(1米)的;%初始高度(米)
v0 = 14;%初始veloc(米/秒)
j = 1: M
vx = v0 * cos(角(j) *π/ 180);
v = v0 * sin(角(j) *π/ 180);
ax = 0;%不x加速我的简单的模型
唉= g;% y加速度
我= 2:N
(i, j) = x(张,j) + dt * vx;
y (i, j) = max (y(张,j) + dt * v, 0);%不允许y < 0
vx = vx + dt * ax;%更新vx
v = v + dt * ay;%更新v
结束
情节(x (:, j), y (:, j))
持有
legstr {j} = num2str(角(j));
结束
传奇(legstr);网格;
包含(“距离(m)”);ylabel (身高(米)的);
给你一些想法。
7评论
威廉•罗斯
威廉•罗斯 2023年3月9日
你的脚本主要有线条
u0x =韦尔* cos (alpha_rad);
v0y =韦尔* sin (alpha_rad);
之后,您可以使用u0x x和y和v0y更新。换句话说,上面的方程是x, y分量的瞬时速度。我认为这个方程是不正确的,因为他们使用alpha_rad,初始发射角。Alpha_rad没有更新的变化轨迹。它应该。或者你可以做我所做,这是更新vx和v,基于加速度ax,唉。
vx = vx外汇/ m + dt *;%更新vx
v = v + dt *年度/ m;%更新v
用vx和v更新职位:
(i, j) = x(张,j) + dt * vx;%更新x
(i, j) = y(张,j) + dt * v;%更新y
这也许可以解释不同。

登录置评。

类别

找到更多的在交互控制和回调帮助中心文件交换

标签

s manbetx 845


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的