Not enough input arguments.

조회 수: 5 (최근 30일)
Savanna
Savanna 2023년 1월 14일
편집: Sulaymon Eshkabilov 2023년 1월 14일
Working with A_new and trying to implement it into the R function but keep getting an error for not enough input arguments.
%Values
GMs = 1.3271244*10^20; %Nm^2/kg
GMe = GMs/332946;
x_1 = -124850219*1000; %km -> m
x_2 = -78506090*1000; %km-> m
v_1 = 15.857131*1000; %km/s-> m/s
v_2 = -25.712187*1000; %km/s->m/s
%astroids
x_1a =-154965574*1000;%km/s->m/s
x_2a = -249465245*1000;%km/s->m/s
v_1a= 24.723504*1000;%km/s->m/s
v_2a = 2.645546*1000;%km/s->m/s
% a anonymous function
x_i = [x_1,x_2];
% x_2D = sqrt(x_1^2+x_2^2); %2D- x
% x_2D = vecnorm(x_i);
% A = @(x) [((-GMs/(x_2D^3))*x_1) ; (-GMs/(x_2D^3))*x_2];
A = @(x) ( -GMs ./ (vecnorm(x).^3)) * x; %Acceleration
A_new= @(x,x_e) (( -GMs ./ (vecnorm(x).^3)) * x) - (GMe ./ (vecnorm(x-x_e).^3)*(x-x_e)); %acceleration with earths gravity
% a_i = [a_1 a_2]
a_i = A(x_i)';
% below is the values I got and they match the values given
a_1 = 5.17; %mm/s^2 ->0.0052 m/s^2
a_2 = 3.25; %mm/s^2 -> 0.0032m/s^2
%b combine arrays into 2x2 matrix
v_i = [v_1,v_2];
v_ia =[v_1a,v_2a];
%u = [x_1, v_1; x_2, v_2]; %Earth
u=[x_1, v_1; x_2, v_2; x_1a, v_1a; x_2a,v_2a];%astroid + Earth
R = @(u) [u(1:2,2),A(u(1:2,1));u(3:4,2),A_new(u(3:4,1))];%based on solution from class
%R = @(u) [u(:,2),A(u(:,1))]; for part b
%R = @(u) [u(1:2,2),A(u(1:2,1));u(3:4,2),A(u(3:4,1))]; for f and g
% R = @(u) [v_i A(x)];
%c Motion of earth over 366 days
% Explicit Euler Scheme
t = 0;
dt = 100;
matrix_u=u(:,1);
while t(end)< 31622400
t(end+1)=t(end)+dt;
%u=expliciteuler(u,dt,R);
u=rungekutta(u,dt,R); %e Runge-Kutta Scheme
matrix_u(:,end+1)=u(:,1);
end
Unrecognized function or variable 'rungekutta'.
figure(1)
plot(matrix_u(1,:),matrix_u(2,:),'g',matrix_u(3,:),matrix_u(4,:),'r') %d plot explicit Euler and e Rungekutta
grid on
legend('Earths Orbit', 'Astroid Orbit')
%g distance between earth and astroid orbit
d = vecnorm( [matrix_u(1, : ) ; matrix_u( 2, : ) ] - [ matrix_u( 3 , : ) ; matrix_u( 4 , : ) ] );
d_o= d*(1/332946);
%d(1:50) % to recall some of the distances
%y=min(d)
[min_value, min_index] = min(d)
[min_value, min_index] = min(d_o)
  댓글 수: 1
Torsten
Torsten 2023년 1월 14일
Could you include the missing function ?

댓글을 달려면 로그인하십시오.

답변 (1개)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023년 1월 14일
편집: Sulaymon Eshkabilov 2023년 1월 14일
In your A_new, you should have vecnorm known in A_new. If vecnorm() is a norm of a vector x that you are trying to compute, then you had better use this syntax while calling: A_new , e.g.:
A_new= @(x,x_e) (( -GMs ./ (norm(x).^3)) * x) - (GMe ./ (norm(x-x_e).^3)*(x-x_e));
  댓글 수: 1
Walter Roberson
Walter Roberson 2023년 1월 14일
I do not understand what you are saying about vecnorm ?
I am not sure if you are saying that vecnorm is not a Mathworks function? Because it is vecnorm .
Or are you saying that it has been used incorrectly ??

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Earth and Planetary Science에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by