- #1
bcolson
- 3
- 0
The issue I am having is setting up the actual program for the problem. I am having trouble interpreting the code and, because of that, having issues getting it to work properly. The whole thing was written with Matlab and the goal was to write a function that could simulate the motion of a series of connected Hooke's law oscillators. Half of the system has stiffness 1 the other half has variable stiffness s.
Total size of the system should be 2*l.function [T,y] = mtxsolver(M,s,l)
%M == mass, s == stiffness, l == length
Size = 2*l;
size = Size-1;
%set up vectors
k = zeros((Size),1);
R = 1;
%set up k values in loops.
while R < (floor(Size/2))
k(R) = 1;
R = R + 1;
end
while R < (Size)
k(R) = s;
R = R + 1;
end
k(Size+1) = 0;
for c = 1:Size
for r = 1:Size
if r == c
%to diagonal
A(r,c) = (k(r)+k(r+1))/M;
elseif r-c == 1
%to left diagonal
A(r,c) = -k(r)/M;
elseif r-c == -1
%to right diagonal
A(r,c) = -k(r+1)/M;
else
%to all else
A(r,c) = 0;
end
end
end%set up initial conditions
initCond = zeros(2,floor((Size+1)/2));
initCond(1,1) = 1;
%ode function
fun = @(t,x)[x(2); - A*x(1)];
[T,y] = ode45(fun,[0,30],initCond);
endI can't wrap my head around the matrix size of the initial conditions. Why exactly does it have to be so much smaller than the size of the matrix describing the coupled stiffness? Is it something where ode45 is only using half of the matrix A for position calculations?
Total size of the system should be 2*l.function [T,y] = mtxsolver(M,s,l)
%M == mass, s == stiffness, l == length
Size = 2*l;
size = Size-1;
%set up vectors
k = zeros((Size),1);
R = 1;
%set up k values in loops.
while R < (floor(Size/2))
k(R) = 1;
R = R + 1;
end
while R < (Size)
k(R) = s;
R = R + 1;
end
k(Size+1) = 0;
for c = 1:Size
for r = 1:Size
if r == c
%to diagonal
A(r,c) = (k(r)+k(r+1))/M;
elseif r-c == 1
%to left diagonal
A(r,c) = -k(r)/M;
elseif r-c == -1
%to right diagonal
A(r,c) = -k(r+1)/M;
else
%to all else
A(r,c) = 0;
end
end
end%set up initial conditions
initCond = zeros(2,floor((Size+1)/2));
initCond(1,1) = 1;
%ode function
fun = @(t,x)[x(2); - A*x(1)];
[T,y] = ode45(fun,[0,30],initCond);
endI can't wrap my head around the matrix size of the initial conditions. Why exactly does it have to be so much smaller than the size of the matrix describing the coupled stiffness? Is it something where ode45 is only using half of the matrix A for position calculations?