2017-08-03 1 views
3

J'essaie d'exécuter une boucle for dans Julia en utilisant des bornes pour l'intégration où fI et r sont des tableaux de la même longueur. Je sais que c'est incorrect, mais c'est l'essentiel de ce que je veux faire.Utilisation d'incréments dans une boucle for

a = zeros(1:length(fI)) 
    for i = 1:length(fI) 
     a[i] = (fI[i+1] - fI[i])/(r[i+1] - r[i]) 
    end 

Comment puis-je définir des incréments de n + 1 dans Julia? Je n'ai pas eu de chance de trouver la réponse ailleurs. Laissez-moi savoir si je peux clarifier quelque chose.

Je suis encore assez nouveau dans la langue.

Répondre

3

Je ne suis pas complètement sûr de ce que vous voulez faire, mais il semble que vous vouliez créer une nouvelle variable basée sur la différence entre les éléments dans les autres variables. Si tel est votre cas d'utilisation, vous pouvez utiliser diff, par ex.

fI, r = rand(10), rand(10) 
a = diff(fI) ./ diff(r) 
+0

Cela semble fonctionner plus comme je le voulais. J'aurais dû préciser, fI est en fait F (r). Pour chaque deux points de r, un tableau de 1000 éléments, je veux trouver la différence de F (r) entre eux. – ellielinc

+0

Quelque chose comme 'r = rand (1000); f (x) = x^2; diff (f. (r)) '? –

+0

F (r) et r sont donnés à partir d'un fichier de données. Donc, je veux littéralement l'équation que j'ai donnée ci-dessus. Du tableau je veux la première valeur soustraite de la deuxième valeur et ainsi de suite. Cela fait partie de l'intégration, donc il doit y avoir un moyen facile de le faire, je n'ai tout simplement pas réussi à le trouver. – ellielinc

2

Les plages sont spécifiées par start:stepsize:end. Ainsi, la réponse est for i = 1:(n+1):length(fI).

+0

Ok, que dois-je définir comme n puis? Est-ce que cela devrait aussi utiliser 'n = 1: length (fI)'? – ellielinc

+0

avec '1: n: longueur (fI)', 'n' correspond au nombre de termes que vous voulez ignorer. Je ne connais pas votre problème, donc je ne sais pas comment vous voulez définir "n". –

1

Votre code va se planter depuis le dernier "i" vous avoir accès au-delà de la longueur du tableau

fI[i+1] = fI[length(fI)+1] 


a = zeros(1:length(fI)) 
for i = 1:length(fI) 
    a[i] = (fI[i+1] - fI[i])/(r[i+1] - r[i]) 
end 

Peut-être que vous avez l'intention de ce qui suit

n = length(fI) - 1 
a = zeros(1:n) 
for i = 1:n 
    a[i] = (fI[i+1] - fI[i])/(r[i+1] - r[i]) 
end