کدام برنامه در c خطی است. مختصری در مورد برنامه ریزی خطی

صفحه اصلی / روترها

اگر تمام دستورات یک برنامه به صورت متوالی و پشت سر هم اجرا شوند، چنین برنامه ای نامیده می شود. خطیبیایید به عنوان مثال برنامه ای را در نظر بگیریم که نتیجه را با استفاده از فرمول داده شده محاسبه می کند.

وظیفه 1.1. محاسبه با فرمول

برنامه ای بنویسید که با استفاده از فرمول، دما را بر حسب درجه فارنهایت به درجه سانتیگراد تبدیل کند:

که در آن C دما بر حسب سلسیوس و F دما بر حسب فارنهایت است.

قبل از نوشتن هر برنامه ای، باید به وضوح مشخص کنیم که چه چیزی باید وارد آن شود و در نتیجه چه چیزی باید به دست آوریم.

در در این مورد:

داده های اولیه یک است عدد واقعیکه دما بر حسب سانتیگراد است،

نتیجه یک عدد واقعی دیگر است.

قبل از نوشتن برنامه، اجازه دهید محیط یکپارچه Visual C++ را باز کنیم:

Start/Programs/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) فایل > جدید...

2) در پنجره ای که باز می شود:

نوع برنامه کنسول Win32 را انتخاب کنید.

نام پروژه را در کادر متنی Project Name وارد کنید.

نام دایرکتوری که فایل های پروژه در آن قرار دارند را در قسمت متن Location وارد کنید (با استفاده از دکمه ... انتخاب کنید) به عنوان مثال G:/ASOIZ/

روی دکمه OK کلیک چپ کنید.

3) پنجره Win32 Console Application - Stepl of 1 باز می شود و در آن:

نوع پروژه خالی را انتخاب کنید.

روی دکمه Finish کلیک کنید.

4) پس از کلیک، پنجره New Project ظاهر می شود که در آن بر روی دکمه OK کلیک کنید.

1) فایل > جدید .... با این کار کادر محاوره ای New باز می شود.

2) در تب Files:

نوع فایل را انتخاب کنید (در این مورد: C++ Source File).

در کادر متنی File Name، نام فایل مورد نظر را وارد کنید.

چک باکس افزودن به پروژه باید فعال باشد.

روی OK کلیک کنید.

متن برنامه زیر را تایپ می کنیم:

بیایید هر خط برنامه را جداگانه بررسی کنیم.

در ابتدای برنامه یک دستورالعمل پیش پردازنده نوشته می شود که بر اساس آن یک فایل هدر به متن منبع برنامه متصل می شود. . این فایل حاوی توضیحات عملگرهای cin و cout I/O است.

هر برنامه ++C از توابعی تشکیل شده است که یکی از آنها باید نام main داشته باشد که نشان می دهد اجرای برنامه از آنجا شروع می شود. بعد از پرانتز، بدنه تابع در پرانتز ( ) نوشته می شود، یعنی. جملاتی که باید اجرا شوند.

هر قالبی هنگام نوشتن برنامه دارای شکل زیر است:

#شامل<…>

#شامل<…>

اعلام متغیرها؛

ورودی داده های اولیه؛

محاسبه نتیجه؛

خروجی نتیجه؛

برای ذخیره داده ها و نتایج منبع، باید فضای کافی را به آن اختصاص دهید RAM. این با استفاده از دستور 2 انجام می شود. برنامه ما نیاز به ذخیره دو مقدار دارد: دما بر حسب سانتیگراد و دما بر حسب فارنهایت، بنابراین عبارت دو متغیر را تعریف می کند. یکی، برای ذخیره دما در فارنهایت، فاهر نامیده می شود، دیگری (در سانتیگراد) سل نامیده می شود. برنامه نویس بر اساس هدف متغیرها را نامگذاری می کند. نام فقط می تواند از حروف لاتین، اعداد و خط زیر تشکیل شود و نباید با عدد شروع شود.

هنگام توصیف هر متغیری، باید آن را نشان دهید نوعاز آنجایی که دما می تواند نه تنها مقادیر صحیح را بگیرد، نوع واقعی برای متغیرها انتخاب می شود شناور

