Mikä ohjelma on lineaarinen c:ssä. Lyhyesti lineaarisesta ohjelmoinnista

Kotiin / Reitittimet

Jos kaikki ohjelman käskyt suoritetaan peräkkäin, peräkkäin, tällainen ohjelma kutsutaan lineaarinen. Tarkastellaan esimerkkinä ohjelmaa, joka laskee tuloksen tietyllä kaavalla.

Tehtävä 1.1. Laskeminen kaavalla

Kirjoita ohjelma, joka muuntaa lämpötilan Fahrenheit-asteina Celsius-asteiksi käyttämällä kaavaa:

missä C on lämpötila Celsius-asteina ja F on lämpötila Fahrenheit-asteina.

Ennen kuin kirjoitamme mitään ohjelmaa, meidän on selkeästi määriteltävä, mitä siihen on syötettävä ja mitä meidän pitäisi saada tuloksena.

IN tässä tapauksessa:

Alkutiedot ovat yksi reaaliluku, joka on lämpötila celsiusasteina,

Tuloksena on toinen reaaliluku.

Ennen kuin kirjoitat ohjelman, avataan Visual C++ -integroitu ympäristö:

Käynnistä/Ohjelmat/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) Tiedosto > Uusi...

2) Avautuvassa ikkunassa:

Valitse Win32 Console -sovellustyyppi;

Kirjoita projektin nimi Projektin nimi -tekstiruutuun;

Syötä (valitse ...-painikkeella) sen hakemiston nimi, jossa projektitiedostot sijaitsevat, Sijainti-tekstikenttään, esimerkiksi G:/ASOIZ/

Napsauta hiiren kakkospainikkeella OK-painiketta.

3) Win32 Console Application - Stepl of 1 -valintaikkuna avautuu ja siinä:

Valitse tyyppi Tyhjä projekti;

Napsauta Valmis-painiketta.

4) Napsautuksen jälkeen näkyviin tulee Uusi projekti -ikkuna, jossa napsauta OK-painiketta.

1) Tiedosto > Uusi... Tämä avaa Uusi-valintaikkunan.

2) Tiedostot-välilehdellä:

Valitse tiedostotyyppi (tässä tapauksessa: C++ lähdetiedosto);

Kirjoita Tiedostonimi-tekstiruutuun haluamasi tiedostonimi;

Lisää projektiin -valintaruudun on oltava käytössä;

Napsauta OK.

Kirjoitamme seuraavan ohjelmatekstin:

Katsotaanpa jokaista ohjelman riviä erikseen.

Ohjelman alussa kirjoitetaan esikäsittelyohje, jonka mukaan ohjelman lähdetekstiin yhdistetään otsikkotiedosto . Tämä on tiedosto, joka sisältää kuvaukset cin- ja cout-I/O-operaattoreista.

Mikä tahansa C++-ohjelma koostuu funktioista, joista yhdellä on oltava main-nimi, mikä osoittaa, että siitä ohjelman suoritus alkaa. Sulkujen jälkeen funktion runko kirjoitetaan hakasulkeisiin ( ), ts. ne lausunnot, jotka on suoritettava.

Jokaisella mallilla ohjelmaa kirjoitettaessa on muoto:

#sisältää<…>

#sisältää<…>

muuttujien ilmoittaminen;

alkutietojen syöttäminen;

tuloksen laskeminen;

tulosta tulos;

Lähdetietojen ja tulosten tallentamiseksi sinun on varattava riittävästi tilaa RAM. Tämä tehdään lauseella 2. Ohjelmamme täytyy tallentaa kaksi arvoa: lämpötila Celsius-asteina ja lämpötila Fahrenheit-asteina, joten lauseessa määritellään kaksi muuttujaa. Yhtä, joka on tarkoitettu lämpötilan tallentamiseen Fahrenheit-asteina, kutsutaan fahriksi, toista (celsiusasteina) kutsutaan Celsiksi. Ohjelmoija antaa muuttujille nimet niiden tarkoituksen perusteella. Nimi voi koostua vain latinalaisista kirjaimista, numeroista ja alaviivasta, eikä se saa alkaa numerolla.

