Cili program është linear në c. Shkurtimisht për programimin linear

Shtëpi / Ruterat

Nëse të gjitha deklaratat në një program ekzekutohen në mënyrë sekuenciale, njëri pas tjetrit, një program i tillë quhet lineare. Le të shqyrtojmë si shembull një program që llogarit rezultatin duke përdorur një formulë të dhënë.

Detyra 1.1. Llogaritja me formulë

Shkruani një program që konverton temperaturën në gradë Fahrenheit në gradë Celsius duke përdorur formulën:

ku C është temperatura në Celsius, dhe F është temperatura në Fahrenheit.

Para se të shkruajmë ndonjë program, duhet të përcaktojmë qartë se çfarë duhet të futet në të dhe çfarë duhet të marrim si rezultat.

në këtë rast:

Të dhënat fillestare janë një numër real, e cila është temperatura në Celsius,

Rezultati është një numër tjetër real.

Para se të shkruajmë programin, le të hapim mjedisin e integruar të Visual C++:

Fillimi/Programet/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) Skedari > I ri...

2) Në dritaren që hapet:

Zgjidhni llojin e aplikacionit të konsolës Win32;

Futni një emër për projektin në kutinë e tekstit Emri i projektit;

Futni (zgjidhni duke përdorur butonin ...) emrin e drejtorisë ku ndodhen skedarët e projektit në fushën e tekstit Vendndodhja, për shembull G:/ASOIZ/

Klikoni me të majtën në butonin OK.

3) Hapet kutia e dialogut Win32 Console Application - Stepl of 1 dhe në të:

Zgjidhni llojin Një projekt bosh;

Klikoni butonin Finish.

4) Pas klikimit do të shfaqet dritarja New Project, në të cilën klikoni në butonin OK.

1) Skedari > E re.... Kjo do të hapë kutinë e dialogut New.

2) Në skedën Files:

Zgjidhni llojin e skedarit (në këtë rast: C++ Source File);

Në kutinë e tekstit Emri i skedarit, vendosni emrin e dëshiruar të skedarit;

Kutia e kontrollit "Shto në projekt" duhet të aktivizohet;

Klikoni OK.

Shkruajmë tekstin e mëposhtëm të programit:

Le të shohim secilën rresht të programit veç e veç.

Në fillim të programit, shkruhet një direktivë paraprocesori, sipas së cilës një skedar header lidhet me tekstin burimor të programit. . Ky është një skedar që përmban përshkrime të operatorëve cin dhe cout I/O.

Çdo program C++ përbëhet nga funksione, njëri prej të cilëve duhet të ketë emrin main, që tregon se aty fillon ekzekutimi i programit. Pas kllapave, trupi i funksionit shkruhet në kllapa kaçurrelë ( ), d.m.th. ato deklarata që duhet të ekzekutohen.

Çdo shabllon kur shkruani një program ka formën:

#përfshi<…>

#përfshi<…>

deklarimi i variablave;

futja e të dhënave fillestare;

llogaritja e rezultatit;

nxjerr rezultatin;

Për të ruajtur të dhënat burimore dhe rezultatet, duhet të ndani hapësirë ​​të mjaftueshme brenda RAM. Kjo bëhet duke përdorur deklaratën 2. Programi ynë duhet të ruajë dy vlera: temperaturën në Celsius dhe temperaturën në Fahrenheit, kështu që deklarata përcakton dy ndryshore. Njëra, për ruajtjen e temperaturave në Fahrenheit, quhet fahr, tjetra (në Celsius) quhet cels. Programuesi u jep emra variablave bazuar në qëllimin e tyre. Emri mund të përbëhet vetëm nga shkronja latine, numra dhe një nënvizim dhe nuk duhet të fillojë me një numër.

Kur përshkruani ndonjë variabël, duhet ta tregoni atë lloji. Meqenëse temperatura mund të marrë jo vetëm vlera të plota, lloji real zgjidhet për variablat noton

Llojet kryesore:

