Keresés

Részletes keresés

Törölt nick Creative Commons License 2006.11.27 0 0 4562
Ez hataaalmaaaasjóóóóóó. Nem értem hogy működik, de addig nem nyugszom, míg ki nem bogozom
Előzmény: Jozsef (4559)
tammmy4 Creative Commons License 2006.11.27 0 0 4561
Nekem sehogy sem akar sikerülni ez a makrós dolog. Már feladtam. Esetleg ha valaki tud segítsen!
Egy cellára a kódom a következő:

Sub Szamol()
'
' Szamol Makró
'
'
SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8"
SolverDelete CellRef:="$G$8", Relation:=3, FormulaText:="0,000001"
SolverAdd CellRef:="$G$8", Relation:=3, FormulaText:="0,000001"
SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8"
SolverSolve
End Sub

A képlet amivel számol a H8 cellában van és a következő:
ABS(1/GYÖK(G8)+2*LOG10(2,51/(C8*GYÖK(G8))+($B$3/$B$2)/3,71))
A H8 cella a célcella, a módosuló cella a G8, a korlátozó feltétel pedig, hogy G8>=0,00001.
A számolás a 8. sortól a 61. sorig kellene elvégezni. A C oszlop értéke mindig az aktuális sorhoz tartozó értékek.
Vagy, ha valakinek könnyebb akkor a file- t is elküldhetem.
Előzmény: Törölt nick (4551)
Jozsef Creative Commons License 2006.11.27 0 0 4560
A képek tördelése nem túl sikeres volt, az első Solver kép az a. rész, a második a b. részt megoldó beállítás. 
Előzmény: Jozsef (4559)
Jozsef Creative Commons License 2006.11.27 0 0 4559

Szia!

 

Általánosságban a feladatod az optimumszámítás egyik szép alapfeladata az ún. hátizsák-probléma módosított változata.

Legyen az a vektor a számsorozatod, k a kívánt összeg, egy olyan x vektort kell keresned, ahol az xi-k 1 vagy 0 értéket vehetnek fel (attól függően, hogy az ai-t kiválasztjuk-e az összegzésben vagy nem), ekkor  ax=k (a és x skaláris szorzata=k) egyenletet kell megoldanod.

Ha ezen még tovább kell finomítanod, akkor x vektorra további feltételeket kell megadnod pl.:

a.  a legtöbb egymás utáni szám legyen kiválasztva

b. legkevesebb szám kiválasztásával érjed el a megoldást.

 

Erre pedig tökéletes a Solver.

Az ábrán sárga a számsorozat, zöld az x (ahol a megoldást kapod), a világoskék mező egy segédoszlop, amiben az van, ha egymás utániak vannak kiválasztva az aktuális érték eggyel nő, ha nem, lenullázódik). A szükséges képletek az ábráról leolvashatóak (a kívánt összeg 5).

 

 

a. megoldása

 

 

b. megoldása

 

 

Üdv

József

Előzmény: Fatimia (4528)
extekergo Creative Commons License 2006.11.27 0 0 4558
Na ismét meg kellett vele kínálni. Már jó. De hogy hová tünt az első kipipálás után?

Még egyszer köszi. Később gyötörni fogom ezt a dolgot. Most el. :)
Előzmény: extekergo (4557)
extekergo Creative Commons License 2006.11.27 0 0 4557
A fenébe! Csak nem megy. Hibával leáll a makró, ami a solvert futtatná.
Előzmény: Törölt nick (4556)
Törölt nick Creative Commons License 2006.11.27 0 0 4556
Nálam is máshol volt, de rákerestem. Tőbb több helyen is megtalálta.
Előzmény: extekergo (4555)
extekergo Creative Commons License 2006.11.27 0 0 4555
Köszi. Meg van.
Igaz az én gépemen itt találtam: c:Program FilesMicrosoft OfficeOfficeMakroSolverSOLVER.XLA
Előzmény: Törölt nick (4554)
Törölt nick Creative Commons License 2006.11.27 0 0 4554

 

Browse-olni kell ha nem látszik:

 

"Note If you do not see Solver.xls in the Available References list, click Browse. In the Add Reference dialog box, locate and select the Solver.xla file, and then click Open. The Solver.xla file is typically found in the C:Program FilesMicrosoft OfficeOfficeLibrarySolver subfolder."

Előzmény: extekergo (4553)
extekergo Creative Commons License 2006.11.27 0 0 4553
"A feljövő Vb ablakban a Tools references-ben solver.xls bejelölése szükséges lehet a makróhoz"
Mondjátok meg nekem, vaksi vagyok, hogy ebben a listában nem látom a solver.xls szöveget, vagy nincs talán a gépemen telepítve?