Kun kuvaat mitä tahansa muuttujaa, sinun on ilmoitettava se tyyppi. Koska lämpötila ei voi ottaa vain kokonaislukuja, muuttujille valitaan todellinen tyyppi kellua

Päätyypit:

int (lyhyt, etumerkitön) – kokonaisluvut,

float (double, long double) – todellinen

char – hahmo

bool – loogista

Jotta ohjelman käyttäjä tietäisi, missä vaiheessa tietoja on syötettävä näppäimistöltä, käytetään ns. syöttökehotetta (operaattori 3). Operaattorissa määritetty näkyy näytöllä. cout merkkijono ja kohdistin siirtyy seuraavalle riville. Siirry seuraavalle riville käyttämällä endl.

Käskyssä 4 yksi numero syötetään näppäimistöltä muuttujaan fahr. Tätä tarkoitusta varten käytetään vakioobjektia cin ja poiminta (lue) >>. Jos sinun on syötettävä useita arvoja, käytä toimintoketjua >>.

Operaattori 5 arvioi lausekkeen, joka on kirjoitettu oikealle toimeksiantotoiminnot(merkitty =-merkillä), ja tulos liitetään cels-muuttujaan, eli tallennetaan tälle muuttujalle varattuun muistiin. Ensimmäinen koko vakio 5 jaetaan arvolla suudella vakio 9, niin tämän operaation tulos kerrotaan tuloksella, joka vähennetään luvusta 32 muuttujasta fahr.

Tuloksen näyttämiseksi operaattorissa 6 käytetään objektia cout. Näytölle tulee viidestä elementistä koostuva ketju. Tämä on linja "Fahrenheit:", muuttuva arvo fahr, rivi ", Celsius-asteina:", muuttuva arvo cels ja rivinvaihtooperaattori endl.

Tämän ohjelman viimeinen lause (lause 7) on tarkoitettu palaamaan siitä ja siirtämään arvoa ulkoiseen ympäristöön.

Seuraavaksi kokoamme ohjelman. Voit tehdä tämän painamalla työkalupalkin painiketta tai näppäinyhdistelmää Ctrl+F7. Tulostusikkunassa (ruudun alareunassa) pitäisi näyttää viesti 0 virhettä, 0 varoitusta (0 virhettä, 0 varoitusta). Jos on virheitä, tarkista alkuperäisestä.

Käynnistä ohjelma painamalla työkalurivin painiketta tai näppäinyhdistelmää Ctrl+F5.

Ohjelmaa käynnistettäessä näemme venäläisten merkkien sijasta ???, joka johtuu erilaisista standardeista kyrillisten merkkien koodauksessa käyttöjärjestelmät MS DOS ja Windows. Korjaa tämä lisäämällä ohjelmaan CharToOem-toiminto (lisäykset on korostettu punaisella selvyyden vuoksi)

#sisältää

#sisältää

merkki* RUS(vakiomerkki* teksti)

CharToOem(teksti, buf);

kellua fahr, Cels;

cout<

cels = 5/9 * (fahr - 32);

cout<

cout<

Toiminto Venäjä () ei voi käyttää useammin kuin kerran toimintoketjussa<< для одного объекта cout, joten jaoimme sen kahteen osaan.

Kuten näet, ohjelman vakaan suorittamisen tulos on nolla! Tämä johtuu tavasta, jolla lauseke arvioidaan. Katsotaan uudestaan ​​operaattoria 4. Vakiot 5 ja 9 ovat tyyppiä kokonaisluku, joten niiden jaon tulos on myös kokonaisluku. Jatkolaskutoimien tulos ei tietenkään voi olla muuta kuin nolla. Tämän virheen korjaaminen on yksinkertaista - kirjoita vain ainakin yksi vakioista reaalilukuna, esimerkiksi:

Cels = 5. / 9 * (fahr - 32);

Laboratoriotyö nro 1

Aihe: "Lineaaristen algoritmien ohjelmointi. Työskentely debuggerin kanssa"

Teoksen tarkoitus

1.1 Yksinkertaisimman ohjelmarakenteen hallinta C-kielellä.