int (i shkurtër, i panënshkruar) - numra të plotë,

noton (dyfish, i gjatë dyfish) – real

char – personazh

bool – logjik

Në mënyrë që përdoruesi i programit të dijë se në cilën pikë kërkohet futja e të dhënave nga tastiera, përdoret i ashtuquajturi input prompt (operatori 3). Në ekran shfaqet ajo e specifikuar në operator. cout rreshti i karaktereve dhe kursori kalon në rreshtin tjetër. Për të shkuar në rreshtin tjetër përdorni fundl.

Në deklaratën 4, një numër i vetëm futet nga tastiera në një ndryshore fahr. Për këtë qëllim përdoret një objekt standard cin dhe operacioni i nxjerrjes (leximit) >>. Nëse duhet të futni disa vlera, përdorni zinxhirin e operacioneve >>.

Operatori 5 vlerëson shprehjen e shkruar në të djathtë të operacionet e caktimit(shënohet me shenjën =), dhe rezultati i caktohet ndryshores cels, domethënë ruhet në memorien e alokuar për këtë ndryshore. Së pari e tërë konstantja 5 do të pjesëtohet me puthje konstante 9, atëherë rezultati i këtij veprimi shumëzohet me rezultatin e zbritjes së numrit 32 nga ndryshorja fahr.

Për të shfaqur rezultatin në operatorin 6, përdoret një objekt cout. Shfaqet një zinxhir i përbërë nga pesë elementë. Kjo është linja "Fahrenheit:", vlera e ndryshueshme fahr, linjë ", në gradë Celsius:", vlera e ndryshueshme cels dhe operatori i linjës së re fundl.

Deklarata e fundit (deklarata 7) e këtij programi synon të kthehet prej tij dhe të transferojë vlerën në mjedisin e jashtëm.

Më pas, ne përpilojmë programin. Për ta bërë këtë, shtypni butonin në shiritin e veglave ose kombinimin e tastit Ctrl+F7. Dritarja e daljes (në fund të ekranit) duhet të shfaqë mesazhin 0 gabim(a), 0 paralajmërim(a) (0 gabime, 0 paralajmërime). Nëse ka gabime, kontrolloni me origjinalin.

Për të nisur programin, shtypni butonin në shiritin e veglave ose kombinimin e tastit Ctrl+F5.

Gjatë fillimit të programit, në vend të karaktereve ruse shohim ???, e cila shkaktohet nga standarde të ndryshme për kodimin e karaktereve cirilike në sistemet operative MS DOS dhe Windows. Për ta rregulluar këtë, shtoni funksionin CharToOem në program (shtesat janë theksuar me të kuqe për qartësi)

#përfshi

#përfshi

char* RUS (konst char* tekst)

CharToOem (tekst, buf);

float fahr, cels;

cout<

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

cout<

cout<

Funksioni Rusi () nuk mund të përdoret më shumë se një herë në një zinxhir operacionesh<< для одного объекта cout, kështu e ndajmë në dysh.

Siç mund ta shihni, rezultati i ekzekutimit të programit me stabilitet është zero! Kjo ndodh për shkak të mënyrës se si vlerësohet shprehja. Le të shohim përsëri operatorin 4. Konstantat 5 dhe 9 janë të tipit numër të plotë, kështu që rezultati i ndarjes së tyre është gjithashtu një numër i plotë. Natyrisht, rezultati i llogaritjeve të mëtejshme nuk mund të jetë asgjë tjetër përveç zeros. Korrigjimi i këtij gabimi është i thjeshtë - thjesht shkruani të paktën një nga konstantat si numër real, për shembull:

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

Puna laboratorike nr.1

Tema: “Programimi i algoritmeve lineare. Puna me korrigjuesin"

Qëllimi i punës

1.1 Zotërimi i strukturës më të thjeshtë të programit në gjuhën C.

1.2 Fitimi i aftësive në organizimin e input/output në gjuhën C.

Mbështetje teknike

