Filter löschen
Filter löschen

I really want to draw the precession of mercury

2 Ansichten (letzte 30 Tage)
Asir Tushar
Asir Tushar am 10 Nov. 2017
Kommentiert: Meindert Norg am 9 Jan. 2018
clc;clear all;
a=10;
b=5;
lambda=.5;
v1=1/20;
v2=3;
t=0:.1:40;
x(t)=a.^2+b.^2 +a*cos(2*pi*v1*t)*cos(2*pi*v2*t)-lambda*b*sin(2*pi*v1*t)*sin(2*pi*v2*t);
y(t)=a.^2+b.^2 +a*sin(2*pi*v1*t)*cos(2*pi*v2*t)-lambda.*b*cos(2*pi*v1*t)*sin(2*pi*v2*t);
plot(x(t),y(t))
This is my program. but it's not running cause there is a dimension mismatch. can anybody tell me what did i do wrong?
  1 Kommentar
Meindert Norg
Meindert Norg am 9 Jan. 2018
In case you have not figured it out in the mean time:
  • Remove the element-wise ".^2"
a^2+b^2
  • add element wise multiplication for the vectors where 't' is used:
a*cos(2*pi*v1*t).*cos(2*pi*v2*t)
  • fix the way you plot it:
plot(x,y)
Here is the result:
clc;clear all;
a=10;
b=5;
lambda=.5;
v1=1/20;
v2=3;
t=0:.1:40;
x=a^2+b^2 + a*cos(2*pi*v1*t).*cos(2*pi*v2*t)-
lambda*b*sin(2*pi*v1*t).*sin(2*pi*v2*t);
y=a^2+b^2 + a*sin(2*pi*v1*t).*cos(2*pi*v2*t)-
lambda.*b*cos(2*pi*v1*t).*sin(2*pi*v2*t);
plot(x,y)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 10 Nov. 2017
As the error message says
x(t)
is only valid if t is a real positive integer.
The simplest way to solve your problem is to get rid of the indexing of x and y which is completely meaningless
x = a^2 + b^2 + a*cos(2*pi*v1*t) .* cos(2*pi*v2*t) - ...
y = a^2 + b^2 + ...
plot(x, y)

Weitere Antworten (1)

M
M am 10 Nov. 2017
Bearbeitet: M am 10 Nov. 2017
First :
a.^2
the dot is useless as a is a scalar
but I think you should add a dot between the cos multiplication :
a*cos(2*pi*v1*t).*cos(2*pi*v2*t)
otherwise you will get an error.
Then, if you start at t=0, you will get an error as you're trying to acces
x(t)=x(0)
but Matlab indices should be positive integers.
  1 Kommentar
Asir Tushar
Asir Tushar am 10 Nov. 2017
x(t)=a^2+b^2 +a*cos(2*pi*v1*t).*cos(2*pi*v2*t)-lambda*b*sin(2*pi*v1*t).*sin(2*pi*v2*t);
y(t)=a^2+b^2 +a*sin(2*pi*v1*t).*cos(2*pi*v2*t)-lambda*b*cos(2*pi*v1*t).*sin(2*pi*v2*t);
i corrected the code like you said. still this message is showing for these two lines "Subscript indices must either be real positive integers or logicals.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by