1.2 C-kielen syötteiden/tulosteiden organisointitaitojen hankkiminen.

Tekninen tuki

2.1 Henkilökohtainen tietokone

2.2 Näppäimistö.

2.3 Näyttö

2.4 Tulostuslaite.

Ohjelmisto

3.1 Windows-käyttöjärjestelmä

3.2 Ohjelmointijärjestelmä Visual C++ versio 6.0 tai Borland C++ versio 3.1 ja uudemmat versiot.

Ilmoitus ongelmasta

Yksinkertaisen ohjelman kirjoittaminen tietojenkäsittelyllä.

5.1 Työn aihe ja tarkoitus.

5.2 Ongelman kuvaus.

5.3 Ohjelmien teksti.

5.4 Ohjelman suorituksen tulokset.

5.5 Ohjelmaalgoritmikaaviot.

Yleistä tietoa

Lineaarinen ohjelma

Jos kaikki ohjelman käskyt suoritetaan peräkkäin, peräkkäin, tällainen ohjelma kutsutaan lineaarinen. Tarkastellaan esimerkkinä ohjelmaa, joka laskee tuloksen tietyllä kaavalla.

Tehtävä 1.1. Laskeminen kaavalla

Kirjoita ohjelma, joka muuntaa lämpötilan Fahrenheit-asteina Celsius-asteiksi käyttämällä kaavaa:

missä C on lämpötila Celsius-asteina ja F on lämpötila Fahrenheit-asteina.

Ennen kuin kirjoitamme mitään ohjelmaa, meidän on selkeästi määriteltävä, mitä siihen on syötettävä ja mitä meidän pitäisi saada tuloksena.

Tässä tapauksessa:

Alkutiedot ovat yksi reaaliluku, joka edustaa lämpötilaa celsiusasteina,

Tuloksena on toinen reaaliluku.

Ennen kuin kirjoitat ohjelman, avataan Visual C++ -integroitu ympäristö:

Käynnistä/Ohjelmat/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) Tiedosto > Uusi...

2) Avautuvassa ikkunassa:

Valitse Win32 Console -sovellustyyppi;

Kirjoita projektin nimi Projektin nimi -tekstiruutuun;

Syötä (valitse ...-painikkeella) sen hakemiston nimi, jossa projektitiedostot sijaitsevat, Sijainti-tekstikenttään, esimerkiksi G:/ASOIZ/

Napsauta hiiren kakkospainikkeella OK-painiketta.

3) Win32 Console Application - Stepl of 1 -valintaikkuna avautuu ja siinä:

Valitse tyyppi Tyhjä projekti;

Napsauta Valmis-painiketta.

4) Napsautuksen jälkeen näkyviin tulee Uusi projekti -ikkuna, jossa napsauta OK-painiketta.

1) Tiedosto > Uusi... Tämä avaa Uusi-valintaikkunan.

2) Tiedostot-välilehdellä:

Valitse tiedostotyyppi (tässä tapauksessa: C++ lähdetiedosto);

Kirjoita Tiedostonimi-tekstiruutuun haluamasi tiedostonimi;

Lisää projektiin -valintaruudun on oltava käytössä;

Napsauta OK.

Kirjoitamme seuraavan ohjelmatekstin:

Katsotaanpa jokaista ohjelman riviä erikseen.

Ohjelman alussa kirjoitetaan esikäsittelyohje, jonka mukaan ohjelman lähdetekstiin yhdistetään otsikkotiedosto . Tämä on tiedosto, joka sisältää kuvaukset cin- ja cout-I/O-operaattoreista.

Mikä tahansa C++-ohjelma koostuu funktioista, joista yhdellä on oltava main-nimi, mikä osoittaa, että siitä ohjelman suoritus alkaa. Sulkujen jälkeen funktion runko kirjoitetaan hakasulkeisiin ( ), ts. ne lausunnot, jotka on suoritettava.

Jokaisella mallilla ohjelmaa kirjoitettaessa on muoto:

#sisältää<…>

#sisältää<…>

muuttujien ilmoittaminen;

alkutietojen syöttäminen;

tuloksen laskeminen;