2.1 Kompjuter personal

2.2 Tastiera.

2.3 Ekrani

2.4 Pajisja e printimit.

Software

3.1 Sistemi operativ Windows

3.2 Sistemi i programimit Visual C++ versioni 6.0 ose Borland C++ versioni 3.1 dhe versionet e mëvonshme.

Deklarata e problemit

Shkrimi i një programi të thjeshtë me përpunim të të dhënave.

5.1 Tema dhe qëllimi i punës.

5.2 Deklarata e problemit.

5.3 Teksti i programeve.

5.4 Rezultatet e ekzekutimit të programit.

5.5 Diagramet e algoritmit të programit.

Informacione të përgjithshme

Programi linear

Nëse të gjitha deklaratat në një program ekzekutohen në mënyrë sekuenciale, njëri pas tjetrit, një program i tillë quhet lineare. Le të shqyrtojmë si shembull një program që llogarit rezultatin duke përdorur një formulë të dhënë.

Detyra 1.1. Llogaritja me formulë

Shkruani një program që konverton temperaturën në gradë Fahrenheit në gradë Celsius duke përdorur formulën:

ku C është temperatura në Celsius, dhe F është temperatura në Fahrenheit.

Para se të shkruajmë ndonjë program, duhet të përcaktojmë qartë se çfarë duhet të futet në të dhe çfarë duhet të marrim si rezultat.

Në këtë rast:

Të dhënat fillestare janë një numër real që përfaqëson temperaturën në Celsius,

Rezultati është një numër tjetër real.

Para se të shkruajmë programin, le të hapim mjedisin e integruar të Visual C++:

Fillimi/Programet/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) Skedari > I ri...

2) Në dritaren që hapet:

Zgjidhni llojin e aplikacionit të konsolës Win32;

Futni një emër për projektin në kutinë e tekstit Emri i projektit;

Futni (zgjidhni duke përdorur butonin ...) emrin e drejtorisë ku ndodhen skedarët e projektit në fushën e tekstit Vendndodhja, për shembull G:/ASOIZ/

Klikoni me të majtën në butonin OK.

3) Hapet kutia e dialogut Win32 Console Application - Stepl of 1 dhe në të:

Zgjidhni llojin Një projekt bosh;

Klikoni butonin Finish.

4) Pas klikimit do të shfaqet dritarja New Project, në të cilën klikoni në butonin OK.

1) Skedari > E re.... Kjo do të hapë kutinë e dialogut New.

2) Në skedën Files:

Zgjidhni llojin e skedarit (në këtë rast: C++ Source File);

Në kutinë e tekstit Emri i skedarit, vendosni emrin e dëshiruar të skedarit;

Kutia e kontrollit "Shto në projekt" duhet të aktivizohet;

Klikoni OK.

Shkruajmë tekstin e mëposhtëm të programit:

Le të shohim secilën rresht të programit veç e veç.

Në fillim të programit, shkruhet një direktivë paraprocesori, sipas së cilës një skedar header lidhet me tekstin burimor të programit. . Ky është një skedar që përmban përshkrime të operatorëve cin dhe cout I/O.

Çdo program C++ përbëhet nga funksione, njëri prej të cilëve duhet të ketë emrin main, që tregon se aty fillon ekzekutimi i programit. Pas kllapave, trupi i funksionit shkruhet në kllapa kaçurrelë ( ), d.m.th. ato deklarata që duhet të ekzekutohen.

Çdo shabllon kur shkruani një program ka formën:

#përfshi<…>

#përfshi<…>

deklarimi i variablave;

futja e të dhënave fillestare;

llogaritja e rezultatit;

nxjerr rezultatin;