Melyik lehet a hozzá tartozó fájl?

Segítsetek, szeretném kipróbálni, buherálni ezt a solver futtrató makrót.
Előzmény: Törölt nick (4552)
Törölt nick Creative Commons License 2006.11.27 0 0 4552

 

Parancsgomb a munkalapra a makró indításához:

Ha nem látszik a Vezérlők eszköztára akkor a Nézet -Eszköztárak -vezérlő eszköztárat bejelölni.

A megjelenő vezérlő eszköztárról a Parancsgom ikont lenyomva felrajzolható  a munkapalra.

Parancsgomb jobb kattintás-Tulajdonságok, itt a  Caption mezőben : ide a felirat.

Parancsgomb jobb kattintás Kód megjelenítése: ide  a makró kód.

(A feljövő Vb ablakban a Tools references-ben solver.xls bejelölése szükséges lehet a makróhoz.)

Előzmény: tammmy4 (4549)
Törölt nick Creative Commons License 2006.11.27 0 0 4551

Ez nálam műkszik már.

 

A teszteléshez az alábbiakat megadva a munkalapon:

 

A2 mező elnevezve y-nak

B2 mező: z-nek elnevezve.

A C2 mezőben a képlet:
=ABS(1/GYÖK(z)+2*LOG10(2,51/(y*GYÖK(z))+0,4/15*0,269))

 

( azaz az egyenlet két oldala klölnbségének abszolút értéke, ezt minimalizálja a solver.

bemenet y, keresett: z. Amely (y,z) párokra teljesül az egyenlet.

 

Az y- értékek az a2 cella alat adandók meg. (pozitív értékek, a képlet miatt)

(A z-re szintén pozitív érték fogadható el csak)

itt most a tesztelés miatt 10 értéket kell megadni y-ra.

Az a2 és b2 celákban számol, és visszaír az aktuális sorba.

Ha szükséges a solver pontossági beállításait is lehetne módosítani.

Itt a makró:

 

Sub Rögzítés2()
'
  SolverReset
  SolverAdd CellRef:="$B$2", Relation:=3, FormulaText:="0,0001"
  For i = 3 To 13
 
    Range("A2").Value = Cells(i, 1)
    Range("B2").Value = 1
    SolverOk SetCell:="$C$2", MaxMinVal:=2, ValueOf:="0", ByChange:="$B$2"
    SolverSolve UserFinish:=True
    Cells(i, 2).Value = Range("B2").Value
  ' Finish and discard the final results.
    SolverFinish KeepFinal:=2
 
  Next i
   
End Sub

 

Előzmény: tammmy4 (4549)
Törölt nick Creative Commons License 2006.11.27 0 0 4550
Hát, ezt a módszeredet sikerült tovább vinnem, hogy kilistázza a számsorozatot is, amelyek összeadásra kerültek. OFSZET, INDIREKT, CÍM, HOL.VAN függvények összeágyazásával...
tammmy4 Creative Commons License 2006.11.26 0 0 4549
Szuper, így működik. Már csak a ciklust kellene megírni, de sajna a VB-et nem ismerem.
Egy cellára a kód a következő:

Sub Szamol()
'
' Szamol Makró
' Rögzítette: Tomi, dátum: 2006.11.26.
'

'
SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8"
SolverDelete CellRef:="$G$15", Relation:=3, FormulaText:="0,000001"
SolverAdd CellRef:="$G$8", Relation:=3, FormulaText:="0,000001"
SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8"
SolverSolve
End Sub


A sorok számát kellene ciklusba rakni 8-tól 61-ig.
Illetve nem tudom van-e lehetőség a munkalapra egy "Újraszámol" feliratú nyomógombot rakni?
Előzmény: Törölt nick (4543)
toccata Creative Commons License 2006.11.26 0 0 4548
Csak hármat lehet. Legalábbis eddig nekem csak ennyit sikerült. :)
No meg a megoldás is csak szomszédos értékekre működik. Csak gondoltam, mutatok egy másfélét. Bár egy kis továbbkombinálással még jó is lehet.
Előzmény: Fatimia (4546)
Fatimia Creative Commons License 2006.11.26 0 0 4547
Persz, működik azok nélkül is, csak azért került bele, hogy ha kifut a SZUM intervallumma, akkor ez az üres " " cellákkal látható legyen, illetve ne zavarjon be az "összképbe"
Előzmény: tbando (4544)
Fatimia Creative Commons License 2006.11.26 0 0 4546
sajnos ez csak félmegoldás, mert a feltételes formázásnál csak 4 kritériumot lehet megadni
Előzmény: toccata (4545)
toccata Creative Commons License 2006.11.26 0 0 4545
Egy másik megoldás:
Mondjuk az A1 cella tartalmazza a keresett összeget. Az A oszlop többi cellája pedig a sorozatot. Feltételes formázással az első (A2) cellára ki kell adni, hogy a függyvény (az első választó rubrika, ahol alapban a cella értéke található) legyen (A2+A1)=$A$1 és a formázásnál mondjuk a háttérszín legyen kék.
Majd második feltételként pedig ugyanígy a függvény legyen (A2+A3)=$A$1 a háttérszín pegi akár ugyan az, mint az előbb.
Ezután az ecsettel csak le kell másolni végig a cella formátumát addig, amíg a sorozat tart. Amennyiben két egymás utáni szám értéke megegyezik az A1 tartalmával, zöld háttéren lesznek láthatóak.
Remélem, érthető.
Előzmény: Fatimia (4539)
tbando Creative Commons License 2006.11.26 0 0 4544
Bár azóta újra belegondolva mégsem értem, hogy mi szükség van a DARAB függvényre, sőt az HA-ra se. Ezek nélkül is kéne müködnie.
Előzmény: tbando (4541)
Törölt nick Creative Commons License 2006.11.26 0 0 4543
Megtaláltam a neten:
How to use the Microsoft Excel Solver functions in a VBA macro
http://support.microsoft.com/kb/843304
A "Compile Error: Sub or Function not defined." megoldására:

