I am getting error not enough input arguments.

1 回表示 (過去 30 日間)
Puja
Puja 2024 年 1 月 22 日
コメント済み: Sam Chak 2024 年 6 月 14 日
function fval=massSpringFun(t,y)
%Function for mass-spring system
%Define constants
m=1;
c=0.001;
k=100;
h=0.01;
x1=0.01;
x2=0;
%This set of ODEs will be solved using ode45
x1=y(1);
v1=y(2);
x2=y(3);
v2=y(4);
%Definr dy/dt
fval(1,1)=v;
fval(2,1)=(k/m)*(x1-x2)-(c/h)*v2;
%To run the mass spring system
y0=[1;0];
tspan=[0 10];
[tsol,ysol]=ode45(@(t,y)massSpringFun(t,y),tspan,y0);
plot(tsol,ysol(:,1));

回答 (1 件)

Abhimenyu
Abhimenyu 2024 年 6 月 14 日
Hi Puja,
The issue you are facing is because of the function definition and the initial conditions provided. The 'y0' variable is defined as [1; 0], but the system has four variables (displacements and velocities for two masses). You need to provide initial conditions for all four variables.
Please follow the below-mentioned example MATLAB code to correctly simulate the mass-spring system:
% Define the mass-spring system function
function fval = massSpringFun(t, y)
% Extract variables
x1 = y(1);
v1 = y(2);
x2 = y(3);
v2 = y(4);
% Define constants
m = 1;
c = 0.001;
k = 100;
h = 0.01;
% Define dy/dt
fval(1, 1) = v1;
fval(2, 1) = (k/m) * (x1 - x2) - (c/h) * v2;
fval(3, 1) = v2;
fval(4, 1) = 0; % Assuming no external force on the second mass
end
Providing initial conditions for all the four variables:
% Initial conditions for all four variables
y0 = [1; 0; 0; 0];
% Time span
tspan = [0, 10];
% Solve the ODE system
[tsol, ysol] = ode45(@massSpringFun, tspan, y0);
% Plot the displacement of the first mass
plot(tsol, ysol(:, 1));
xlabel('Time');
ylabel('Displacement (x1)');
title('Mass-Spring System');
grid on;
I hope this helps to solve your query!
  1 件のコメント
Sam Chak
Sam Chak 2024 年 6 月 14 日
For a typical mass-spring system, the system should be realistically stable when all energy dissipation mechanisms are accounted for. I have selected some numerical parameter values in order to bring the displacement response back down to a physically realizable range.
function fval = massSpringFun(t, y)
% Extract variables
x1 = y(1);
v1 = y(2);
x2 = y(3);
v2 = y(4);
% Define constants
m = 1;
c = 0.001;
k = 100;
h = 0.01;
% Define dy/dt
fval(1, 1) = v1;
fval(2, 1) = (k/m) * (x1 - x2) - (c/h) * v2;
fval(3, 1) = v2;
fval(4, 1) = 243.39*x1 + 24.36*v1 - 242*x2 - 22.13*v2;
end
tspan = [0, 10];
y0 = [1; 0; 0; 0];
[t, y] = ode45(@massSpringFun, tspan, y0);
plot(t, y(:, 1)), grid on
xlabel('Time'), ylabel('x_{1} Displacement (m)'), title('Mass-Spring System');

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

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by