Për të ruajtur të dhënat burimore dhe rezultatet, duhet të ndani hapësirë ​​të mjaftueshme në RAM. Kjo bëhet duke përdorur deklaratën 2. Programi ynë duhet të ruajë dy vlera: temperaturën në Celsius dhe temperaturën në Fahrenheit, kështu që deklarata përcakton dy ndryshore. Njëra, për ruajtjen e temperaturave në Fahrenheit, quhet fahr, tjetra (në Celsius) quhet cels. Programuesi u jep emra variablave bazuar në qëllimin e tyre. Emri mund të përbëhet vetëm nga shkronja latine, numra dhe një nënvizim dhe nuk duhet të fillojë me një numër.

Kur përshkruani ndonjë variabël, duhet ta tregoni atë lloji. Meqenëse temperatura mund të marrë jo vetëm vlera të plota, lloji real zgjidhet për variablat noton

Llojet kryesore:

int (i shkurtër, i panënshkruar) - numra të plotë,

noton (dyfish, i gjatë dyfish) – real

char – personazh

bool – logjik

Në mënyrë që përdoruesi i programit të dijë se në cilën pikë kërkohet futja e të dhënave nga tastiera, përdoret i ashtuquajturi input prompt (operatori 3). Në ekran shfaqet ajo e specifikuar në operator. cout rreshti i karaktereve dhe kursori kalon në rreshtin tjetër. Për të shkuar në rreshtin tjetër përdorni fundl.

Deklarata 4 kryen futjen e tastierës

Për këtë qëllim përdoret një objekt standard cin dhe operacioni i nxjerrjes (leximit) >>. Nëse duhet të futni disa vlera, përdorni zinxhirin e operacioneve >>.

Operatori 5 vlerëson shprehjen e shkruar në të djathtë të operacionet e caktimit(shënohet me shenjën =), dhe rezultati i caktohet ndryshores cels, domethënë ruhet në memorien e alokuar për këtë ndryshore. Së pari e tërë konstantja 5 do të pjesëtohet me puthje konstante 9, atëherë rezultati i këtij veprimi shumëzohet me rezultatin e zbritjes së numrit 32 nga ndryshorja fahr.

Për të shfaqur rezultatin në operatorin 6, përdoret një objekt cout. Shfaqet një zinxhir i përbërë nga pesë elementë. Kjo është linja "Fahrenheit:", vlera e ndryshueshme fahr, linjë ", në gradë Celsius:", vlera e ndryshueshme cels dhe operatori i linjës së re fundl.

Deklarata e fundit (deklarata 7) e këtij programi synon të kthehet prej tij dhe të transferojë vlerën në mjedisin e jashtëm.

Më pas, ne përpilojmë programin. Për ta bërë këtë, shtypni butonin në shiritin e veglave ose kombinimin e tastit Ctrl+F7. Dritarja e daljes (në fund të ekranit) duhet të shfaqë mesazhin 0 gabim(a), 0 paralajmërim(a) (0 gabime, 0 paralajmërime). Nëse ka gabime, kontrolloni me origjinalin.

Për të nisur programin, shtypni butonin në shiritin e veglave ose kombinimin e tastit Ctrl+F5.

Gjatë fillimit të programit, në vend të karaktereve ruse shohim ???, e cila shkaktohet nga standarde të ndryshme për kodimin e karaktereve cirilike në sistemet operative MS DOS dhe Windows. Për ta rregulluar këtë, shtoni funksionin CharToOem në program (shtesat janë theksuar me të kuqe për qartësi)

#përfshi

#përfshi

char* RUS (konst char* tekst)

CharToOem (tekst, buf);

float fahr, cels;

cout<

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

cout<

cout<

Funksioni Rusi () nuk mund të përdoret më shumë se një herë në një zinxhir operacionesh<< для одного объекта cout, kështu e ndajmë në dysh.

Siç mund ta shihni, rezultati i ekzekutimit të programit me stabilitet është zero! Kjo ndodh për shkak të mënyrës se si vlerësohet shprehja. Le të shohim përsëri operatorin 4. Konstantat 5 dhe 9 janë të tipit numër të plotë, kështu që rezultati i ndarjes së tyre është gjithashtu një numër i plotë. Natyrisht, rezultati i llogaritjeve të mëtejshme nuk mund të jetë asgjë tjetër përveç zeros. Korrigjimi i këtij gabimi është i thjeshtë - thjesht shkruani të paktën një nga konstantat si numër real, për shembull:

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