tulosta tulos;

Lähdetietojen ja tulosten tallentamiseksi sinun on varattava tarpeeksi tilaa RAM-muistista. Tämä tehdään lauseella 2. Ohjelmamme täytyy tallentaa kaksi arvoa: lämpötila Celsius-asteina ja lämpötila Fahrenheit-asteina, joten lauseessa määritellään kaksi muuttujaa. Yhtä, joka on tarkoitettu lämpötilan tallentamiseen Fahrenheit-asteina, kutsutaan fahriksi, toista (celsiusasteina) kutsutaan Celsiksi. Ohjelmoija antaa muuttujille nimet niiden tarkoituksen perusteella. Nimi voi koostua vain latinalaisista kirjaimista, numeroista ja alaviivasta, eikä se saa alkaa numerolla.

Kun kuvaat mitä tahansa muuttujaa, sinun on ilmoitettava se tyyppi. Koska lämpötila ei voi ottaa vain kokonaislukuja, muuttujille valitaan todellinen tyyppi kellua

Päätyypit:

int (lyhyt, etumerkitön) – kokonaisluvut,

float (double, long double) – todellinen

char – hahmo

bool – loogista

Jotta ohjelman käyttäjä tietäisi, missä vaiheessa tietoja on syötettävä näppäimistöltä, käytetään ns. syöttökehotetta (operaattori 3). Operaattorissa määritetty näkyy näytöllä. cout merkkijono ja kohdistin siirtyy seuraavalle riville. Siirry seuraavalle riville käyttämällä endl.

Lause 4 suorittaa näppäimistön syöttämisen

Tätä tarkoitusta varten käytetään vakioobjektia cin ja poiminta (lue) >>. Jos sinun on syötettävä useita arvoja, käytä toimintoketjua >>.

Operaattori 5 arvioi lausekkeen, joka on kirjoitettu oikealle toimeksiantotoiminnot(merkitty =-merkillä), ja tulos liitetään cels-muuttujaan, eli tallennetaan tälle muuttujalle varattuun muistiin. Ensimmäinen koko vakio 5 jaetaan arvolla suudella vakio 9, niin tämän operaation tulos kerrotaan tuloksella, joka vähennetään luvusta 32 muuttujasta fahr.

Tuloksen näyttämiseksi operaattorissa 6 käytetään objektia cout. Näytölle tulee viidestä elementistä koostuva ketju. Tämä on linja "Fahrenheit:", muuttuva arvo fahr, rivi ", Celsius-asteina:", muuttuva arvo cels ja rivinvaihtooperaattori endl.

Tämän ohjelman viimeinen lause (lause 7) on tarkoitettu palaamaan siitä ja siirtämään arvoa ulkoiseen ympäristöön.

Seuraavaksi kokoamme ohjelman. Voit tehdä tämän painamalla työkalupalkin painiketta tai näppäinyhdistelmää Ctrl+F7. Tulostusikkunassa (ruudun alareunassa) pitäisi näyttää viesti 0 virhettä, 0 varoitusta (0 virhettä, 0 varoitusta). Jos on virheitä, tarkista alkuperäisestä.

Käynnistä ohjelma painamalla työkalurivin painiketta tai näppäinyhdistelmää Ctrl+F5.

Ohjelmaa käynnistettäessä näemme venäläisten merkkien sijasta ???, joka johtuu erilaisista kyrillisten merkkien koodausstandardeista MS DOS- ja Windows-käyttöjärjestelmissä. Korjaa tämä lisäämällä ohjelmaan CharToOem-toiminto (lisäykset on korostettu punaisella selvyyden vuoksi)

#sisältää

#sisältää

merkki* RUS(vakiomerkki* teksti)

CharToOem(teksti, buf);

kellua fahr, Cels;

cout<

cels = 5/9 * (fahr - 32);

cout<

cout<

Toiminto Venäjä () ei voi käyttää useammin kuin kerran toimintoketjussa<< для одного объекта cout, joten jaoimme sen kahteen osaan.

