structure inside a function
조회 수: 17 (최근 30일)
이전 댓글 표시
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
Stephen23
2020년 10월 12일
편집: Stephen23
2020년 10월 12일
"I am really concerned about my equation having too many input values."
As Ameer Hamza explained, the cause of the error is your inadvertent use of comma-separated lists generated from a non-scalar structure:
Why do you define inputs as an input to the function hw_dragPower_sharmaAshlianne but then overwrite this with data inside the function? What is the point of that?
채택된 답변
Ameer Hamza
2020년 10월 12일
편집: Ameer Hamza
2020년 10월 12일
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
Ameer Hamza
2020년 10월 12일
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 .'];
추가 답변 (1개)
KSSV
2020년 10월 12일
편집: KSSV
2020년 10월 12일
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
KSSV
2020년 10월 12일
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));
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!