Programet që përbëhen nga komanda të thjeshta (operatorë) quhen lineare.
Komandat e thjeshta (instruksionet e thjeshta të algoritmit) janë komanda që nuk përdorin kushte gjatë ekzekutimit të tyre. Operatorët e thjeshtë përfshijnë komandat (operatorët) e caktimit, hyrjes dhe daljes, dhe thirrjen e një algoritmi ndihmës (nënrutinë).

Operatori i caktimit. Vendos ose ndryshon vlerën aktuale të disa ndryshoreve. Kjo ndryshon përmbajtjen e një elementi specifik memorie të caktuar për këtë variabël. Meqenëse qëllimi i çdo algoritmi është të marrë vlerën e dëshiruar në një vend të caktuar memorie, pothuajse çdo program përmban këtë operator. Operatorët I/O. Procedurat standarde të futjes së të dhënave përdoren për të përcaktuar vlerat fillestare të variablave të caktuar dhe përbëhen nga një emër i procedurës dhe një listë hyrëse që përmban emrat e variablave, vlerat e të cilave do të futen nga tastiera ose nga një skedar, d.m.th. Variablave do t'u caktohen vlera specifike.
Më shpesh, për të përcaktuar vlerat fillestare, është më e përshtatshme të përdorni komandën e hyrjes sesa komandën e caktimit, sepse nëse duhet të përdorni programin me të dhëna fillestare të ndryshme, nuk keni nevojë të ndryshoni tekstin e programit.
Nëse rekordi i algoritmit përmban një komandë hyrëse, atëherë ekzekutimi i tij ndërpritet dhe kontrolli transferohet në një program që mund të futë të dhëna. Pas futjes së të dhënave, kontrolli kalon në komandën tjetër të algoritmit.
Në Pascal, procedura e futjes së të dhënave duket si kjo:
LEXO (lista e hyrjes);
READLN (lista e hyrjes).
Kur ekzekutohen procedurat READ dhe READLN, programi hyn në gjendjen e pritjes për futjen e të dhënave. Nëse në listën hyrëse janë specifikuar disa variabla, atëherë ato mund të futen në një rresht, të ndara nga njëri-tjetri me një karakter hapësinor, ose në rreshta të veçantë (në një kolonë), duke përfunduar futjen e secilës vlerë me tastin Enter.
Procedura nuk do të përfundojë derisa të futen vlerat për të gjitha variablat në listë. Lloji i vlerave të futura duhet të përputhet me ato të ndryshores përkatëse.
Deklarata READLN ndryshon nga deklarata READ në atë që pasi të jetë futur sasia e kërkuar e të dhënave, kursori kalon në rreshtin tjetër.
Nëse të dhënat futen nga tastiera, atëherë lista hyrëse është një listë e variablave, d.m.th. një sekuencë emrash variablash të ndarë me presje. Nëse hyrja është nga një skedar, atëherë ndryshorja e parë në listën hyrëse është ndryshorja e skedarit, e lidhur me emrin e skedarit real.
Procedurat standarde për nxjerrjen e rezultateve të llogaritjes përdoren për të shfaqur vlerat e tyre në një ekran, printer ose skedar. Në Pascal, procedurat e përfundimit duken kështu:
WRITE (lista e daljes);
WRITELN (lista e daljes).
Lista e elementeve dalëse është shumë më e gjerë se në procedurat hyrëse. Kjo mund të përfshijë:
identifikuesit e sasive, vlerat e të cilave do të dalin në pajisjen ose skedarin përkatës;
shprehjet, vlerat e të cilave fillimisht do të llogariten dhe më pas do të dalin në pajisje;
u bënë vlera (numerike, simbolike, varg).
Dallimi midis WRITE dhe WRITELN është se dalja e deklaratës WRITE fillon nga vendndodhja aktuale e kursorit në ekranin e monitorit dhe kursori mbetet në të njëjtën linjë pas përfundimit të daljes. Deklarata WRITELN printon vlerat nga pozicioni aktual dhe më pas kursori kalon në rreshtin tjetër. Ju mund të përdorni deklaratën WRITELN pa një listë dalëse për të zhvendosur kursorin në një rresht të ri.
Nëse dalja është në një ekran monitori, atëherë lista e daljes është një listë variablash, ose një sekuencë emrash, konstantesh ose shprehjesh të variablave të ndara me presje. Nëse dalja është në një skedar, atëherë ndryshorja e parë në listën e daljes është ndryshorja e skedarit, e shoqëruar me emrin e skedarit real.
Në komandën e daljes, pas elementit të listës së daljes, mund të specifikoni formatin e daljes, të ndarë me dy pika, d.m.th. gjerësia e ekranit në të cilin do të vendosen vlerat. Kur shfaqni të dhëna reale, mund të specifikoni gjithashtu numrin e shifrave dhjetore në pjesën fraksionale që dëshironi të shfaqni.
Shembull: shkruani (A: 10: 3, B: 8).
Operatori për thirrjen e një algoritmi ndihmës. Pascal zbaton nënprocedurat dhe nënprogramet e funksioneve. Një nënprogram quhet me emrin e saj duke treguar parametrat aktualë. Në këtë rast, në vend të argumenteve aktuale mund të ketë vlera specifike, emra të ndryshoreve aktuale, shprehje, dhe në vend të rezultateve - vetëm emra të ndryshoreve aktuale. Në këtë rast, numri, llojet dhe qëllimi i parametrave zyrtarë dhe aktualë në listat përkatëse të parametrave duhet të përputhen.

