VBA:n sisäkkäiset loopit

Funktioon syötetään yksi nx1 -vektori. Oletetaan, että vektori on esim. 20x1. Toisena tekijänä muuttujaan annetaan viive, esim. 3.

Tarkoituksena on muodostaa vektori, jossa 1. solua siirretään pykälä alaspäin (tulee 19x1 -vektori, viimeinen solu jää pois) ja ottaa siitä korrelaatio alkuperäisen kanssa. Sitten siirretään 1. solua 2 pykälää alaspäin (18x1 vektori, loppupäätä lyhennetään taas) jne. kunnes k solua on tiputettu alusta pois. Esimerkissä siis k = 3 = viive ja vektorit näyttävät tältä:

a
b a
c b a
d c b a
. . . .
s s s s
t t t t

Esimerkissä syntyy 3 korrelaatiota, jotka lasketaan yhteen.

Kaavailin alla näkyvää sisäkkäistä silmukkaa. Jostain syystä silmukka tuottaa kuitenkin vastaukseksi vain kahden ensimmäisen vektorin korrelaation kolminkertaisena eli näyttäisi, etten osannut hallita ulompaa silmukkaa, jotta saisin mukaan 1. ja 3. vektorin korrelaation. Onko k:n silmukka jotenkin viallinen?

Public function crx (v As Variant, viive as Double) as Variant
...
mat = v
i = 1
j = 1
k = 1
N = UBound(mat, 1)
Do Until k > viive
Do Until i = N
If Not IsEmpty(mat(i, 1)) Then
mat1(j, 1) = mat(i k, 1)
mat2(j, 1) = mat(i, 1)
j = j 1
End If
i = i 1
Loop
corr = WorksheetFunction.Correl(mat1, mat2)
summa = summa corr
k = k 1
Loop
crx = summa
1273
Äänestä

Muut lukivat myös

Vastaukset 1

Vanhimmat

siirretty vba-palstalle...

Äänestä

Kommentoi aloitusta


Ptr kirjoitti:

Funktioon syötetään yksi nx1 -vektori. Oletetaan, että vektori on esim. 20x1. Toisena tekijänä muuttujaan annetaan viive, esim. 3.

Tarkoituksena on muodostaa vektori, jossa 1. solua siirretään pykälä alaspäin (tulee 19x1 -vektori, viimeinen solu jää pois) ja ottaa siitä korrelaatio alkuperäisen kanssa. Sitten siirretään 1. solua 2 pykälää alaspäin (18x1 vektori, loppupäätä lyhennetään taas) jne. kunnes k solua on tiputettu alusta pois. Esimerkissä siis k = 3 = viive ja vektorit näyttävät tältä:

a
b a
c b a
d c b a
. . . .
s s s s
t t t t

Esimerkissä syntyy 3 korrelaatiota, jotka lasketaan yhteen.

Kaavailin alla näkyvää sisäkkäistä silmukkaa. Jostain syystä silmukka tuottaa kuitenkin vastaukseksi vain kahden ensimmäisen vektorin korrelaation kolminkertaisena eli näyttäisi, etten osannut hallita ulompaa silmukkaa, jotta saisin mukaan 1. ja 3. vektorin korrelaation. Onko k:n silmukka jotenkin viallinen?

Public function crx (v As Variant, viive as Double) as Variant
...
mat = v
i = 1
j = 1
k = 1
N = UBound(mat, 1)
Do Until k > viive
Do Until i = N
If Not IsEmpty(mat(i, 1)) Then
mat1(j, 1) = mat(i k, 1)
mat2(j, 1) = mat(i, 1)
j = j 1
End If
i = i 1
Loop
corr = WorksheetFunction.Correl(mat1, mat2)
summa = summa corr
k = k 1
Loop
crx = summa

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu