Index exceeds the number of array elements (2).

1 回表示 (過去 30 日間)
Journi Northorp
Journi Northorp 2021 年 2 月 15 日
編集済み: James Tursa 2021 年 2 月 16 日
function vibration_ode45(m,k,c,uG,t,u0)
% m = mass
% k = spring constant
% c = damper
% uG = force of gravity
% t = time
% u0 is the initial conditions
[T,Y] = ode45(@vibration,[0,t],u0);
function[dydt] = vibration(t,y)
m = 30000;
k = 10800;
c = 200000;
uG = sin(10*t);
% initialize
dydt = zeros(2,1);
% set of 1st order ODEs
dydt(1) = y(2);
dydt(2) = (2*k*uG-4*c*y(2)-2*c(y(2)-y(4))-2*k*y(1)-k*(y(1)-y(3)))/(2*m);
end
figure(1)
plot(T,Y(:,1),'b-',T,Y(:,2),'g-.')
xlabel('time')
ylabel('\theta')
figure(2)
plot(Y(:,1),Y(:,2),'-')
xlabel('\theta')
ylabel('d\theta/dt')
end

回答 (1 件)

James Tursa
James Tursa 2021 年 2 月 15 日
This line has y(3)
dydt(2) = (2*k*uG-4*c*y(2)-2*c(y(2)-y(4))-2*k*y(1)-k*(y(1)-y(3)))/(2*m);
What is the differential equation you are solving? What is the initial condition you are feeding ode45?
  3 件のコメント
Journi Northorp
Journi Northorp 2021 年 2 月 15 日
how would I increase the number of array elements to fit this?
James Tursa
James Tursa 2021 年 2 月 16 日
編集済み: James Tursa 2021 年 2 月 16 日
Yes, of course I can see that u0 is your initial condition, but you don't show us what u0 is. If it is a 2-element vector then y(3) will give you an indexing error. And you still haven't shown us the differential equation you are trying to solve.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by