Kuten näet, ohjelman vakaan suorittamisen tulos on nolla! Tämä johtuu tavasta, jolla lauseke arvioidaan. Katsotaan uudestaan ​​operaattoria 4. Vakiot 5 ja 9 ovat tyyppiä kokonaisluku, joten niiden jaon tulos on myös kokonaisluku. Jatkolaskutoimien tulos ei tietenkään voi olla muuta kuin nolla. Tämän virheen korjaaminen on yksinkertaista - kirjoita vain ainakin yksi vakioista reaalilukuna, esimerkiksi:

Cels = 5. / 9 * (fahr - 32);

Yksinkertaisista komennoista (operaattoreista) koostuvia ohjelmia kutsutaan lineaariseksi.
Yksinkertaiset komennot (algoritmin yksinkertaiset ohjeet) ovat komentoja, jotka eivät käytä ehtoja suorituksensa aikana. Yksinkertaiset operaattorit sisältävät komennot (operaattorit) osoituksen, tulon ja lähdön sekä apualgoritmin (alirutiinin) kutsumisen.

Tehtäväoperaattori. Se asettaa tai muuttaa jonkin muuttujan nykyisen arvon. Tämä muuttaa tälle muuttujalle varatun tietyn muistielementin sisältöä. Koska minkä tahansa algoritmin tavoitteena on saada haluttu arvo tietyssä muistipaikassa, lähes kaikki ohjelmat sisältävät tämän operaattorin. I/O-operaattorit. Tiettyjen muuttujien alkuarvojen määrittämiseen käytetään vakiomuotoisia tiedonsyöttömenetelmiä, jotka koostuvat prosessin nimestä ja syöttöluettelosta, joka sisältää niiden muuttujien nimet, joiden arvot syötetään näppäimistöltä tai tiedostosta, ts. Muuttujille annetaan tietyt arvot.
Useammin alkuarvojen määrittämiseen on kätevämpää käyttää syöttökomentoa määrityskomentoa, koska jos ohjelmaa on käytettävä eri aloitustiedoilla, ei ohjelman tekstiä tarvitse muuttaa.
Jos algoritmitietue sisältää syöttökomennon, sen suoritus keskeytyy ja ohjaus siirtyy ohjelmalle, joka voi syöttää tietoja. Tietojen syöttämisen jälkeen ohjaus siirtyy algoritmin seuraavaan komentoon.
Pascalissa tietojen syöttömenettely näyttää tältä:
READ(syöttölista);
READLN (syöttöluettelo).
Kun READ- ja READLN-proseduurit suoritetaan, ohjelma siirtyy tietojen syöttöä odottavaan tilaan. Jos syöttöluetteloon on määritetty useita muuttujia, ne voidaan syöttää yhdelle riville, erotettuna toisistaan ​​välilyönnillä, tai erillisillä riveillä (sarakkeessa) täydentämällä kunkin arvon syöttäminen Enter-näppäimellä.
Toimenpide ei valmistu ennen kuin arvot on syötetty kaikille luettelon muuttujille. Syötettyjen arvojen tyypin on vastattava vastaavan muuttujan arvoja.
READLN-käsky eroaa READ-käskystä siinä, että kun tarvittava tietomäärä on syötetty, kohdistin siirtyy seuraavalle riville.
Jos tietoja syötetään näppäimistöltä, syöttölista on muuttujien luettelo, ts. muuttujien nimien sarja pilkuilla erotettuina. Jos syöte on tiedostosta, niin syöttöluettelon ensimmäinen muuttuja on tiedostomuuttuja, joka liittyy todellisen tiedoston nimeen.
Laskentatulosten tulostuksen vakiomenettelyjä käytetään niiden arvojen näyttämiseen näytöllä, tulostimella tai tiedostolla. Pascalissa päättelymenettelyt näyttävät tältä:
WRITE(tulostuslista);
WRITELN (tulosluettelo).
Tuloselementtien luettelo on paljon laajempi kuin syöttöproseduureissa. Tämä voi sisältää:
niiden määrien tunnisteet, joiden arvot tulostetaan vastaavaan laitteeseen tai tiedostoon;
lausekkeet, joiden arvot ensin lasketaan ja sitten tulostetaan laitteeseen;
tuli arvoja (numeerinen, symbolinen, merkkijono).
Ero WRITE:n ja WRITELN:n välillä on se, että WRITE-käskyn tulos alkaa kursorin nykyisestä sijainnista näyttöruudulla ja kohdistin pysyy samalla rivillä tulostuksen päätyttyä. WRITELN-käsky tulostaa arvot nykyisestä sijainnista ja sitten kursori siirtyy seuraavalle riville. Voit käyttää WRITELN-käskyä ilman tulosluetteloa siirtääksesi kohdistimen uudelle riville.
Jos tulos on näyttöruudulle, tulosluettelo on muuttujien luettelo tai muuttujien nimien, vakioiden tai lausekkeiden sarja pilkuilla erotettuna. Jos tuloste on tiedosto, tulosluettelon ensimmäinen muuttuja on tiedostomuuttuja, joka liittyy todellisen tiedoston nimeen.
Tulostuskomennossa tulosluetteloelementin jälkeen voit määrittää tulostemuodon kaksoispisteellä erotettuna, ts. sen näytön leveys, jolla arvot sijaitsevat. Kun näytät todellista dataa, voit myös määrittää näytettävän murto-osan desimaalilukujen määrän.
Esimerkki: write(A: 10: 3, B: 8).
Operaattori apualgoritmin kutsumiseen. Pascal toteuttaa proseduurialirutiineja ja toimintoalirutiineja. Aliohjelmaa kutsutaan nimellä, joka ilmaisee todelliset parametrit. Tässä tapauksessa todellisten argumenttien tilalla voi olla tiettyjä arvoja, todellisten muuttujien nimiä, lausekkeita ja tulosten sijaan vain todellisten muuttujien nimiä. Tässä tapauksessa muodollisten ja todellisten parametrien lukumäärän, tyyppien ja tarkoituksen vastaavissa parametriluetteloissa on oltava samat.

