MATLAB Answers

structure inside a function

1 view (last 30 days)
Hey all!
I am having a ton of issues with this line of code. So I have this equation in a function in which I have made the structure "inputs" with the different aircraft properties. in a separate script, I have called the function and labeled again the inputs from my function page. Along with this, I have named my vmax.
I keep getting the same error message of too many input arguments. What am I getting wrong?
D = (0.5*rho0*((vmax*1.687810)^2)*inputs.S*inputs.Cd0)+(((inputs.WS*inputs.S)^2)/(0.5*rho0*((vmax*1.687810)^2)*inputs.E*inputs.AR*inputs.S*pi));
  9 Comments
Ashlianne Sharma
Ashlianne Sharma on 12 Oct 2020
Just as I have commented below, this is the whole error message in my command window.
>> hw_dragPower_sharmaAshlianne(vmax, inputs)
Error using *
Too many input arguments.
Error in hw_dragPower_sharmaAshlianne (line 50)
D =
(0.5*rho0*((vmax*1.687810)^2)*179*inputs.Cd0)+(((inputs.WS.*inputs.S)^2)/(0.5*rho0*((vmax*1.687810)^2)*inputs.E.*inputs.AR.*inputs.S.*pi));
% [lbf]

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 12 Oct 2020
Edited: Ameer Hamza on 12 Oct 2020
In your code 'inputs' is a 3-element array of struct. When you write
inputs.Cd0
It returns 3 values. If you want to multiply all three values with a number then you need to write it like this
a*[inputs.Cd0]; % 'a' is used as an example here.
In that case, you may also need to use element-wise operators: https://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html
  6 Comments
Ameer Hamza
Ameer Hamza on 12 Oct 2020
I am glad to be of help! :)
You can display the outputs as 3 sepeate vectors instead of combining in a single array
disp(V);
disp(D);
disp(P);
or you can combine them as column vectors in the matrix
outputs = [V.' D.' P .'];

Sign in to comment.

More Answers (1)

KSSV
KSSV on 12 Oct 2020
Edited: KSSV on 12 Oct 2020
If you have two equal vectors, like:
a = rand(1,3) ;
b = rand(1,3) ;
m = a.*b % this should be used. This iscalled element by element multiplication
d = a./b % element by element divison
p = a*b % this will trhow error.
l = a/b % this is not desired
In your case: Try the below. If any error, try using .*, ./ at vectors multiplication and divison.
D = (0.5*rho0*((vmax*1.687810)^2)*inputs.S.*inputs.Cd0)+(((inputs.WS.*inputs.S).^2)./(0.5*rho0*((vmax*1.687810)^2)*inputs.E.*inputs.AR.*inputs.S*pi));
  2 Comments
KSSV
KSSV on 12 Oct 2020
Try like this. If not working check the size of each S, Cd0, WS etc.....If still there is a error. Share your code. There should be some other problem.
S = [input.S] ;
Cd0 = [inputs.Cd0] ;
WS = [inputs.WS] ;
E = inputs.E] ;
AR = [inputs.AR] ;
D = (0.5*rho0*((vmax*1.687810)^2)*S.*Cd0)+(((WS.*S).^2)./(0.5*rho0*((vmax*1.687810)^2)*E.*AR.*S*pi));

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!