我一直在尝试计算和绘制轨道运动的轨迹,但却被变量类型所困扰。
所有输入变量都是 double 类型,以及所需的输出。因此,轨道系统的变量(名称中带有" _orb"的变量)属于 double 类型。 这是脚本。这些不同之处始于" Velocity corrections"部分,我想计算速度变化函数的最小值:
function trajectory_final (x0, y0 , z0, vx0, vy0, vz0, q0, q1, q2, q3)
o = 0.00114;
xk = 0;
yk = -150;
zk = 150;
double t;
%% Coordinate system transition:
x0_orb = (1 - 2*q2*q2 - 2*q3*q3)*x0 + 2*(q1*q2 + q0*q3)*y0 + 2*(q1*q3 - q0*q2)*z0;
y0_orb = 2*(q1*q2 - q0*q3)*x0 + (1 - 2*q1*q1 - 2*q3*q3)*y0 + 2*(q2*q3 + q0*q1)*z0;
z0_orb = 2*(q1*q3 + q0*q2)*x0 + 2*(q2*q3 - q0*q1)*y0 + (1 - 2*q1*q1 - 2*q2*q2)*z0;
vx0_orb = (1 - 2*q2*q2 - 2*q3*q3)*vx0 + 2*(q1*q2 + q0*q3)*vy0 + 2*(q1*q3 - q0*q2)*vz0;
vy0_orb = 2*(q1*q2 - q0*q3)*vx0 + (1 - 2*q1*q1 - 2*q3*q3)*vy0 + 2*(q2*q3 + q0*q1)*vz0;
vz0_orb = 2*(q1*q3 + q0*q2)*vx0 + 2*(q2*q3 - q0*q1)*vy0 + (1 - 2*q1*q1 - 2*q2*q2)*vz0;
%% Velocity corrections:
vx1 = sym('(xk - x0_orb - (6*o*t - 6*sin(o*t))*y0_orb - (-2*cos(o*t)/o + 2/o)*((-3*cos(o*t) + 4)*y0_orb - yk))/(4*sin(o*t)/o - 3*t - (2*cos(o*t)/o - 2/o)*(2*cos(o*t)/o - 2/o))');
vy1 = sym('(-3*cos(o*t) + 4)*y0_orb + (2*cos(o*t)/o - 2/o)*vx1 - yk');
vz1 = sym('(zk - (cos(o*t))*z0_orb)/(sin(o*t)/o)');
dvx = vx1 - vx0_orb;
dvy = vy1 - vy0_orb;
dvz = vz1 - vz0_orb;
total = sqrt((dvx)^2 + (dvy)^2 + (dvz)^2);
D = diff(total);
D_math = matlabFunction(D);
root = fzero(D_math, 600);
然而,出现了几个问题:
1)如果我现在运行它, vx1,vy1 和 vz1 中的变量不会被它们在启动时分配的值替换,导致"没有足够的输入参数"为fzero。
2)如果我使 vx1,vy1 和 vz1 数字,则错误"未定义的函数或变量t"出现;
3)如果我使 vx1,vy1 和 vz1 数字并为t分配边界,那么我无法在所需的时间间隔内找到D_math函数的根。
请告诉我处理这个问题的最佳方法是什么?