Yllä tarkastelimme erilaisia ​​käytännön ongelmia, jotka voidaan pelkistää lineaariseen ohjelmointimalliin. Joissakin näistä ongelmista lineaariset rajoitukset olivat epätasa-arvon muotoisia, toisissa - tasa-arvoja, toisissa - molemmat.

Tässä tarkastellaan lineaarista ohjelmointiongelmaa tasa-arvorajoitteineen - niin sanottua peruslineaarista ohjelmointiongelmaa (BLP).

Tulevaisuudessa näytämme, kuinka voit siirtyä epätasa-arvorajoitteiden ongelmasta OPLP:hen ja takaisin.

Lineaarisen ohjelmoinnin pääongelma esitetään seuraavasti.

Muuttujia on useita

On löydettävä näiden muuttujien sellaiset ei-negatiiviset arvot, jotka täyttäisivät lineaarisen yhtälöjärjestelmän:

ja lisäksi minimoisi lineaarifunktion

Ilmeisesti tapaus, jossa lineaarista funktiota ei tarvitse kääntää minimiin, vaan maksimiin, voidaan helposti pelkistää edelliseen, jos muutamme funktion etumerkkiä ja tarkastelemme funktiota sen sijaan

Sovitaan kutsuvamme mitä tahansa muuttujajoukkoa OLP:n hyväksyttäväksi ratkaisuksi

yhtälöt (2.1).

Kutsumme optimiratkaisuksi sitä hyväksyttävistä ratkaisuista, joissa lineaarifunktio (2.2) tulee minimiin.

Lineaarisen ohjelmoinnin perusongelmalla ei välttämättä ole ratkaisua.

Saattaa käydä niin, että yhtälöt (2.1) ovat ristiriidassa keskenään; voi osoittautua, että niillä on ratkaisu, mutta ei ei-negatiivisten arvojen alueella. Silloin OLP:llä ei ole hyväksyttäviä ratkaisuja. Lopuksi voi käydä ilmi, että OLP:n hyväksyttäviä ratkaisuja on olemassa, mutta niiden joukossa ei ole optimaalista: funktio L sallittujen ratkaisujen alueella on alhaalta rajaton.

Tutustumme esimerkkeihin tällaisista OPLP:n ominaisuuksista myöhemmin.

