2016-09-26 1 views
0

以下のコードのように解決する関数があるとします。パラメータn1n2n3n4(コードを参照)ごとにbetaの値を変更するにはどうすればよいですか?matlabの異なる対応する関数に対して同じ変数に値を代入する方法はありますか?

a= 0.1; 
i = 1; 
m = 0;  
k = 1; 
beta = 1; 

while m(i) <= 10  
    n1 = a(i); 
    n2 = a(i)+1*n1; 
    n3 = a(i)+2*n1+3*n2); 
    n4 = a(i)+4*n1+5*n2+6*n3); 
    a(i+1) = a(i) + 2*n1 + 4*n2 + 12*n3 + 13*n4; 
    %something like 
    %beta = [1 2 3 4] 
    %m(i+1) = m(i) + beta[1]*k for n1 
    %m(i+1) = m(i) + beta[2]*k for n2 
    %m(i+1) = m(i) + beta[3]*k for n3 
    %m(i+1) = m(i) + beta[4]*k for n4 
    m(i+1) = m(i) + beta*k; % k is the same for all n1, n2, n3, n4. But I want to assign different beta to n1, n2, n3, n4, say beta = 1,2,3,4 for n1, n2, n3, n4, respectively. 
    i = i +1; 
end 

「m(i)」は、[n1 n2 n3 n4]の各nに異なる時間ステップを割り当てるために使用されます。進化するたびに異なる値の 'm'を 'n'に割り当てることが可能であるかどうかはわかりません。

ありがとうございました!

+4

'beta'を配列にします。 – excaza

+0

しかし、どのようにそれぞれ[n1 n2 n3 n4]に対応させることができますか? – Orangeblue

+0

配列をインデックス化する – excaza

答えて

0

これはあなたがやろうとしていることですか?

a = 0.1; 
an = [1 1+1 1+2+3*2 1+4+5*2+6*9].'; 
ii = 1; 
m = zeros(4,1);  
n = m; 
beta = [1 2 3 4].'; 
v = [2 4 12 13].'; 

while m(ii) <= 10 % <-- this should change to somthing that makes sense. 
    n(:,ii) = a(ii)*an; % this vector replaces n1 by n(1), n2 by n(2) etc... 
    a(ii+1) = a(ii) + sum(v.*n(:,ii)); 
    m(:,ii+1) = m(:,ii) + beta.*n(:,ii); 
    ii = ii+1; 
end 

私はあなたがによって何を意味するかわからないが「N4 N1、N2、N3、異なるベータは」nbetaに何も操作しないので、私はあなたとkを切り替えたかった推測しました関連性n

+0

あなたの前提は正しいです。私はその質問に説明を加えました。それで、私はそれが全く不可能かもしれないと思うのです。 – Orangeblue

+0

@Orangeblue、 '[2 4 12 13]'は 'beta'の値ですか? 'a(ii)'と 'm(ii)'の違いは何ですか? – EBH

+0

ベータ版は[2 4 12 13]とは関係ありません。ベータ= [1 2 3 4]としましょう。 a(ii)は毎回評価したい関数です。 m(ii)は毎回進化したい段階です。私たちは、後でmに対してmをプロットすることができます。 – Orangeblue

関連する問題