Not enough input arguments

7 views (last 30 days)
Gopika R
Gopika R on 30 Jun 2020
Commented: Walter Roberson on 1 Jul 2020
function xdot = OD(t,x)
global A B C Da K
Aa=A+(B*K*C);
Ba=B*Da;
u=K*x;
xdot=(Aa*x)+(Ba*u);
end
When running this code it show error in the line u=K*x; as not enough inputs. Here A,B,C,Da,K are all 2x2 matrix.
  8 Comments
Gopika R
Gopika R on 1 Jul 2020
@Rik: I ran it with the play button, the green one.
Walter Roberson
Walter Roberson on 1 Jul 2020
When you use the green run button, then where are you expecting that MATLAB will look for the values of t and x to use inside the routine?

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 1 Jul 2020
It seems that you are trying to solve a matrix differential equation. If you are using ode45, one possible way this error can occur if you call it like this
ode45(@(t,x) OD, [0 10], [1; -1; 0; 0])
The correct syntax is
ode45(@(t,x) OD(t,x), [0 10], [1; -1; 0; 0]) % or
ode45(@OD, [0 10], [1; -1; 0; 0])
The following shows working code with random values for matrices
global A B C Da K
A = rand(4);
B = rand(4);
C = rand(4);
Da = rand(4);
K = rand(4);
ode45(@(t,x) OD, [0 10], [1; -1; 0; 0])
function xdot = OD(t,x)
global A B C Da K
Aa=A+(B*K*C);
Ba=B*Da;
u=K*x;
xdot=(Aa*x)+(Ba*u);
end
Also, using global variables is not a good coding practice. Following shows how to pass these matrices to function OD without using global
A = rand(4);
B = rand(4);
C = rand(4);
Da = rand(4);
K = rand(4);
ode45(@(t,x) OD(t,x,A,B,C,Da,K), [0 10], [1; -1; 0; 0])
function xdot = OD(t,x,A,B,C,Da,K)
Aa=A+(B*K*C);
Ba=B*Da;
u=K*x;
xdot=(Aa*x)+(Ba*u);
end
  1 Comment
Gopika R
Gopika R on 1 Jul 2020
OK. Thank you. I will try with this.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!