Tarkastellaanpa ensin kysymystä OLP:n hyväksyttävien ratkaisujen olemassaolosta.

Tätä ongelmaa ratkaistaessa voidaan jättää huomioimatta lineaarinen funktio L, joka on minimoitava - toteutettavissa olevien ratkaisujen olemassaolo määräytyy vain yhtälöillä (2.1).

Olkoon siis yhtälöjärjestelmä (2.1). Onko olemassa ei-negatiivisia arvoja, jotka täyttävät tämän järjestelmän? Tätä kysymystä tarkastellaan matematiikan erityishaarassa - lineaarisessa algebrassa.

Esitellään lyhyesti joitain lineaarisen algebran ehtoja, keskustelematta vastaavien lauseiden todisteissa

Lineaarisen yhtälöjärjestelmän matriisi

on taulukko, joka koostuu kertoimista for

Lineaarisen yhtälöjärjestelmän laajennettu matriisi on sama matriisi täydennettynä vapaiden termien sarakkeella:

Matriisin sijoitus on nollasta poikkeavan determinantin korkein kertaluku, joka voidaan saada poistamalla joitain rivejä ja sarakkeita matriisista.

Lineaarialgebrassa on todistettu, että jotta lineaariyhtälöjärjestelmä (2.1) olisi johdonmukainen, on välttämätöntä ja riittävää, että järjestelmän matriisin järjestys on yhtä suuri kuin sen laajennetun matriisin arvo.

Esimerkki 1. Annettu kolmen yhtälön järjestelmä, jossa on neljä tuntematonta:

Selvitä, onko tämä järjestelmä yhteistyökykyinen?

Ratkaisu. Järjestelmämatriisi:

Laajennettu matriisi:

Määritetään ensimmäisen matriisin sijoitus. Se ei voi olla suurempi kuin 3 (koska rivien määrä on 3). Luodaan jokin determinantti poistamalla matriisista jokin sarake, esimerkiksi viimeinen. Me saamme

Laskemalla tämän determinantin hyvin tunnetun säännön mukaan saamme:

Tämä determinantti ei ole yhtä suuri kuin nolla, mikä tarkoittaa, että järjestelmämatriisin järjestys on yhtä suuri kuin 3. On selvää, että laajennetun matriisin arvo on myös 3, koska sama determinantti voidaan muodostaa elementeistä laajennetusta matriisista. Matriisien rivien yhtäläisyydestä seuraa, että yhtälöjärjestelmä on johdonmukainen.

Esimerkki 2. Tutki kahden yhtälöjärjestelmän yhteensopivuutta kolmen tuntemattoman kanssa:

Ratkaisu. Laajennettu järjestelmämatriisi:

(sen vasen puoli on järjestelmämatriisi).

Etsitään systeemimatriisin järjestys muodostamalla kaikki mahdolliset toisen asteen determinantit:

Joten kaikki mahdolliset järjestelmämatriisin elementeistä koostuvat toisen kertaluvun determinantit ovat yhtä suuria kuin nolla; Tämä tarkoittaa, että tämän järjestelmän matriisin sijoitus on

Etsitään laajennetun matriisin sijoitus. Determinantti

Siksi laajennetun matriisin arvo ei ole yhtä suuri kuin järjestelmämatriisin arvo: Grfg, yhtälöjärjestelmä on epäjohdonmukainen.

Esimerkki 3. Tutki kolmen ja neljän tuntemattoman yhtälöjärjestelmän johdonmukaisuutta:

Ratkaisu Laajennettu järjestelmämatriisi (yhdessä järjestelmämatriisin kanssa):

Etsitään systeemimatriisin sijoitus. Otetaan kolmannen asteen determinantti, joka koostuu sen elementeistä, esimerkiksi:

Tiedetään, että jos mikä tahansa determinantin rivi on sen kahden muun rivin lineaarinen yhdistelmä, niin determinantti on yhtä suuri kuin nolla. Meidän tapauksessamme kolmas rivi on lineaarinen yhdistelmä kahdesta ensimmäisestä: sen saamiseksi riittää, että lisäät ensimmäisen rivin kaksinkertaisella toisella.

