Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Laskimen tekemisessä ongelmia

Sivun loppuun

Cc [17.03.2006 23:10:58]

#

Olen tehnyt laskinta vb:llä ja olen päässyt siihen asti että olen alkannut tekemään laskimeen ominaisuutta kahden tuntemattoman ratkaisemiseen, mutta tässä tulee se varsinainen ongelma en tiedä millä tapaa "lähestyä" tälläistä kahden tuntemattoman yhtälöä, joten olisiko teillä (varmasti on =)) hyviä neuvoja?

Jaska [17.03.2006 23:30:36]

#

Kahden tuntemattoman yhtälö ei ole sen vaikeampi kuin yhden muuttujankaan. Siinä yhtälö on vain ratkaistava toisen muuttujan suhteen. Esimerkiksi jos yhtälö on x+y=3, tämä ratkeaa ihan samoin kuin vaikka x+1=3. Nyt vaan on otettava y mielivaltaiseksi parametriksi ja ratkaistava x: x=3-y. Tietysti olettaen, että haluat ratkaista yhtälön x:n suhteen.

Cc [18.03.2006 02:17:08]

#

tarvitsen vielä yhtälöparin ratkasemisessa apua eli haluan ratkaista tälläiset yhtälöt yhdellä kerralla:

y=3+4x
y=2x

niin miten toteutan laskimeeni tämän ratkaisemisen?

tsuriga [18.03.2006 03:29:13]

#

Emuloit jotakin yhtälöryhmän ratkaisumenetelmää. Tällainen on esimerkiksi Gaussin eliminointimenetelmä.

y=3+4x | kerrotaan jompaakumpaa yhtälöä niin,
y=2x   | että saadaan yhtä suuret kertoimet x:lle, tässä 2
<=>
y=3+4x  | nyt vähennetään toinen yhtälö toisesta (ei niin
2y=4x   | väliä kumpi, x:t häviää -> tarvitsee laskea
        | laskimellasi vain vakioiden vähennys)
<=>
y=-3    | tässä vähennettiin nyt alemmasta yhtälöstä ylempi

y=3+4x  | Ja kun tiedetään, että..
-3=3+4x | ..asetetaan y..
4x=-6   |
x=-1.5  | ..ja saatiin x.

Tietokoneella noita laskuja suorittaessa ei tarvitse tutkia kumpaa yhtälöä olisi "kannattavampaa" muokata, koneelle se on yksi ja sama peruslaskutoimituksilla.

Eli tuossa pitää erotella ohjelmallisesti vakiot ja x:ien kertoimet, sitten eikun peruslaskutoimituksia suorittamaan.

EDIT: Jos tässä nyt meni termit ja menetelmät sekaisin niin syytän kellonaikaa ;).

Blaze [18.03.2006 12:22:42]

#

Minä tein tuollaisen matriiseilla. Voin laittaa koodin (C:tä) jakoon, jos tahdotaan.

Cc [18.03.2006 13:01:32]

#

Blaze olisin kiitollinen sinun koodistasi..
Ajattelin laskimeeni sellaista "sekoälyä" eli laitetaan vaan tuo yhtälöryhmä ja painetaan laske niin ohjelma osaisi laskea kyseiset yhtälöt.. eli miten alan eroittelemaan kirjaimia luvuista?

Blaze [18.03.2006 13:15:21]

#

Menin möläyttämään matriisilaskennan tunnilla, miten vois olla jänskä koodata tuollainen yhtälöryhmän laskija, tässä se tulos: http://blaze.dyndns.ws:8080/~blaze/gauss.c
Soveltaa siis Gaussin eliminointimenetelmää: http://fi.wikipedia.org/wiki/Gaussin_algoritmi

Jaska [18.03.2006 16:54:37]

#

Eikö Matlab tai Maple kelpaa?

Heikki [18.03.2006 19:01:35]

#

Tässä yksinkertaisempi ensimmäisen asteen yhtälöparin ratkaisun algoritmi, lähtee yleisestä muodosta liikkeelle: (tämä ei ole läheskään yhtä siisti ratkaisu kuin Blazen mutta riittää yksinkertaisiin tapauksiin).

Yleinen muoto:
ax + by = e
cx + dy = f

Voidaan ratkaista x ja y:
x = (d*e - b*f) / (a*d - b*c)
y=(a*f-c*e) / (a*d - b*c)

Ratkaistaan yhtälöparin determinantti:
D = a*d - b*c

Jos D=0, yhtälöparilla ei ole ratkaisua tai ratkaisuja on äärettömän monta.
Jos D!=0, voidaan x ja y ratkaista yllä olevilla kaavoilla.

Ps. Jos laskimeen voi ohjelmoida tällaisen, laskin myös sisältänee itsessään yhtälöryhmän ratkaisimen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta