Célfüggvény érték, átlagszámítás VBA-ben

Célfüggvény érték, átlagszámítás VBA-ben
2014-03-25T10:17:18+01:00
2014-03-25T21:40:39+01:00
2022-11-30T20:05:39+01:00
afg2hd
Sziasztok!

Jobb címet nem tudtam adni, elnézést.
Szóval a probléma a következő lenne:

A programom elején definiálok egy függvényt:

Function fn(x1, x2) 
fn = 2 * (x1 ^ 2) + (x2 ^ 2) '(ez lehet más is)
End Function

'majd egy mátrixot

Dim matrix[5][2]


MEG = 5 'megoldásvektorok száma
VAL = 2 'változók száma


'a mátrixot random szám generálással feltöltöm egy adott tartományban


limit(1, 1) = -10: limit(1, 2) = 10
limit(2, 1) = -10: limit(2, 2) = 10

For i = 1 To MEG

For j = 1 To VAL
d1 = limit(j, 2) - limit(j, 1)
x(j) = limit(j, 1) + d1 * Rnd
Next j

For j = 1 To VAL
matrix(i, j) = x(j)
Next j

matrix(i, 0) = fn(x(1), x(2))

Next i


'aztán jön az átlagszámítás

amit meg szeretnék valósítani, hogy a célfüggvény mind az 5 darab (MEG)  x1 x2 elempárra kiszámítsa a fgv értéket, majd ezeket összeadja és 5-tel elosztva az excel egy cellájába kiírja a végeredményt, tehát az átlagot.

én  így gondoltam el a megvalósítást:

atlag = 0
For i = 1 To MEG
atlag = atlag + fn(matrix(i, 1), matrix(i, 2))
atlag1 = atlag / MEG
Next i

Cells(1, 3) = atlag1



' ha így nem vagyok érthető, akkor egy példa, hogy mit szeretnék:

f(x11,x12)= 20

f(x21,x22)= 10

f(x31,x32)= 15

f(x41,x42)= 12

f(x51,x52)= 13



atlag1= (20+10+15+12+13) / 5 = 14



nyilván így nem teljes a program, de nekem ez az átlagszámításos rész lenne kérdéses.

így ez jó lesz? mert cpp-ben emlékeim szerint valahogy így kellett. vagy mit javasolnátok?

segítségeteket előre is köszönöm.
Mutasd a teljes hozzászólást!

  • Ami biztos, hogy a ciklusban az
    atlag1 = atlag / MEG
    sornak nem sok értelme van, mert mindig felülírod az előzőt, így a
    Cells(1, 3) = atlag1
    sornál csak az utolsót tárolod

    Talán ha a
    atlag1 = atlag / MEG
    sor a cikluson kívül lenne
    Mutasd a teljes hozzászólást!
  • Szia!

    Ha ez Excel, akkor a matrixot be lehet tenni egy tartományba, utána pedig a subtotal függvényt meghívni.

    Pl.
    set rng=range(range("A1"),range("A1").offset(5,2))
    rng.value=matrix
    atlag=application.subtotal(1,rng)

    Üdv.
    Mutasd a teljes hozzászólást!
  • Ha már nekem válaszoltál , akkor ez oké, de ezzel a résszel mit kezdesz?
    Function fn(x1, x2)
    fn = 2 * (x1 ^ 2) + (x2 ^ 2) '(ez lehet más is)
    End Function


    Nincs cellában az értéke.
    Mutasd a teljes hozzászólást!
  • Szia!

    Van benne egy dupla ciklus, ahol feltölti a matrix elemeit az fn(x1,x2)-vel (is).Így nem kell az fn-nel külön foglalkozni szerintem.

    Ebből gondoltam, hogy a mátrixot a feltöltés után már be lehet tenni egy range-be. Csak azt kell megnézni, hogy melyik sorát/oszlopát akarjuk átlagolni.

    Üdv.
    Ps. És persze, kifejezetten az átlagszámításra kért ötletet.
    Mutasd a teljes hozzászólást!
  • "Így nem kell az fn-nel külön foglalkozni szerintem.
    "

    De külön azzal akart számolni valamit.

    Ps. És persze, kifejezetten az átlagszámításra kért ötletet.

    Arra miért nem
    atlag=application.average(fn(...), fn(...) fn(...))
    Mutasd a teljes hozzászólást!
  • Szia!

    Ebben teljesen igazad van.
    Sőt, ha feltételezzük, hogy a mátrix tartalmazza az adott átlagolandó értékeket, akkor
    atlag=application.average(matrix)
    Persze ha nem az egész mátrixxal kell számolni, hanem csak néhány sorával/oszlopával, akkor már megérheti a cellákba másolás és onnan kivenni a szükséges adatokat (a ciklusok helyett) persze az average számára.

    Üdv.
    Ps. De talán a kérdés feltevője majd még jobban megmagyarázza, mit is szeretne kiíratni a cells(1,3)-ba.
    Mutasd a teljes hozzászólást!
  • Hát igen. Ez az, amikor jó lenne tudni, hogy mire akarja használni, mert van "egy-két" variáció.

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd