有人可以将下面的代码转换为函数吗?

时间:2016-04-11 13:47:57

标签: matlab

有人可以帮我把它写成一个使用MATLAB的函数吗?

for i=1:50
  E(i+1)=E(i)+((W(i)[Sin[α(i)]-Tan[ϕ]Cos[α(i)]/F]-c*l/F))/(Cos[α(i)]+(Tan[ϕ]Sin[α(i)]/F))
end

2 个答案:

答案 0 :(得分:0)

我想你想得到以下公式:

E = cumsum(((W.*(sin(a)-tan(phi).*cos(a)./F)-c.*l./F))./(cos(a)+(tan(phi).*sin(a)./F)));

这样,您不需要for循环。 您可以输入WaphiFcl作为数组或标量。您放置的所有阵列必须大小相同。

在您的情况下,我相信Wa将是[50x1]数组而phiFc和{{1}将是标量。

答案 1 :(得分:0)

如果您想将其作为脚本运行:

for ii=1:50
  E(ii+1)=E(ii)+((W(ii)[sin(alpha(ii))-tan(phi)*cos(alpha(ii)]/F)-c*l/F))/(cos{alpha(ii))+(Tan[phi]Sin[alpha(ii)]/F))
end

所有变量(E(1),W,... 必须在父工作空间中定义。

如果您想将其作为一个功能运行:

function[E]=FooBar(F,alpha)
%% define variables thet are not inputs
E=zeros(50,1);
W=rand(50,1);
phi=rand;
c=rand;
l=rand;

for ii=1:50
  E(ii+1)=E(ii)+((W(ii)*(sin(alpha(ii))-tan(phi)*cos(alpha(ii))/F)-c*l/F))/(cos{alpha(ii))+(tan(phi)*sin(alpha(ii))/F))
end

修改 我建议创建这样的功能:

function[E]=MainFoo()
%% Code for necessary variables...

W=FooW(Winput1,Winput2);
alpha=FooAlpha(AlphaInput1,AlphaInput2);
%% other parameters calculated by Foo*** functions

E=FooE(E1,W,alpha,phi,F,c,l);

%% Nested function
  function[WW]=FooW(Win1,Win2)
    %% code to calculate W
  end
  function[Alpha]=FooAlpha(AlIn1,AlIn2)
  %% code to calculate alpha
  end
%%Other Foo*** functions

  function[OutE]FooE(E0,Ws,Alphs,Phi,FF,cc,ll)
    OutE=zeros(50,1);
    OutE(1)=E0;
    for ii=1:50
      OutE(ii+1)=OutE(ii)+((Ws(ii)*(sin(Alphs(ii))-tan(Phi)*cos(Alphs(ii)]/FF)-cc*ll/FF))/(cos(Alphs(ii))+(tan(Phi)Sin[Alphs(ii)]/FF));
end
  end
end