Does anyone had this plotting problem with MATLAB?

Click For Summary
SUMMARY

The discussion centers on a MATLAB plotting issue encountered while simulating an orbit using a Runge-Kutta 4th order (RK4) method. The user reports that an unwanted line from the origin (0,0,0) to the current position is displayed during the plotting process. The problem is attributed to the assignment of the array 'y' beyond its initialized dimensions, specifically at 'y(:,i+1)'. A suggested solution is to increase the initialization of 'y' to 'y = zeros(6, tspan(end)/h + 1)' to accommodate the additional index.

PREREQUISITES
  • Familiarity with MATLAB programming
  • Understanding of the Runge-Kutta 4th order method
  • Basic knowledge of 3D plotting in MATLAB
  • Concept of array indexing in MATLAB
NEXT STEPS
  • Review MATLAB array initialization techniques
  • Study the implementation of the Runge-Kutta method in MATLAB
  • Learn about MATLAB's 3D plotting functions, specifically 'plot3'
  • Explore debugging techniques for MATLAB scripts to identify indexing issues
USEFUL FOR

MATLAB developers, aerospace engineers, and anyone involved in numerical simulations and 3D data visualization.

Cassius1n
Messages
13
Reaction score
0
I have finsihed my work on an orbit propagator in MATLAB and now I'm trying to simulate the orbit with the help of the main script.

tspan=[0 :860];

Position and velocity
y0(1,1)= 743322.3616 ;
y0(2,1)= -6346021.219 ;
y0(3,1)= -3394131.349 ;
y0(4,1)= 5142.38067;
y0(5,1)= 4487.44895 ;
y0(6,1)= -7264.00872;

%%%% Mass(kg) /surface(m^2)

m = 217 ; %320;
A = 1.2; %8;

%%%% RK4

h=1;
y = zeros(6, tspan(end)/h);
y(:,1) = y0;

for i=1:1:(tspan(end)/h)

H=sqrt(y(1,i)^2+y(2,i)^2+y(3,i)^2);
k_1 = proiectia(tspan(i), y(:,i), H, m, A, y(4:6, i));
k1=k_1;
k_2 = proiectia(tspan(i)+0.5*h, y(:,i)+0.5*h*k_1, H, m, A, y(4:6, i));
k2=k_2;
k_3 = proiectia((tspan(i)+0.5*h), (y(:,i)+0.5*h*k_2), H, m, A, y(4:6, i));
k3=k_3;
k_4 = proiectia((tspan(i)+h),(y(:,i)+k_3*h), H, m, A, y(4:6, i));
k4=k_4;

y(:,i+1) = (y(:,i) + (1/6)*(k1+2*k2+2*k3+k4)*h);
plot3(y(1,:),y(2,:),y(3,: ));
drawnow

end
prp.png

The orbit is well described but it keeps drawing an extra line from 0 to where the point(x,y,z) is .After all the values are being represented, the line from 0 dissapears and it only remains the curved line(the orbit). Does anyone have any ideea why does it plot that line from 0 while is on the Runge Kutta loop?
 

Attachments

  • prp.png
    prp.png
    3.7 KB · Views: 610
Physics news on Phys.org
It bothers me that your assignment of y(:,i+1) = (y(:,i) + (1/6)*(k1+2*k2+2*k3+k4)*h); assigns one beyond the second dimension, tspan(end)/h, of y. Maybe that is causing a problem at the end of the plot of y. It would help us if you can tell us which end of y that zero point is. Is it at y(:,1) or at y(: tspan(end)/h)?
 
That would be at at y(: tspan(end)/h).
 
Just as a quick test, you should increase the initialization dimension of y to y = zeros(6, tspan(end)/h + 1); and see if that solves anything. You are making an assignment beyond the current dimension.
 
It's still plotting with the line from 0.
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 18 ·
Replies
18
Views
4K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
2
Views
3K