# Sketch the analytical solution, using the formula below. HELP

1 view (last 30 days)
Joe Selfridge on 19 Dec 2021
Edited: John D'Errico on 19 Dec 2021
clc
clear all
m=1
k=100
x0=5e-2
v0=30e-2
w=sqrt(k/m)
f=w/(2*pi)
t=1/f
n=10
x(1)=x0*cos(w*t)+(v0/w)*sin(w*t)
for n=2:n
x(n+1)=x(n-1)*cos(w*t(n-1))+(v0/w)*sin(w*t(n-1))
end
plot(t,x)
I am getting the error mesage "Index exceeds the number of array elements (1)." What am I doing wrong, please help
"

John D'Errico on 19 Dec 2021
Edited: John D'Errico on 19 Dec 2021
I might guess that you actually meant to MULTIPLY t with the value (n-1) in this exprssion:
x(n+1)=x(n-1)*cos(w*t(n-1))+(v0/w)*sin(w*t(n-1))
Instead, remember that MATLAB does not have implicit multiplication. You need to use the * or the .* operator as appropriate. Here, it will not matter which you use.
x(n+1)=x(n-1)*cos(w*t*(n-1))+(v0/w)*sin(w*t*(n-1))
As well, I would suggest that this next line of code is an incredibly bad idea:
for n=2:n
MATLAB does not charge you more, if you use a different variable name. MATLAB will not be more efficient. Reusing the same variable name there is going to cause you innumerable headaches.
What else? I think you have a problem in your code, because you NEVER actually define x(2). You defined x(1). Then your loop starts at n==2. Therefore the first time through the loop, you define x(n+1), where n = 2. So you defined x(3) as the next element. x(2) was never defined. However, you will use x(2) later on.
I predict this code will produce arbitrarily useless strangeness. But that is just a guess. And since we were never told what the actual forumula you want to produce, we are merely guessing.

Image Analyst on 19 Dec 2021
t is a scalar with value 0.6283. There is no second or third element of t so you can't index t with (n-1).