Eszközök -Makró -Visual basic
A Visal basic szerkesztőben Tools - References
A listában a solver.xls-t kipipálni.
Előzmény: tammmy4 (4542)
tammmy4 Creative Commons License 2006.11.26 0 0 4542
Igazából már a feladat számításos része megoldódott. Köszönet a sok segítségért mindenkinek.
A problémám már csak a makró rögzítésével és megírásával van. A 4499-es hozzászólásomban már írtam gogy mi is a probléma. Azóta sem sikerül futtatható makrót gyártanom. Esetleg valaki otthon van a makrók terén?
Előzmény: tammmy4 (4512)
tbando Creative Commons License 2006.11.26 0 0 4541

Jobb mint az enyém. Mert nekem valszeg nem jutott volna eszembe az összeghossz DARAB függvényes beállítása. Még tán akkor sem, ha 200 hosszúságú sorozatot kellene elemeznem. Bár valszeg ez esetben valami komplikált vezérlést azért kieszeltem volna. Az INDEX függvényes kijelölést például, vagy a SOR-függvényest.

 

Mindig tanul az ember.

Előzmény: Fatimia (4539)
Törölt nick Creative Commons License 2006.11.26 0 0 4540
Itt már elhangzott a módszer. Először rögzíteni a kézzel végzett solverezést, majd a kapott makro kódot átszerkeszteni ( ciklusossá tenni, hogy ismételje meg egy egész oszlop mezőire, venni soron következő sort,y értéket ebből, átmásolni a makro eredeti y cellájáb aelvégezni a solverezést, átmásolni a kapott z értéket... Ezt kéne kódolni. A kézi solverezésnél tapasztalétam, hogy amikor átírtam kézzel az y-t, akkor egyből átíródott a z értéke, is pedig még nem indult el a szolverezés, (perzse helytelen z érték lett), ezzel csak az volt a probléma, hogy ha ez nem pozitív értékre íródott át, akkor képlethiba lépett fel és nem indult a solverezést, hát ilyenekre is figyelni kell, beírni egy pozitví értéket a z-re a solverezés előtt.
Előzmény: extekergo (4537)
Fatimia Creative Commons License 2006.11.26 0 0 4539
Szerinted én nem "többfutamosan" csináltam meg? :) De. Gagyinak gagyi de hibátlanul működik.A. oszlopban a számsorozat. B. oszloptól pedig SZUM-ok, ahol a számsorozat első két tagja van összeadva relatívan. =HA(DARAB(A2:A3)=B$1;SZUM(A2:A3);" ")Ezek oszlopcímeiben az a darabszám van megadva (a képletben a B$1), ami a az összeadott számok db-számát adja meg.Na. és ez a képlet van lehúzva. Következő "C" oszlopban meg már 3 számot ad össze - és így tovább egészen tíz számig.Ja persze csináltam egy kiemelt cellát, amibe a megkeresendő számot kell beírni - és feltételes formázással az imént leírt táblázatban az ezzel egyező értékek piros cellásak lesznek.ennyi.
Előzmény: tbando (4533)
Törölt nick Creative Commons License 2006.11.26 0 0 4538
Elküldtem a közelítő formulás megoldást a Re (y) = 1000 - 1e6 tartományra. Lehet persze más tartományokra is kiszámolni ilyen spline-os közelítést.
Itt a ha() formula több cellára lett bontva, és az első oszlop,a küldött munkalapon a H-adja a z értékeket. A munkalapodon a z oszlopa mellé be kell szúrni annyi oszlopoit, amennyit a küldött képlet oszlopai igényelnek, id ebemáűsolni a képlet oszlopait, és utána el lehet rejteni annak oszlopait kivéve az elsőt.
Ez a megoldás elég pontos, min. kb 3 tizedesig, ha jól emlékszem.