On helppo varmistaa, että millä tahansa järjestelmämatriisin elementeistä koostuvalla kolmannen asteen determinantilla on sama ominaisuus.

Koska on olemassa nollasta poikkeava toisen asteen determinantti, esim.

silloin järjestelmämatriisin sijoitus on yhtä suuri kuin

Samaa päättelyä käyttämällä varmistamme, että laajennetun matriisin järjestys on yhtä suuri kuin kaksi: Siksi yhtälöjärjestelmä on yhteensopiva

Huomaa, että tämän esimerkin kolme yhtälöä eivät ole riippumattomia: kolmas voidaan saada kahdesta ensimmäisestä kertomalla toinen kahdella ja lisäämällä se ensimmäiseen. Tämä tarkoittaa, että kolmas yhtälö on yksinkertainen seuraus kahdesta ensimmäisestä. Järjestelmässä on vain kaksi riippumatonta yhtälöä: tämä näkyy siinä, että järjestelmämatriisin järjestys

Joten jos OLP:n yhtälö-rajoitusjärjestelmä on johdonmukainen, niin järjestelmän matriisilla ja sen laajennetulla matriisilla on sama arvo.

Tätä kokonaisarvoa kutsutaan järjestelmän arvoksi; se edustaa vain lineaarisesti riippumattomien yhtälöiden määrää asetettujen rajoitusten joukossa.

Ilmeisesti järjestelmän järjestys ei voi olla suurempi kuin yhtälöiden lukumäärä:

On myös selvää, että järjestelmän sijoitus ei voi olla suurempi kuin muuttujien kokonaismäärä:

Itse asiassa järjestelmämatriisin sijoitus määritellään matriisin elementeistä koostuvan determinantin korkeimmaksi asteeksi; koska sen rivien määrä on yhtä suuri kuin , Sitten ; koska sen sarakkeiden määrä on yhtä suuri kuin , niin .

Lineaarisen ohjelmointitehtävän rakenne riippuu merkittävästi rajoitusjärjestelmän (2.1) arvosta.

Tarkastellaan ensin tapausta, jolloin järjestelmään (2.1) sisältyvien lineaarisesti riippumattomien yhtälöiden lukumäärä on yhtä suuri kuin muuttujien lukumäärä n. Hylätään "ylimääräiset" yhtälöt, jotka ovat muiden lineaarisia yhdistelmiä. OZLP:n yhtälö-rajoitusjärjestelmä on seuraavanlainen:

Koska determinantti, joka koostuu kertoimista,

ei ole yhtä kuin nolla. Algebrasta tiedetään, että tässä tapauksessa järjestelmällä (2.4) on ainutlaatuinen ratkaisu. Määrän löytämiseksi riittää, kun korvataan determinantin sarake vapaiden termien sarakkeella ja jaetaan.

Joten kun OLP:n rajoitusyhtälöjärjestelmällä on ainutlaatuinen ratkaisu:

Jos tässä ratkaisussa ainakin yksi suureista on negatiivinen, tämä tarkoittaa, että tuloksena oleva ratkaisu ei ole hyväksyttävä ja siksi OPLP:llä ei ole ratkaisua.

Jos kaikki suuret eivät ole negatiivisia, löydetty ratkaisu on hyväksyttävä. Se on myös tietysti optimaalinen (koska muita ei ole).

Tämä triviaali tapaus ei tietenkään voi kiinnostaa meitä.

Siksi tulevaisuudessa tarkastellaan vain tapausta, jolloin, eli kun riippumattomien yhtälöiden lukumäärä, joka muuttujien on täytettävä, on itse muuttujien lukumäärä. Sitten, jos järjestelmä on johdonmukainen, sillä on äärettömän monta ratkaisua. Tässä tapauksessa voimme antaa muuttujille mielivaltaisia ​​arvoja (ns. vapaat muuttujat), ja loput muuttujat ilmaistaan ​​niiden kautta (kutsumme näitä muuttujia perusmuuttujiksi).

© 2024 ermake.ru - Tietoja PC-korjauksesta - Tietoportaali