Më sipër kemi shqyrtuar probleme të ndryshme praktike që mund të reduktohen në një skemë programimi linear. Në disa nga këto probleme, kufizimet lineare kishin formën e pabarazisë, në të tjera - barazitë, në të tjera - të dyja.

Këtu do të shqyrtojmë një problem të programimit linear me kufizime barazie - i ashtuquajturi problemi bazë i programimit linear (BLP).

Në të ardhmen, ne do të tregojmë se si mund të kaloni nga një problem me kufizime të pabarazisë në një OPLP dhe mbrapa.

Problemi kryesor i programimit linear është paraqitur si më poshtë.

Ka një sërë variablash

Kërkohet të gjenden vlera të tilla jo negative të këtyre variablave që do të kënaqnin sistemin e ekuacioneve lineare:

dhe, përveç kësaj, do të minimizonte funksionin linear

Natyrisht, rasti kur një funksion linear duhet të kthehet jo në minimum, por në maksimum, mund të reduktohet lehtësisht në atë të mëparshëm, nëse ndryshojmë shenjën e funksionit dhe në vend të kësaj e konsiderojmë funksionin.

Le të biem dakord të quajmë çdo grup variablash një zgjidhje të pranueshme të OLP

ekuacionet e kënaqshme (2.1).

Zgjidhje optimale do ta quajmë atë të zgjidhjeve të pranueshme në të cilat funksioni linear (2.2) bëhet minimum.

Problemi bazë i programimit linear nuk ka domosdoshmërisht një zgjidhje.

Mund të rezultojë që ekuacionet (2.1) kundërshtojnë njëri-tjetrin; mund të rezultojë se kanë zgjidhje, por jo në rajonin e vlerave jo negative. Atëherë OLP nuk ka zgjidhje të pranueshme. Më në fund, mund të rezultojë se ekzistojnë zgjidhje të pranueshme të OLP, por midis tyre nuk ka asnjë optimale: funksioni L në rajonin e zgjidhjeve të pranueshme është i pakufizuar nga poshtë.

Ne do të njihemi me shembuj të veçorive të tilla të OPLP më vonë.

