Why do I receive Not enough input arguments?
이전 댓글 표시
function [SA]=equTriPrismSurfArea(s,h)
SA=((sqrt(3)/2)*(s^2))+(3*s*h);
s = 1;
h = 1;
for i = 1:5
s = s(i);
h = h(i);
SA = ((sqrt(3)/2) * s^2 + 3*s*h);
fprintf ("\nTotal surface area of equilateral triangular prism is %f\n",SA)
end
end
채택된 답변
추가 답변 (2개)
Yongjian Feng
2021년 8월 29일
Try this:
function [SA]=equTriPrismSurfArea(sIn,hIn)
for i = 1:5
s1 = sIn(i);
h1 = hIn(i);
SA = ((sqrt(3)/2) * s1^2 + 3*s1*h1);
fprintf ("\nTotal surface area of equilateral triangular prism is %f\n",SA)
end
end
Then
sIn = randi(10, 1, 5);
hIn = randi(10, 1, 5);
equTriPrismSurfArea(sIn, hIn);
dpb
2021년 8월 29일
The error about not enough input arguments will come from how you called the function -- which you didn't show us. Whatever that was, it won't have passed two arrays in as the function expects/requires.
BUT, your function is fatally flawed in several ways -- first the initial line undoubtedly needs the "dot" element-wise operators .* and .^ in place of the matrix operators * and ^.
It would appear that's all your function would need; the rest would simply sum those areas.
As you've written it, however, you overwrite the input variables s and h and so the remainder of the code is totally bogus.
function [SA]=equTriPrismSurfArea(s,h)
SA=sqrt(3)/2*sum(s.^2 + 3.*s.*h);
end
If the function is designed for equilateral triangles as the comment says, then you don't need to pass the array of dimensions for each side -- and there would be only four surfaces, not five, anyways.
Then instead of the sum() you would just multiply the area of one side by 4.
카테고리
도움말 센터 및 File Exchange에서 Interpolation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!