1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab Problem Motion Object

  1. Nov 14, 2013 #1
    1. The problem statement, all variables and given/known data

    I have created random mass and try to make them go around each other . somehow i couldnt find where all the code goes wrong. how do i fix this


    3. The attempt at a solution

    I have coded this. but still the file cant be run. i dont know where to fix this .

    % Creating initial positions/velocities (Randomly)
    clear all
    close all
    clc
    n_masses=10;
    m=rand(1,n_masses) %RANDOM masses fore each body IF YOU WANT
    % the same mass for all use instead :
    %m=k*ones(1,n_masses) where k is the mass


    x=randn(1,n_masses); %X position
    y=randn(1,n_masses); %Y position
    vx(1,:)=randn(1,n_masses); %X component velocity (initial)
    vy(1,:)=randn(1,n_masses) %Y component velocity (initial)
    scatter(x,y,round(100.*m),'filled','blue') % different masses, different sizes
    title('Initial configuration')
    figure

    % Calculating force matrix (F{i,j} means Force exterted by the i-th
    % particle on the j-th.
    %when j=i -> force is zero
    [F,F_totalx,F_totaly]=calculating_F_matrix(x,y,m);

    %Evolution
    dt=0.05; %interval
    n_steps=40; %number of timesteps
    %starting positions for the simulation
    xx{1}=x; %Will contain the succession of the X positions
    yy{1}=y; %Will contain the succession of the Y positions

    for s=1:n_steps+1
    disp(['Simulating at time t=' num2str(dt*(s-1))]);
    for i=1:n_masses
    [F,F_totalx,F_totaly]=calculating_F_matrix(xx{s},yy{s},m);
    %initial accelerations (fixed)
    ax(s,:)=F_totalx;
    ay(s,:)=F_totaly;

    %Updating velocities
    vx(s+1,i)=vx(s,i)+dt*ax(s,i);
    vy(s+1,i)=vy(s,i)+dt*ay(s,i);

    %Updating positions
    xx{s+1}(i)=xx{s}(i)+dt*xx{s}(i);
    yy{s+1}(i)=yy{s}(i)+dt*yy{s}(i);

    end
    end

    % Graphics (plot the evolution of the particles)
    %find max x and y to correctly set the reference for the plot
    for i=1:length(xx)
    xm(i)=max((abs(xx{i})));
    ym(i)=max(abs(yy{i}) );
    end


    axis (1.1.*[-max(xm) max(xm) -max(ym) max(ym) ]); % set axis to see all particles
    for s=1:n_steps
    scatter(xx{s},yy{s},round(100.*m),'filled','red')
    axis (1.2.*[-max(xm) max(xm) -max(ym) max(ym) ]); % set axis to see all particles
    title(['Time t=' num2str(dt*(s-1))])
    pause(0.15)
    end

    function [F,F_totalx,F_totaly]=calculating_F_matrix(2,3,5)
    n_masses=length(m);
    G=6.67*10^(-11); % Universal gravity constant
    for i=1:n_masses %influenced index
    for j=1:n_masses %index generating field
    if j~=i % excluding j=i
    Xdistance=abs(x(i)-x(j));
    Ydistance=abs(y(i)-y(j));
    %distance=sqrt((x(i)-x(j)).^2 )%+(y(i)-y(j)).^2); %distance i-j
    % dij=(x(i)-x(j)) %unitary vector dij
    F{i,j}(1)=G*m(i)*m(j)/(Xdistance);
    F{i,j}(2)=G*m(i)*m(j)/(Ydistance);
    else
    F{i,j}(1)=0;
    F{i,j}(2)=0;
    end
    end
    end


    % Calculating the total force (per unit of mass m_i) acting on i-th particle (by components)
    F_totalx(1)=0;
    F_totaly(1)=0;
    for i=1:n_masses
    Z=cell2mat(F(i,:)'); %vector of all forces acting on the i-th particle
    F_totalx(i)=sum(Z(:,1))./m(i);
    F_totaly(i)=sum(Z(:,2))./m(i);
    end
     
  2. jcsd
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Can you offer guidance or do you also need help?



Similar Discussions: Matlab Problem Motion Object
  1. Matlab Problem (Replies: 0)

Loading...