A solveres makrozás is egy lehetséges megoldás, de lehet hogy vannak buktatói. Megírni még nem olyan nehéz, de nem tudom milyen gyorsan futna sok értékre, meg lehetnek egyéb okok miatti leállások, amit a kézi solverezésnél tapasztaltam. De kiváncsi vagyok, ha valaki megírja, mert nekem az itthoni gépemen nincs telepítve a solver, és nincs cd-m.

Én úgy értettem a talált előadás anyagból , hogy van a tapasztalati(mérések alapján felvett) Moody diagram és ezt közelítgetik ilyen-olyan képlettet. Az egyik ilyen képletet próbáljuk itt tovább közelíteni, mert nem explicit alakú. Eleve ezek a képletek is hibát visznek be, és ennek közelítésével mi még további hibákat viszünk be.
Az is egy lehetséges megoldás lenne, hogy egy ilyen diagramot digitalizálni, és közvetlenül erre pl. spline-os görbeillesztést számolni a számítógéppel.. Ilyesmit már láttam más területen, ott a digitlaizálás okozta hiba (görbevastagság...) nagyságrenddel kisebb volt mint magából a mérésből adódó hiba.


Előzmény: tammmy4 (4535)
extekergo Creative Commons License 2006.11.26 0 0 4537
"Viszont igazán nem értem miért előnyösebb itt."

Nem előnyösebb. Én értelmeztem először félre a problémát, s ezért ajánlgattam. De már látom (megkaptam a táblát) a szolveres-egycellás értékszámítás a fő probléma. Sajna arra viszont én sem látok megoldást, hogyan lehet automatizálni a többi cellára annak a futását. De ha valaki tud megoldást -s bármire is- ne tartsa magába, ossza meg velem/velünk, mert ennek a topiknak abban látom az értelmét.
Előzmény: Törölt nick (4522)
extekergo Creative Commons License 2006.11.26 0 0 4536
Nem osztanád meg velünk a megoldást? :)
Előzmény: Fatimia (4529)
tammmy4 Creative Commons License 2006.11.26 0 0 4535
Írok pár szót erről a csőszrlódásról, hogy világosabb legyen.
Először is van lamináris és turbulens áramlás. Az áramlás jellemzésére a Reynolds számot (Re) használják, ha Re<2320 akkor az áramlás lamináris. Lamináris áramlással a gyakorlatban nemigen foglalkozunk. A turbulens áramlásnál megkülönböztetünk olyat ahol a csövet hidraulikailag simának feltételezzük és olyat amit érdesnek. A sima cső szintén nemigen jellemző a gyakorlatban. Ami a gyakorlatra jellemző az a turbulens áramlás érdes csőben.
A cső surlódását a csősurlódási tényező jellemzi (Lambda). Lambda pedig függ a cső átmérőjétől, a cső érdességétől és a Reynolds számtól.
Röviden ennyi.
A kérdés továbbra is a lambda kiszámításának megoldása a szolveres megoldás makrózásával.
Előzmény: Törölt nick (4526)
tbando Creative Commons License 2006.11.26 0 0 4534
 Mert figyelmetlen (hülye) voltam, és a képlet másolásánál egy súlyos nagyságrendi tévedést vétettem. Így sajnos nagyobb a lefedendő z intervallum, tehát a javasolt módszem a 3 tizedes pontosságra csak viszonylag szükebb reynoldsok mellett müködne. Még szerencse, hogy találtál tammyboynak egy adekvátabb képletet.  
Előzmény: Törölt nick (4525)
tbando Creative Commons License 2006.11.26 0 0 4533

Örülök, hogy neked sikerült. Én csak egy elég gagyi többfutamos megoldást látok. 

Előzmény: Fatimia (4529)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!