انواع اصلی:

int (کوتاه، بدون علامت) - اعداد صحیح،

شناور (دوبل، دوبل طولانی) - واقعی

کاراکتر - شخصیت

bool - منطقی

برای اینکه کاربر برنامه بداند در چه نقطه ای باید داده ها را از صفحه کلید وارد کند، به اصطلاح از اعلان ورودی (اپراتور 3) استفاده می شود. مشخص شده در اپراتور روی صفحه نمایش داده می شود. کوتخط کاراکترها و مکان نما به خط بعدی حرکت می کند. برای رفتن به خط بعدی استفاده کنید endl.

در عبارت 4، یک عدد از صفحه کلید به یک متغیر وارد می شود فاهر. برای این منظور از یک شی استاندارد استفاده می شود cinو عملیات استخراج (خواندن) >>. اگر نیاز به وارد کردن چندین مقدار دارید، از زنجیره عملیات >> استفاده کنید.

اپراتور 5 عبارت نوشته شده در سمت راست را ارزیابی می کند عملیات واگذاری(با علامت = مشخص می شود)، و نتیجه به متغیر cels اختصاص می یابد، یعنی در حافظه اختصاص داده شده به این متغیر ذخیره می شود. اول کل ثابت 5 بر تقسیم می شود بوسه ثابت 9، سپس نتیجه این عمل در نتیجه تفریق عدد 32 از متغیر fahr ضرب می شود.

برای نمایش نتیجه در عملگر 6 از یک شی استفاده می شود کوتیک زنجیره متشکل از پنج عنصر نمایش داده می شود. این خط است "فارنهایت:"، مقدار متغیر فاهر، خط "، بر حسب درجه سانتیگراد:"، مقدار متغیر سلول هاو اپراتور خط جدید endl.

آخرین عبارت (عبارت 7) این برنامه برای بازگشت از آن و انتقال مقدار به محیط خارجی در نظر گرفته شده است.

بعد، برنامه را کامپایل می کنیم. برای این کار دکمه نوار ابزار یا کلید ترکیبی Ctrl+F7 را فشار دهید. پنجره خروجی (در پایین صفحه) باید پیام 0 خطا(ها)، 0 هشدار(ها) (0 خطا، 0 هشدار) را نمایش دهد. اگر خطایی وجود دارد، با نسخه اصلی بررسی کنید.

برای شروع برنامه، دکمه نوار ابزار یا کلید ترکیبی Ctrl+F5 را فشار دهید.

هنگام شروع برنامه به جای کاراکترهای روسی ??? را می بینیم که توسط استانداردهای مختلف برای رمزگذاری کاراکترهای سیریلیک در سیستم عامل هاام‌اس داس و ویندوز. برای رفع این مشکل، تابع CharToOem را به برنامه اضافه کنید (اضافه ها برای وضوح با رنگ قرمز مشخص شده اند)

#شامل

#شامل

char* RUS (متن char*)

CharToOem (متن، buf)؛

float fahr, cels;

کوت<

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

کوت<

کوت<

تابع روسیه ()نمی توان بیش از یک بار در یک زنجیره از عملیات استفاده کرد<< для одного объекта کوت، بنابراین آن را به دو قسمت تقسیم کردیم.

همانطور که می بینید نتیجه اجرای برنامه با ثبات صفر است! این به دلیل نحوه ارزیابی عبارت رخ می دهد. بیایید دوباره به عملگر 4 نگاه کنیم. ثابت های 5 و 9 از نوع عدد صحیح هستند، بنابراین نتیجه تقسیم آنها نیز یک عدد صحیح است. طبیعتاً نتیجه محاسبات بیشتر نمی تواند چیزی جز صفر باشد. تصحیح این خطا ساده است - فقط کافی است حداقل یکی از ثابت ها را به عنوان یک عدد واقعی بنویسید، به عنوان مثال:

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

کار آزمایشگاهی شماره 1

موضوع: برنامه نویسی الگوریتم های خطی. کار با دیباگر"

هدف کار

1.1 تسلط بر ساده ترین ساختار برنامه در زبان C.

1.2 کسب مهارت در سازماندهی ورودی/خروجی در زبان C.