Le të shqyrtojmë, para së gjithash, çështjen e ekzistencës së zgjidhjeve të pranueshme për OLP.

Kur zgjidhim këtë çështje, ne mund të përjashtojmë nga shqyrtimi funksionin linear L që duhet të minimizohet - prania e zgjidhjeve të realizueshme përcaktohet vetëm nga ekuacionet (2.1).

Pra, le të ketë një sistem ekuacionesh (2.1). A ka vlera jo negative që kënaqin këtë sistem? Kjo çështje konsiderohet në një degë të veçantë të matematikës - algjebër lineare.

Le të paraqesim shkurtimisht disa dispozita të algjebrës lineare, pa u ndalur në vërtetimet e teoremave përkatëse

Matrica e një sistemi ekuacionesh lineare

është një tabelë e përbërë nga koeficientët për

Një matricë e zgjeruar e një sistemi ekuacionesh lineare është e njëjta matricë e plotësuar me një kolonë termash të lirë:

Renditja e një matrice është rendi më i lartë i një përcaktori jozero që mund të merret duke fshirë disa rreshta dhe disa kolona nga matrica.

Në algjebër lineare vërtetohet se që sistemi i ekuacioneve lineare (2.1) të jetë konsistent, është e nevojshme dhe e mjaftueshme që rangu i matricës së sistemit të jetë i barabartë me gradën e matricës së tij të zgjeruar.

Shembulli 1. Jepet një sistem prej tre ekuacionesh me katër të panjohura:

Përcaktoni nëse ky sistem është bashkëpunues?

Zgjidhje. Matrica e sistemit:

Matrica e zgjeruar:

Le të përcaktojmë rangun e matricës së parë. Nuk mund të jetë më i madh se 3 (pasi numri i rreshtave është 3). Le të krijojmë disa përcaktorë duke fshirë disa kolona nga matrica, për shembull, të fundit. marrim

Duke llogaritur këtë përcaktor sipas rregullit të njohur, marrim:

Ky përcaktues nuk është i barabartë me zero, që do të thotë se rangu i matricës së sistemit është i barabartë me 3. Natyrisht, rangu i matricës së zgjeruar është gjithashtu i barabartë me 3, pasi i njëjti përcaktues mund të përbëhet nga elementët të matricës së zgjeruar. Nga barazia e gradave të matricave rezulton se sistemi i ekuacioneve është konsistent.

Shembulli 2. Hulumtoni përputhshmërinë e një sistemi prej dy ekuacionesh me tre të panjohura:

Zgjidhje. Matrica e zgjeruar e sistemit:

(ana e majtë e tij është matrica e sistemit).

Le të gjejmë rangun e matricës së sistemit duke kompozuar të gjithë përcaktuesit e mundshëm të rendit të dytë:

Pra, të gjithë përcaktuesit e mundshëm të rendit të dytë të përbërë nga elementë të matricës së sistemit janë të barabartë me zero; Kjo do të thotë se rangu i kësaj matrice të sistemit është

Le të gjejmë rangun e matricës së zgjeruar. Përcaktues

Prandaj, renditja e matricës së zgjeruar nuk është e barabartë me gradën e matricës së sistemit: Grfg, prandaj, sistemi i ekuacioneve është i paqëndrueshëm.

Shembulli 3. Hulumtoni konsistencën e një sistemi prej tre ekuacionesh me katër të panjohura:

Zgjidhja Matrica e sistemit të zgjeruar (së bashku me matricën e sistemit):

Le të gjejmë rangun e matricës së sistemit. Le të marrim një përcaktues të rendit të tretë të përbërë nga elementët e tij, për shembull:

Dihet se nëse ndonjë rresht i një përcaktori është një kombinim linear i dy rreshtave të tjerë të tij, atëherë përcaktori është i barabartë me zero. Në rastin tonë, rreshti i tretë është një kombinim linear i dy të parave: për ta marrë atë, mjafton të shtoni rreshtin e parë me dyfishin e të dytit Prandaj.

