Need help! I keep getting the error "not enough input arguments" how do I fix this?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
function drv = untitiled18(t,rv);
% small r is position
% big r is distance
mu = 3.986004*(10^5); %%unit is in km^3/s^2, and is Earth's Gravitational parameter
drv = zeros(6,1);
rx = rv(1);
vx = rv(2);
ry = rv(3);
vy = rv(4);
rz = rv(5);
vz = rv(6);
R = sqrt((rx^2)+(ry^2)+(rz^2));
% X component/ i direction
drv(1) = rv(2);
drv(2) = (-mu.*rx)/(R^3); % (vx) velocity in the x direction
% Y component/ j direction
drv(3) = rv(4);
drv(4) = (-mu.*ry)/(R^3); % (vy) velocity in the y direction
% Z component/ k direction
drv(5) = rv(6);
drv(6) = (-mu.*rz)/(R^3); % (vz) velocity in the z direction
end
7 Commenti
Star Strider
il 10 Set 2018
I agree. I doubt there are any significant differences between those versions with respect to ode45.
What line is throwing the error?
Risposte (2)
Star Strider
il 10 Set 2018
The only thing I can think of is that you have a function called ‘rv’ somewhere. To find it, run this:
q = which('rv','-all')
2 Commenti
Star Strider
il 10 Set 2018
You could run your ‘propagate2BP’ function with the solved values to get some of those (I do not understand what variables those would be).
It would be easier to begin with the solved position values and use numerical differentiation one time to then get the velocity values, and two times to get acceleration.
Use the gradient (link) function to do the numerical differentiation. This will be more accurate if you define ‘t’ as:
t = linspace(0, 172800, 21681);
or something similar, to get equally-spaced solved position values.
In differentiating a matrix, gradient differentiates across both the rows and columns, and the first output is the derivative down the columns. I would do the differentiation as:
drv = gradient(rv, mean(diff(t)), 1);
Note that this differentiates all the columns, so choose the original position columns from the ‘drv’ output.
Walter Roberson
il 10 Set 2018
Modificato: Walter Roberson
il 10 Set 2018
The error line you post is
[t,rv] = ode45(propagate_2BP22, t, [rinputx, vinputx, rinputy, vinputy, rinputz, vinputz], options);
which is not the same as what you posted before that, which was
[t,rv] = ode45(@propagate2BP, t, [rinputx, vinputx, rinputy, vinputy, rinputz, vinputz], options);
Notice the difference between propagate2BP and @propagate2BP . You need the @ version so your propagate_2BP22 would have to be @propagate_2BP22
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!