2016-04-11 16 views
-2

誰かが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

はい、できます。しかし、あなたはどんな機能を探していますか? – Crowley

+0

私はあなたが言っていることを完全に理解していません。私は上記のMATLABのスクリプトとして実行するように言うことを意味した。ありがとうございます –

+0

関数とスクリプトは、両方とも '.m'ファイル形式で保存されたmatlabetの2つの非常に異なる構造です。関数は値を返す可能性があり、**は親ワークスペースと変数を共有せず、ネストされた関数を含むことがあります。スクリプト**は値を返しません。**はネストされた関数を含むことができません。**は親ワークスペースと変数を完全に共有します**。私は何が入力されているのか、何が返されるのかなどを尋ねています。 – Crowley

答えて

0

は、私はあなたが次の式を取得したいと思う:

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

この方法では、あなたがループのためには必要ありません。 配列またはスカラーとしてW,aphiFcおよびlを入力できます。配置する配列はすべて同じサイズでなければなりません。あなたのケースでは

、私はphiFclはスカラーになりながらWaは[50x1]配列であると考えています。

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 

EDIT このような機能を作成することをお勧めします。

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 
関連する問題