Është e lehtë të verifikohet se çdo përcaktues i rendit të tretë i përbërë nga elementë të matricës së sistemit ka të njëjtën veti, prandaj, rangu i matricës së sistemit është.

Meqenëse ekziston një përcaktues i rendit të dytë jo-zero, për shembull,

atëherë rangu i matricës së sistemit është i barabartë me

Duke përdorur të njëjtin arsyetim, sigurohemi që rangu i matricës së zgjeruar është i barabartë me dy: Prandaj, sistemi i ekuacioneve është i pajtueshëm

Vini re se tre ekuacionet në këtë shembull nuk janë të pavarura: e treta mund të merret nga dy të parat duke shumëzuar të dytin me dy dhe duke e shtuar atë me të parën. Kjo do të thotë se ekuacioni i tretë është një pasojë e thjeshtë e dy të parëve. Ekzistojnë vetëm dy ekuacione të pavarura në sistem: kjo reflektohet nga fakti se rangu i matricës së sistemit

Pra, nëse sistemi i ekuacioneve-kufizimeve të OLP është konsistent, atëherë matrica e sistemit dhe matrica e tij e zgjeruar kanë të njëjtin rang.

Kjo renditje e përgjithshme quhet rang i sistemit; ai nuk përfaqëson asgjë më shumë se numrin e ekuacioneve lineare të pavarura midis kufizimeve të vendosura.

Natyrisht, rangu i sistemit nuk mund të jetë më i madh se numri i ekuacioneve:

Është gjithashtu e qartë se rangu i sistemit nuk mund të jetë më i madh se numri i përgjithshëm i variablave:

Në të vërtetë, rangu i një matrice të sistemit përcaktohet si rendi më i lartë i përcaktorit të përbërë nga elementë matricë; meqenëse numri i rreshtave të tij është i barabartë me , atëherë ; meqenëse numri i kolonave të tij është i barabartë me , atëherë .

Struktura e një problemi të programimit linear varet shumë nga rangu i sistemit të kufizimit (2.1).

Le të shqyrtojmë fillimisht rastin kur, domethënë, kur numri i ekuacioneve lineare të pavarura të përfshira në sistemin (2.1) është i barabartë me numrin e ndryshoreve n. Le të hedhim poshtë ekuacionet "shtesë" që janë kombinime lineare të të tjerëve. Sistemi i ekuacioneve-kufizimeve të OZLP merr formën:

Meqenëse përcaktori, i përbërë nga koeficientë,

jo e barabartë me zero. Nga algjebra dihet se në këtë rast sistemi (2.4) ka një zgjidhje unike. Për të gjetur sasinë, mjafton të zëvendësohet kolona në përcaktor me një kolonë me terma të lirë dhe të pjesëtohet me.

Pra, kur sistemi i ekuacioneve të kufizimeve të OLP ka një zgjidhje unike:

Nëse në këtë zgjidhje të paktën një nga sasitë është negative, kjo do të thotë se zgjidhja që rezulton është e papranueshme dhe, për rrjedhojë, OPLP nuk ka zgjidhje.

Nëse të gjitha sasitë janë jo negative, atëherë zgjidhja e gjetur është e pranueshme. Është gjithashtu, padyshim, optimale (sepse nuk ka të tjerë).

Natyrisht, ky rast i parëndësishëm nuk mund të na interesojë.

Prandaj, në të ardhmen do të shqyrtojmë vetëm rastin kur, d.m.th., kur numri i ekuacioneve të pavarura që duhet të plotësojnë variablat janë numrat e vetë variablave. Pastaj, nëse sistemi është konsistent, ai ka pafundësisht shumë zgjidhje. Në këtë rast, ne mund t'u caktojmë vlera arbitrare variablave (të ashtuquajturat variabla të lira), dhe ndryshoret e mbetura do të shprehen përmes tyre (këto variabla do t'i quajmë bazë).

© 2024 ermake.ru -- Rreth riparimit të PC - Portali informacioni