پشتیبانی فنی

2.1 کامپیوتر شخصی

2.2 صفحه کلید

2.3 نمایشگر

2.4 دستگاه چاپ

نرم افزار

3.1 سیستم عامل ویندوز

3.2 سیستم برنامه نویسی Visual C++ نسخه 6.0 یا Borland C++ نسخه 3.1 و نسخه های بعدی.

بیان مشکل

نوشتن یک برنامه ساده با پردازش داده.

5.1 موضوع و هدف کار.

5.2 بیان مشکل.

5.3 متن برنامه ها.

5.4 نتایج اجرای برنامه.

5.5 نمودارهای الگوریتم برنامه.

اطلاعات عمومی

برنامه خطی

اگر تمام دستورات یک برنامه به صورت متوالی و پشت سر هم اجرا شوند، چنین برنامه ای نامیده می شود. خطیبیایید به عنوان مثال برنامه ای را در نظر بگیریم که نتیجه را با استفاده از فرمول داده شده محاسبه می کند.

وظیفه 1.1. محاسبه با فرمول

برنامه ای بنویسید که با استفاده از فرمول، دما را بر حسب درجه فارنهایت به درجه سانتیگراد تبدیل کند:

که در آن C دما بر حسب سلسیوس و F دما بر حسب فارنهایت است.

قبل از نوشتن هر برنامه ای، باید به وضوح مشخص کنیم که چه چیزی باید وارد آن شود و در نتیجه چه چیزی باید به دست آوریم.

در این مورد:

داده های اولیه یک عدد واقعی است که دما را بر حسب سانتیگراد نشان می دهد،

نتیجه یک عدد واقعی دیگر است.

قبل از نوشتن برنامه، اجازه دهید محیط یکپارچه Visual C++ را باز کنیم:

Start/Programs/Microsoft Visual Studio/Microsoft Visual C++ 6.00

1) فایل > جدید...

2) در پنجره ای که باز می شود:

نوع برنامه کنسول Win32 را انتخاب کنید.

نام پروژه را در کادر متنی Project Name وارد کنید.

نام دایرکتوری که فایل های پروژه در آن قرار دارند را در قسمت متن Location وارد کنید (با استفاده از دکمه ... انتخاب کنید) به عنوان مثال G:/ASOIZ/

روی دکمه OK کلیک چپ کنید.

3) پنجره Win32 Console Application - Stepl of 1 باز می شود و در آن:

نوع پروژه خالی را انتخاب کنید.

روی دکمه Finish کلیک کنید.

4) پس از کلیک، پنجره New Project ظاهر می شود که در آن بر روی دکمه OK کلیک کنید.

1) فایل > جدید .... با این کار کادر محاوره ای New باز می شود.

2) در تب Files:

نوع فایل را انتخاب کنید (در این مورد: C++ Source File).

در کادر متنی File Name، نام فایل مورد نظر را وارد کنید.

چک باکس افزودن به پروژه باید فعال باشد.

روی OK کلیک کنید.

متن برنامه زیر را تایپ می کنیم:

بیایید هر خط برنامه را جداگانه بررسی کنیم.

در ابتدای برنامه یک دستورالعمل پیش پردازنده نوشته می شود که بر اساس آن یک فایل هدر به متن منبع برنامه متصل می شود. . این فایل حاوی توضیحات عملگرهای cin و cout I/O است.

هر برنامه ++C از توابعی تشکیل شده است که یکی از آنها باید نام main داشته باشد که نشان می دهد اجرای برنامه از آنجا شروع می شود. بعد از پرانتز، بدنه تابع در پرانتز ( ) نوشته می شود، یعنی. جملاتی که باید اجرا شوند.

هر قالبی هنگام نوشتن برنامه دارای شکل زیر است:

#شامل<…>

#شامل<…>

اعلام متغیرها؛

ورودی داده های اولیه؛

محاسبه نتیجه؛

خروجی نتیجه؛

