Moi,
Jos mulla on luvut "5000,5010,5015,5020,5025,5035,5046,5030,5084,
Eli noiden jälkeen tulisi jotain tälläistä: "5310,5335,5370" (kaavio 2), eli suuntaus olisi kiihtyvä ja isommaksi, kuten kaavioista näkyy: http://img831.imageshack.us/img831/159/kaaviot.
Onko jotain kaavaa jo olemassa tälläiselle? Ja jos ei niin olisko jotain vinkkiä miten tälläinen kannattaa toteuttaa?
EDIT: Ei se ehkä ihan noin kiihtyvä olisi, mutta ymmärsitte varmaan kuitenkin mitä meinaan. Ja tarkoitus on tehdä VB6:lla, jos se jotain kiinnostaa.. Tää varmaan kuuluis johonkin toiselle alueelle?
Jos luvut ovat a, b ja c, voit laskea esim. näin:
s = c - b (suunta)
m = (c - b) - (b - a) (muutos)
Sitten seuraavat luvut ovat:
d = c + (s + m)
e = c + (s + m) + (s + 2 * m)
f = c + (s + m) + (s + 2 * m) + (s + 3 * m)
Esim.
a = 5265
b = 5275
c = 5290
s = 15
m = 5
d = 5310
e = 5335
f = 5365
Tein tämmösen VB:llä
Private Sub Form_Load() Dim a As Integer, b As Integer, d As Integer, e As Integer, f As Integer, s As Integer, m As Integer a = InputBox("Luku 1:") b = InputBox("Luku 2:") c = InputBox("Luku 3:") s = c - b m = (c - b) - (b - a) d = c + (s + m) e = c + (s + m) + (s + 2 * m) f = c + (s + m) + (s + 2 * m) + (s + 3 * m) MsgBox d & ", " & e & ", " & f End Sub
Mitenköhän tuota pitäis muuttaa että noiden lukujen määrä voisi olla rajaton? Sekä noiden "ennusteiden" että aiempien lukujen (jotka on nyt nuo a, b ja c). Menee monimutkaiseksi..
Tuo ei muuten toimi, jos suuntaus on alaspäin, mutta se on helppo korjata. Syötin luvut "6585,6526,6526" ja vastaukseksi sain "6585,6703,6880".
Kysymyksesi on aika epätarkka. Jotta käyrän jatkoa voisi arvioida järkevästi, pitäisi pystyä tekemään jonkinlaisia oletuksia sen luonteesta. Onko käyrä pääasiassa suora (tasaisesti kasvava), paraabeli (kuten Antti oletti), eksponenttifunktio vai jotain muuta?
Kun olet tehnyt valintasi, muodosta funktio, joka tuottaa halutunlaisen käyrän. Esimerkiksi eksponenttifunktio voisi olla muotoa
f(x) = exp(a * x + b),
missä a ja b ovat vakiot.
Sitten jälkeen tarvitsee enää valita tarpeeksi monta tunnettua kohtaa kuvaajalta, jotta saa vakiot ratkaistua. Tämä on ihan tavallista yhtälönratkaisua. Kahden viimeisen perusteella saataisiin seuraavaa:
f(17) = exp(a * 17 + b) = 5275 f(18) = exp(a * 18 + b) = 5290 Välivaiheet tulevat läksyksi! Tarkka vastaus: a = ln(5290) - ln(5275) b = ln(5275) * 18 - ln(5290) * 17 Likiarvot: a = 0,002840 (1 / a = 352,2) b = 8,522
Kannattaa harkita myös jonkin muun kuin kahden viimeisen arvon käyttöä; jos näistä jompikumpi sattuisikin olemaan vähän pielessä, käyrästä voisi tulla hyvinkin jyrkkä tai vaikka laskeva.
Nyt voidaan joka tapauksessa laskea mikä tahansa luku:
f(x) = exp(a * x + b) f(1) = 5040.70 f(2) = 5055.04 f(3) = 5069.41 ... f(16) = 5260.04 f(17) = 5275.00 f(18) = 5290.00 f(19) = 5305.04 f(20) = 5320.13 ... f(30) = 5473.36 f(40) = 5631.01 f(50) = 5793.20
Kuten huomaat, ainoat jokseenkin tarkat arvot ovat ne kaksi, joita käytettiin laskuissa; alkupäästään käyrä poikkeaa huomattavastikin tunnetuista arvoista. Loppupää kuitenkin vastaa vaatimuksiasi eli kasvaa aavistuksen kiihtyvästi. Tuloksia voi parantaa kokeilemalla useampaa eri käyrää ja valitsemalla sen, joka vastaa tunnettuja lukuja parhaiten.
Onnistuisikohan jos tekisi while loopin inputbox kyselyille, ja laskisi tulosten välistä (tai useiden tulosten summien välisiä) kulmakertoimia?
Aihe on jo aika vanha, joten et voi enää vastata siihen.