[ mirjanagb @ 24.10.2007. 20:54 ] @
da li neko moze da mi pomogne i napise vba code za ovu formulu:

formula 1:

1/(s-g)

za s>g

vba code bi bio:

Citat:

Function Rf(ByVal X, ByVal Y) As Double
s = imsum(X, improduct("i", Y))
Fs = imdiv(1, (imsum(s, -0.02)))
Rfs = imreal(Fs)
Rf = Rfs
End Function


formula 2:

(1+s)^-1/theta

vba code:

Citat:

Function Rf1(ByVal X, ByVal Y) As Double
s = imsum(X, improduct("i", Y))
theta = 1.84
Fs = impower(imsum(1, s), -1 / theta)
Rfs = imreal(Fs)
Rf1 = Rfs
End Function


formula 3:

-1/theta*ln[1-e^-s(1-e^-theta)]
pri cemu je alfa = (1-e^-theta)

theta = 1.84
^ bi znacilo, naravno 'na'


meni treba sad vba code, kombinujuci prve dve formule, za trecu formulu.

nikako ne mogu da dobijem tacan rezultat.

hvala na pomoci unapred!!!
[ Jpeca @ 26.10.2007. 10:00 ] @
Nešto neštima kod ove prve dve funkcije - radiš sa kompleksnim brojevima, a rezultat je realan? Takve funkcije nećeš moći da iskoristiš za f3.

Kakko Excel kompleksne brojeve predstavlja kao string oblika x+iy, moj predlog je da funkcije koncipiraš tako da prihvataju takav string kao ulaz i daju takav string kao rezultat
Code:

Function Rf2(s As String) As String
...
End Function


U tom slučaju ako želiš da posebno zadaš realni i imaginarni deo (u dve susedne ćelije npr) prvo uradiš Complex(x, y) pa tako dobijen rezultat proslediš funkciji.

Davno je bilo kad sam radio sa logaritmima, pa nisam siguran da ne postoji još neka caka, ali očigledno je da -1/theta možeš ubaciti unutar logaritma i tada to postaje stepen. Na taj način deo funkcije 3 unutar ln se svodi na f2(z) gde je z = e^-s*alpha. f1 ja nisam uspeo nigde da iskoristim što ne znači da ne može. Tako bi dobila kod za f3
Code:

alpha = 1 - Exp(-theta) ' realan broj
z = ImExp(ImProduct(-s, alpha))
Rf3= ImLn(Rf2(z))
[ mirjanagb @ 27.10.2007. 21:43 ] @
evo saljem excel fajl, gde je najbolje objasnjeno ...

ja prve dve formule tacno dobijem, bar to vidim po istom rezultatu kad formulu napisem u excelu i u vb. ali trecu nikako ne mogu da dobijem, pa ne znam u cemu je problem ...

hvala na pomoci ....
[ Jpeca @ 28.10.2007. 00:37 ] @
Koristim Excel 2007, pa ovaj tvoj fajl ne mogu da izršim jer ima referencu na prethodnu vba biblioteku ATPVBAEN.XLA, koja kod mene ne postoji. Ipak koliko sam video kod vrlo mi je sumnjiva jedna banalna stvar:
impower(e, -theta) kao i impower(e, -s)
proveri u debageru ali čini mi se da je e 0! Koristi umesto toga ImExp() .
Da ne bi razmišljala o takvim greškama na početku modula stavi Option Explicit i na taj način obaveži sebe da deklarišeš sve promenljive u kodu.
[ mirjanagb @ 28.10.2007. 00:56 ] @
ma i ja kuci koristim 2007.

i ubi se razmisljajuci sto nece da mi radi funkcija ...

nije valjda da moram da radim na 2003 da bi dosla do rezultata????

[ Jpeca @ 28.10.2007. 16:30 ] @
Pretpostavljam da to kod tebe nije problem jer kako bi ti radile prve dve funkcije? Verovatno imaš instaliran odgovorajući Add-In jer kod mene ništa od toga ne radi.
Za korišćenje kompleksnih funkcija u samom Excelu 2003 (u radnom listu, ne VBA) bilo je potrebno da uključi Analysis Toolpak Add-in. Slično da se dobiju iste funkcije u VBA trebalo je da se uključi VBA Analysis Toolpak. U novoj verziji Excel-a ove funkcije postale su deo standardnog skupa funkcija, bez potrebe instaliranja Add In-a. U VBA ovim funkcijama se može pristupiti kao funkijama radnog lista (Application.WorksheetFunction objekat). Prepravio sam tvoj kod tako da ga mogu izvršavati iz 2007 i ispravio uočene greške (ne deklarisano e, ImProduct (-1,s) umesto –s. Tako da bi kod za f3 izgledao:
Code:

Function Rf2(ByVal X, ByVal Y) As Double
' Prilagodjeno za Excel 2007
'
theta = 1.84
alfa = 1 - Exp(-theta)
With Application.WorksheetFunction
   s = .ImSum(X, .ImProduct("i", Y))
   Fs = .ImProduct(-1 / theta, .ImLn(.ImSum(1, .ImProduct(-1, .ImExp(.ImProduct(-1, s)), alfa))))
   Rfs = .ImReal(Fs)
End With
Rf2 = Rfs
End Function 


Uspeo sam da izvršim i dobijem rezultat koji se nažalost ne slaže sa rezultatima dobijenim „po knjizi“. U čemu je problem ja nisam kompetnentan da protumačima. (Drago bi mi bilo da se podsetim studentskih dana i Laplasove transformacije ali sve knjige o tome već sam o davno otuđio, a ni vremena nemam na pretek). Možda formuliši pitanje za matematički deo foruma (Meni je lično sumnjivo da je algoritam za inverznu laplasovu transformaciju koji si dala univerzalan – možda važi za racionalne izraze a ne za logaritime i eksponente? ali da se ne mešam u ono što ne znam).