برای ذخیره داده ها و نتایج منبع، باید فضای کافی را در RAM اختصاص دهید. این با استفاده از دستور 2 انجام می شود. برنامه ما نیاز به ذخیره دو مقدار دارد: دما بر حسب سانتیگراد و دما بر حسب فارنهایت، بنابراین عبارت دو متغیر را تعریف می کند. یکی، برای ذخیره دما در فارنهایت، فاهر نامیده می شود، دیگری (در سانتیگراد) سل نامیده می شود. برنامه نویس بر اساس هدف متغیرها را نامگذاری می کند. نام فقط می تواند از حروف لاتین، اعداد و خط زیر تشکیل شود و نباید با عدد شروع شود.

هنگام توصیف هر متغیری، باید آن را نشان دهید نوعاز آنجایی که دما می تواند نه تنها مقادیر صحیح را بگیرد، نوع واقعی برای متغیرها انتخاب می شود شناور

انواع اصلی:

int (کوتاه، بدون علامت) - اعداد صحیح،

شناور (دوبل، دوبل طولانی) - واقعی

کاراکتر - شخصیت

bool - منطقی

برای اینکه کاربر برنامه بداند در چه نقطه ای باید داده ها را از صفحه کلید وارد کند، به اصطلاح از اعلان ورودی (اپراتور 3) استفاده می شود. مشخص شده در اپراتور روی صفحه نمایش داده می شود. کوتخط کاراکترها و مکان نما به خط بعدی حرکت می کند. برای رفتن به خط بعدی استفاده کنید endl.

عبارت 4 ورودی صفحه کلید را انجام می دهد

برای این منظور از یک شی استاندارد استفاده می شود cinو عملیات استخراج (خواندن) >>. اگر نیاز به وارد کردن چندین مقدار دارید، از زنجیره عملیات >> استفاده کنید.

اپراتور 5 عبارت نوشته شده در سمت راست را ارزیابی می کند عملیات واگذاری(با علامت = مشخص می شود)، و نتیجه به متغیر cels اختصاص می یابد، یعنی در حافظه اختصاص داده شده به این متغیر ذخیره می شود. اول کل ثابت 5 بر تقسیم می شود بوسه ثابت 9، سپس نتیجه این عمل در نتیجه تفریق عدد 32 از متغیر fahr ضرب می شود.

برای نمایش نتیجه در عملگر 6 از یک شی استفاده می شود کوتیک زنجیره متشکل از پنج عنصر نمایش داده می شود. این خط است "فارنهایت:"، مقدار متغیر فاهر، خط "، بر حسب درجه سانتیگراد:"، مقدار متغیر سلول هاو اپراتور خط جدید endl.

آخرین عبارت (عبارت 7) این برنامه برای بازگشت از آن و انتقال مقدار به محیط خارجی در نظر گرفته شده است.

بعد، برنامه را کامپایل می کنیم. برای این کار دکمه نوار ابزار یا کلید ترکیبی Ctrl+F7 را فشار دهید. پنجره خروجی (در پایین صفحه) باید پیام 0 خطا(ها)، 0 هشدار(ها) (0 خطا، 0 هشدار) را نمایش دهد. اگر خطایی وجود دارد، با نسخه اصلی بررسی کنید.

برای شروع برنامه، دکمه نوار ابزار یا کلید ترکیبی Ctrl+F5 را فشار دهید.

هنگام شروع برنامه، به جای کاراکترهای روسی، ??? را می بینیم که به دلیل استانداردهای مختلف برای رمزگذاری کاراکترهای سیریلیک در سیستم عامل های MS DOS و ویندوز ایجاد می شود. برای رفع این مشکل، تابع CharToOem را به برنامه اضافه کنید (اضافه ها برای وضوح با رنگ قرمز مشخص شده اند)

#شامل

#شامل

char* RUS (متن char*)

CharToOem (متن، buf)؛

float fahr, cels;

کوت<

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

کوت<

کوت<

تابع روسیه ()نمی توان بیش از یک بار در یک زنجیره از عملیات استفاده کرد<< для одного объекта کوت، بنابراین آن را به دو قسمت تقسیم کردیم.

