Unable to use function in script

9 ビュー (過去 30 日間)
Manish
Manish 2019 年 1 月 27 日
編集済み: Stephan 2019 年 1 月 27 日
I am new to matlab, i created a function file and it is working fine while using in command winow but showing "Not enough input arguments." while using in a script
function [V,A,Up,dV,dA] = VAUt(ct,B,L,r,R,Ach,Ap,N)
B = B*0.0254;
L = L*0.0254;
Ach = Ach*0.00064516;
Ap = Ap*0.00064516;
Vd = 22*(B^2)*L/28;
Vc = Vd/(r-1);
V = Vc*(1+0.5*(r-1)*(R+(1- cosd(ct))-((R^2)-((sind(ct))^2))^0.5));
A = Ach + Ap + 22*B*L*(R+1-cosd(ct)+((R^2)-(sind(ct))^2))/14;
Up = 22*L*N*sind(ct)*(cosd(ct)/(((R^2)-(sind(ct))^2)^0.5)+1)/7;
dV = Vc*(R/2 - cos((pi*ct)/180)/2 - (R^2 - sin((pi*ct)/180)^2)^(1/2)/2 + 1/2);
dA = (11*B*L*((pi*sin((pi*ct)/180))/180 - (pi*cos((pi*ct)/180)*sin((pi*ct)/180))/90))/7;
end
in = [15,14,14,9,6,231,154,1500];
[Vt,At,Upt,dVt,dAt] = VAUt(in);
A = [Vt,At,Upt,dVt,dAt];
for i = 0:1:36
in(1) = i*5;
A(:,:,i) = VAUt(in);
end

採用された回答

Stephan
Stephan 2019 年 1 月 27 日
編集済み: Stephan 2019 年 1 月 27 日
Hi,
you define an array as input arguments. Matlab interprets your array as one input argument, not as 8 as you think. This is because Matlab accepts vectorized functions, which would accept vectors of every single input argument and would calculate the function for all of them with as many function results as the vector has elements. This saves time and no for loops are needed. But the other side is, that you can not give multiple input arguments the way you do.
Best regards
Stephan
  2 件のコメント
Manish
Manish 2019 年 1 月 27 日
編集済み: Manish 2019 年 1 月 27 日
Okay, then how to give the input?
Can you please give me any solution for this
[Vt,At,Upt,dVt,dAt] = VAUt(15,14,14,9,6,231,154,1500), even this is not working in the script, where as it is working fine in the command window
Stephan
Stephan 2019 年 1 月 27 日
編集済み: Stephan 2019 年 1 月 27 日
ct = 15;
B = 14;
L = 14;
...
[Vt,At,Utp,...] = VAUt(ct,B,L,...)
or you rewrite your function to accept the vector argument for scalar values of all inputs:
function [V,A,Up,dV,dA] = VAUt(in)
% Give values to function
ct = in(1);
B = in(2);
L = in(3);
r = in(4);
R = in(5);
Ach = in(6);
Ap = in(7);
N = in(8);
% calculate results
B = B*0.0254;
L = L*0.0254;
Ach = Ach*0.00064516;
Ap = Ap*0.00064516;
Vd = 22*(B^2)*L/28;
Vc = Vd/(r-1);
V = Vc*(1+0.5*(r-1)*(R+(1- cosd(ct))-((R^2)-((sind(ct))^2))^0.5));
A = Ach + Ap + 22*B*L*(R+1-cosd(ct)+((R^2)-(sind(ct))^2))/14;
Up = 22*L*N*sind(ct)*(cosd(ct)/(((R^2)-(sind(ct))^2)^0.5)+1)/7;
dV = Vc*(R/2 - cos((pi*ct)/180)/2 - (R^2 - sin((pi*ct)/180)^2)^(1/2)/2 + 1/2);
dA = (11*B*L*((pi*sin((pi*ct)/180))/180 - (pi*cos((pi*ct)/180)*sin((pi*ct)/180))/90))/7;
end
Then you can calculate the function in the given form:
A = zeros(1,5,36);
in = [5,14,14,9,6,231,154,1500];
for i = 1:36
in(1) = i*5;
[Vt,At,Upt,dVt,dAt] = VAUt(in);
A(:,:,i) = [Vt,At,Upt,dVt,dAt];
end
Note that i corrected two additional error in your for loop, due to i=0 is not valid and your code leaded to some curios results for A.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTracking and Motion Estimation についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by