Modeling Motion of Earth with Matlab using ODE45

Click For Summary
The discussion focuses on modeling the Earth's motion around the Sun using MATLAB's ode45 solver. The user successfully implemented an Euler-cromer scheme but encounters errors when transitioning to the ODE solver due to a mismatch in the expected input and output dimensions. The acceleration equation derived for the Euler scheme is correctly formulated, but the function must accommodate a vector of length four to represent the degrees of freedom (x, y, velocity in x, and velocity in y). The user is advised to revise the function to ensure it returns a vector of the same length as the input. Properly structuring the function will resolve the dimensionality issues and allow for successful execution of the ODE solver.
PhysSci1
Messages
1
Reaction score
0

Homework Statement


So I am trying to model the motion of the Earth around the Sun using ode45. I modeled this using an euler-cromer scheme, but I would like to get familiar with using a solver. I wrote the code for an Euler-cromer and it worked just fine. However, when I try to use the same equation that I derived for acceleration in the Euler scheme in the ODE, I get errors. I think it is because I am not quite sure how the inputs work for ODE. I have tried to figure it out by looking through resources on the internet, but I just can't figure it out.

Homework Equations


The equation I used was the vector form of acceleration of a mass due to another mass. This equation in MATLAB is

-G * Msun * R / (sum(R.*R)^(3/2)) where R = Psun - Current position (as vectors, [x y] - [x y]).

The Attempt at a Solution



This is my attempt, which provides this error:

In an assignment A(:) = B, the number of elements in A and B
must be the same.

Error in orbit (line 10)
dp(2) = -G * Msun * R / (sum(R.*R)^(3/2));

My function:
G = 6.673E-11/(1000^3);

Psun = [0 0];

Msun=1.988e30;

R = Psun - P(2);

M = 1.98892E30;

dp = zeros(2,2);

dp(1)= P(2);

dp(2) = -G * Msun * R / (sum(R.*R)^(3/2));

How I call it:

[T,Y] = ode45(@Orbit,[0, 3.15581e7],[1.5e8, 0, 0, 29.75]);
 
Physics news on Phys.org
The problem you have has for degrees of freedom: ##x, y, \dot{x}, \dot{y}##. Your function is set up with only 2. It need to be able to take in a vector y of length 4, containing the 4 dof, and return a vector y' of length 4 also.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
2K
Replies
5
Views
6K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
10K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 8 ·
Replies
8
Views
2K