همانطور که می بینید نتیجه اجرای برنامه با ثبات صفر است! این به دلیل نحوه ارزیابی عبارت رخ می دهد. بیایید دوباره به عملگر 4 نگاه کنیم. ثابت های 5 و 9 از نوع عدد صحیح هستند، بنابراین نتیجه تقسیم آنها نیز یک عدد صحیح است. طبیعتاً نتیجه محاسبات بیشتر نمی تواند چیزی جز صفر باشد. تصحیح این خطا ساده است - فقط کافی است حداقل یکی از ثابت ها را به عنوان یک عدد واقعی بنویسید، به عنوان مثال:

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

برنامه های متشکل از دستورات ساده (عملگرها) خطی نامیده می شوند.
دستورات ساده (دستورالعمل های ساده الگوریتم) دستوراتی هستند که در طول اجرای خود از شرایط استفاده نمی کنند. عملگرهای ساده شامل دستورات (عملگرها) تخصیص، ورودی و خروجی، و فراخوانی یک الگوریتم کمکی (زیر روال) هستند.

اپراتور واگذاری مقدار فعلی یک متغیر را تنظیم یا تغییر می دهد. این امر محتوای یک عنصر حافظه خاص اختصاص داده شده برای این متغیر را تغییر می دهد. از آنجایی که هدف هر الگوریتم به دست آوردن مقدار مورد نظر در یک مکان خاص حافظه است، تقریباً هر برنامه ای حاوی این عملگر است. اپراتورهای ورودی/خروجی روش‌های استاندارد ورود داده برای تعیین مقادیر اولیه متغیرهای خاص استفاده می‌شود و شامل یک نام رویه و یک لیست ورودی حاوی نام متغیرهایی است که مقادیر آن‌ها از صفحه کلید یا از یک فایل وارد می‌شود. به متغیرها مقادیر خاصی اختصاص داده می شود.
بیشتر اوقات، برای تعیین مقادیر اولیه، استفاده از دستور ورودی به جای دستور انتساب راحت تر است، زیرا اگر نیاز به استفاده از برنامه با داده های اولیه متفاوت دارید، لازم نیست متن برنامه را تغییر دهید.
اگر رکورد الگوریتم حاوی یک دستور ورودی باشد، اجرای آن قطع می شود و کنترل به برنامه ای منتقل می شود که می تواند داده ها را وارد کند. پس از وارد کردن داده ها، کنترل به دستور بعدی الگوریتم منتقل می شود.
در پاسکال، روش ورود داده ها به این صورت است:
READ (لیست ورودی)؛
READLN (لیست ورودی).
هنگامی که رویه های READ و READLN اجرا می شوند، برنامه وارد حالت انتظار برای ورودی داده می شود. اگر چندین متغیر در لیست ورودی مشخص شده باشد، می توان آنها را در یک خط وارد کرد، با یک کاراکتر فاصله از یکدیگر جدا شده و یا در خطوط جداگانه (در یک ستون)، ورود هر مقدار را با کلید Enter تکمیل کرد.
تا زمانی که مقادیر برای همه متغیرهای لیست وارد نشده باشند، این روند تکمیل نخواهد شد. نوع مقادیر وارد شده باید با مقادیر متغیر مربوطه مطابقت داشته باشد.
تفاوت عبارت READLN با عبارت READ این است که پس از وارد کردن مقدار مورد نیاز داده ها، مکان نما به خط بعدی منتقل می شود.
اگر داده ها از صفحه کلید وارد می شوند، لیست ورودی لیستی از متغیرها است، به عنوان مثال. دنباله ای از نام متغیرها که با کاما از هم جدا شده اند. اگر ورودی از یک فایل باشد، اولین متغیر در لیست ورودی، متغیر فایل است که با نام فایل واقعی مرتبط است.
رویه های استاندارد برای خروجی نتایج محاسبات برای نمایش مقادیر آنها بر روی صفحه نمایش، چاپگر یا فایل استفاده می شود. در پاسکال، رویه های استنتاج به این صورت است:
WRITE (لیست خروجی)؛
WRITELN (فهرست خروجی).
فهرست عناصر خروجی بسیار گسترده تر از رویه های ورودی است. این ممکن است شامل موارد زیر باشد:
شناسه مقادیری که مقادیر آنها به دستگاه یا فایل مربوطه خروجی می شود.
عباراتی که مقادیر آنها ابتدا محاسبه شده و سپس به دستگاه خروجی داده می شود.
تبدیل به مقادیر (عددی، نمادین، رشته ای) شد.
تفاوت WRITE و WRITELN در این است که خروجی عبارت WRITE از محل فعلی مکان نما در صفحه نمایشگر شروع می شود و پس از پایان خروجی مکان نما در همان خط باقی می ماند. عبارت WRITELN مقادیر را از موقعیت فعلی چاپ می کند و سپس مکان نما به خط بعدی منتقل می شود. می توانید از دستور WRITELN بدون لیست خروجی برای انتقال مکان نما به یک خط جدید استفاده کنید.
اگر خروجی روی صفحه نمایشگر باشد، لیست خروجی لیستی از متغیرها یا دنباله ای از نام متغیرها، ثابت ها یا عبارات است که با کاما از هم جدا شده اند. اگر خروجی یک فایل باشد، اولین متغیر در لیست خروجی، متغیر فایل است که با نام فایل واقعی مرتبط است.
در دستور خروجی، بعد از عنصر لیست خروجی، می‌توانید فرمت خروجی را که با یک دونقطه از هم جدا شده است، مشخص کنید. عرض صفحه ای که مقادیر روی آن قرار خواهند گرفت. هنگام نمایش داده های واقعی، می توانید تعداد ارقام اعشاری را در قسمت کسری که می خواهید نمایش دهید نیز مشخص کنید.
مثال: نوشتن (الف: 10: 3، ب: 8).
عملگر برای فراخوانی یک الگوریتم کمکی. پاسکال زیربرنامه های رویه و زیرروال های تابع را پیاده سازی می کند. یک زیربرنامه با نام آن نامیده می شود که پارامترهای واقعی را نشان می دهد. در این مورد، به جای آرگومان های واقعی می توان مقادیر خاص، نام متغیرهای واقعی، عبارات و به جای نتایج - فقط نام متغیرهای واقعی وجود داشته باشد. در این مورد، تعداد، انواع و هدف پارامترهای رسمی و واقعی در لیست پارامترهای مربوطه باید مطابقت داشته باشد.

در بالا، مسائل عملی مختلفی را بررسی کردیم که می‌توان آنها را به یک طرح برنامه‌نویسی خطی تقلیل داد. در برخی از این مسائل، محدودیت های خطی شکل نابرابری داشتند، در برخی دیگر - برابری ها، در برخی دیگر - هر دو.

در اینجا ما یک مسئله برنامه ریزی خطی با محدودیت های برابری را در نظر خواهیم گرفت - به اصطلاح مسئله برنامه ریزی خطی اساسی (BLP).

در آینده، ما نشان خواهیم داد که چگونه می‌توانید از یک مشکل با محدودیت‌های نابرابری به یک OPLP حرکت کنید و به عقب برگردید.

مشکل اصلی برنامه ریزی خطی به صورت زیر بیان می شود.

تعدادی متغیر وجود دارد

لازم است مقادیر غیر منفی این متغیرها را پیدا کنید که سیستم معادلات خطی را برآورده کند:

و علاوه بر این، تابع خطی را به حداقل می رساند

بدیهی است که اگر یک تابع خطی را نه به حداقل، بلکه به حداکثر تبدیل کنیم، می‌توان به راحتی به تابع قبلی تقلیل داد، اگر علامت تابع را تغییر دهیم و به جای آن تابع را در نظر بگیریم.

اجازه دهید موافقت کنیم که هر مجموعه ای از متغیرها را راه حل قابل قبول OLP بنامیم

معادلات رضایت بخش (2.1).

راه حل بهینه را حل بهینه ای می نامیم که در آن تابع خطی (2.2) به حداقل می رسد.

مسئله اصلی برنامه ریزی خطی لزوماً راه حلی ندارد.

ممکن است معلوم شود که معادلات (2.1) با یکدیگر تناقض دارند. ممکن است معلوم شود که آنها راه حلی دارند، اما نه در منطقه مقادیر غیر منفی. سپس OLP هیچ راه حل قابل قبولی ندارد. در نهایت، ممکن است معلوم شود که راه حل های قابل قبول OLP وجود دارد، اما در میان آنها هیچ بهینه ای وجود ندارد: تابع L در ناحیه راه حل های قابل قبول از زیر نامحدود است.

در ادامه با نمونه هایی از این قبیل ویژگی های OPLP آشنا می شویم.

اجازه دهید قبل از هر چیز، مسئله وجود راه حل های قابل قبول برای OLP را در نظر بگیریم.

هنگام حل این موضوع، می‌توانیم تابع خطی L را که باید به حداقل برسانیم، حذف کنیم - حضور راه‌حل‌های امکان‌پذیر تنها با معادلات (2.1) تعیین می‌شود.

بنابراین، اجازه دهید یک سیستم معادلات (2.1) وجود داشته باشد. آیا مقادیر غیر منفی وجود دارد که این سیستم را برآورده کند؟ این موضوع در شاخه خاصی از ریاضیات - جبر خطی - مورد توجه قرار می گیرد.

اجازه دهید به اختصار برخی مفاد جبر خطی را بدون پرداختن به اثبات قضایای مربوطه ارائه کنیم.

ماتریس یک سیستم معادلات خطی

جدولی است که از ضرایب برای

یک ماتریس توسعه یافته از یک سیستم معادلات خطی همان ماتریس است که با ستونی از جمله های آزاد تکمیل شده است:

رتبه یک ماتریس بالاترین مرتبه یک تعیین کننده غیر صفر است که می توان با حذف برخی از سطرها و برخی از ستون ها از ماتریس به دست آورد.

در جبر خطی ثابت شده است که برای سازگاری سیستم معادلات خطی (2.1) لازم و کافی است که رتبه ماتریس سیستم برابر با رتبه ماتریس توسعه یافته آن باشد.

مثال 1. سیستمی متشکل از سه معادله با چهار مجهول را در نظر می گیریم:

تعیین کنید که آیا این سیستم مشارکتی است؟

راه حل. ماتریس سیستم:

ماتریس توسعه یافته:

بیایید رتبه ماتریس اول را تعیین کنیم. نمی تواند بیشتر از 3 باشد (زیرا تعداد ردیف ها 3 است). بیایید با حذف برخی از ستون‌ها از ماتریس، برای مثال آخرین مورد، مقداری تعیین‌کننده ایجاد کنیم. می گیریم

با محاسبه این تعیین کننده طبق قانون شناخته شده، به دست می آوریم:

این تعیین کننده برابر با صفر نیست، به این معنی که رتبه ماتریس سیستم برابر با 3 است. بدیهی است که رتبه ماتریس توسعه یافته نیز برابر با 3 است، زیرا همان تعیین کننده را می توان از عناصر تشکیل داد. از ماتریس توسعه یافته از برابری رتبه های ماتریس ها نتیجه می شود که سیستم معادلات سازگار است.

مثال 2. سازگاری سیستم دو معادله با سه مجهول را بررسی کنید:

راه حل. ماتریس سیستم توسعه یافته:

(سمت چپ آن ماتریس سیستم است).

اجازه دهید رتبه ماتریس سیستم را با ترکیب همه تعیین کننده های مرتبه دوم ممکن پیدا کنیم:

بنابراین، تمام تعیین‌کننده‌های مرتبه دوم ممکن که از عناصر ماتریس سیستم تشکیل شده‌اند برابر با صفر هستند. به این معنی که رتبه این ماتریس از سیستم است

بیایید رتبه ماتریس توسعه یافته را پیدا کنیم. تعیین کننده

بنابراین، رتبه ماتریس توسعه یافته با رتبه ماتریس سیستم برابر نیست: Grfg، بنابراین، سیستم معادلات ناسازگار است.

مثال 3. سازگاری یک سیستم از سه معادله با چهار مجهول را بررسی کنید:

ماتریس سیستم توسعه یافته راه حل (همراه با ماتریس سیستم):

بیایید رتبه ماتریس سیستم را پیدا کنیم. بیایید یک تعیین کننده مرتبه سوم از عناصر آن تشکیل شده باشد، برای مثال:

مشخص است که اگر هر ردیف از یک دترمینال ترکیبی خطی از دو ردیف دیگر آن باشد، دترمینان برابر با صفر است. در مورد ما، خط سوم یک ترکیب خطی از دو مورد اول است: برای به دست آوردن آن، کافی است خط اول را با دو برابر دوم اضافه کنید.

به راحتی می توان تأیید کرد که هر تعیین کننده مرتبه سومی که از عناصر ماتریس سیستم تشکیل شده باشد، دارای همان ویژگی است، بنابراین، رتبه ماتریس سیستم است.

برای مثال، از آنجایی که یک تعیین کننده مرتبه دوم غیر صفر وجود دارد،

سپس رتبه ماتریس سیستم برابر است با

با استفاده از همین استدلال، مطمئن می شویم که رتبه ماتریس توسعه یافته برابر با دو است: بنابراین، سیستم معادلات سازگار است.

توجه داشته باشید که سه معادله در این مثال مستقل نیستند: معادله سوم را می توان با ضرب دومی در دو و افزودن آن به اولی از دو مورد اول بدست آورد. این بدان معنی است که معادله سوم یک نتیجه ساده از دو مورد اول است. فقط دو معادله مستقل در سیستم وجود دارد: این با این واقعیت منعکس می شود که رتبه ماتریس سیستم

بنابراین، اگر سیستم معادله-قیود OLP سازگار باشد، ماتریس سیستم و ماتریس توسعه یافته آن دارای رتبه یکسانی هستند.

به این رتبه کلی، رتبه سیستم می گویند. چیزی بیش از تعداد معادلات مستقل خطی در میان محدودیت های تحمیلی را نشان نمی دهد.

بدیهی است که رتبه سیستم نمی تواند بیشتر از تعداد معادلات باشد:

همچنین بدیهی است که رتبه سیستم نمی تواند بیشتر از تعداد کل متغیرها باشد:

در واقع، رتبه یک ماتریس سیستم به عنوان بالاترین مرتبه تعیین کننده متشکل از عناصر ماتریس تعریف می شود. از آنجایی که تعداد خطوط آن برابر است با ; از آنجایی که تعداد ستون های آن برابر است با .

ساختار یک مسئله برنامه ریزی خطی به طور قابل توجهی به رتبه سیستم محدودیت (2.1) بستگی دارد.

اجازه دهید ابتدا موردی را در نظر بگیریم که، یعنی زمانی که تعداد معادلات مستقل خطی موجود در سیستم (2.1) برابر است با تعداد متغیرهای n. سیستم معادلات-قیود OZLP به شکل زیر است:

از آنجایی که تعیین کننده، متشکل از ضرایب،

برابر با صفر نیست از جبر معلوم می شود که در این مورد سیستم (2.4) راه حل منحصر به فردی دارد. برای یافتن کمیت کافی است ستونی را در تعیین کننده با ستونی از عبارات آزاد جایگزین کرده و بر آن تقسیم کنید.

بنابراین، هنگامی که سیستم معادلات محدودیت OLP یک راه حل منحصر به فرد دارد:

اگر در این راه حل حداقل یکی از کمیت ها منفی باشد، به این معنی است که راه حل حاصل غیرقابل قبول است و بنابراین، OPLP راه حلی ندارد.

اگر همه مقادیر غیرمنفی باشند، راه حل یافت شده قابل قبول است. همچنین، بدیهی است که بهینه است (زیرا دیگران وجود ندارند).

بدیهی است که این پرونده بی اهمیت نمی تواند ما را مورد توجه قرار دهد.

بنابراین، در آینده فقط زمانی را در نظر خواهیم گرفت که، یعنی زمانی که تعداد معادلات مستقلی که متغیرها باید برآورده کنند، تعداد خود متغیرها باشد. سپس، اگر سیستم سازگار باشد، بی نهایت راه حل دارد. در این صورت می‌توانیم مقادیر دلخواه را به متغیرها (به اصطلاح متغیرهای آزاد) اختصاص دهیم و بقیه متغیرها از طریق آنها بیان می‌شوند (این متغیرها را پایه می‌نامیم).

© 2024 ermake.ru -- درباره تعمیر رایانه شخصی - پورتال اطلاعاتی