Masalani yechish algaritm




Download 1,37 Mb.
bet2/2
Sana20.05.2024
Hajmi1,37 Mb.
#246151
1   2
Bog'liq
MAMARAIMOV ELYOR

Masalani yechish algaritm:

Integral javobi


To’gri to’rtburchaklar usuli


Dasturi
#include
#include
using namespace std;
double f(double x) {
double f = pow(5,x)/(7*x-1);
return f;
}
double rectangleMethod(double a, double b, int n) {
double step = (b - a) / n;
double sum = 0.0;

for (int i = 0; i < n; ++i) {


double x = a + i * step;
sum += f(x);
}
return sum * step;
}
int main() {
double a, b;
int n;

cout << "Intervallarni kiriting pastki va yuqori: ";


cin >> a >>b;
cout << "Bo'laklar sonini kiriting (n): ";
cin >> n;

double result = rectangleMethod(a, b, n);


cout << "Integralning qiymati: " << result << endl;
return 0;}

NATIJA


n

10

20

30

50

100

1000

10000

100000

F(x)
Integral qiymati
67.33007

50.82

58.65

61.44

63.75

65.52

67.1481

67.31

67.32

Trapetsiya usuli


Dastur kodi:


#include
#include
using namespace std;
double f(double x) {
double f = pow(5,x)/(7*x-1);
return f;
}
double trapezoidalMethod(double a, double b, int n) {
double step = (b - a) / n;
double sum = 0.5 * (f(a) + f(b));
for (int i = 1; i < n; ++i) {
double x = a + i * step;
sum += f(x);
}
return sum * step;
}
int main() {
double a, b;
int n;

cout << "Intervallarni kiriting (a va b): ";


cin >> a >> b;
cout << "Bo'laklar sonini kiriting (n): ";
cin >> n;

double result = trapezoidalMethod(a, b, n);


cout << "Integralning qiymati: " << result << endl;


return 0;


}

Natija:


n

10

20

30

50

100

1000

10000

100000

F(x)
Integral qiymati=
67.33007

69.037

67.7583

67.52

67.3987

67.3472

67.3302

67.3301

67.33

XULOSA:
Ushbu dastur foydalanuvchiga matritsani kiritish, kiritilgan matritsani ekranga chiqarish va har bir ustundagi juft elementlar yig'indisidan tashkil topgan B massivni hosil qilish imkonini beradi. Dastur nafaqat algoritmik fikrlash va massivlar bilan ishlashni o'rganishga yordam beradi, balki foydalanuvchiga kiritilgan ma'lumotlarni qayta ishlash va natijalarni vizual tarzda ko'rish imkoniyatini ham taqdim etadi. Bu dastur orqali foydalanuvchi matritsa elementlarini kiritish va juft elementlar yig'indisidan tashkil topgan B massivini hisoblash bo'yicha amaliy ko'nikmalar hosil qiladi.To'g'ri to'rtburchaklar va trapetsiyalar usullari matematik funksiyalar integralini hisoblashda samarali vosita bo'lib, analitik yondashuvlar qo'llanilmaydigan hollarda muhim ahamiyatga ega. Bu dasturlar talabalarga va dasturchilarga integralni numerik usulda hisoblashni tushunishga yordam beradi.



  1. Shaxsiy topshiriq

N=14
n1={14/3}+1, n2={14/5}+1, n3={14/7}+1
n1=3, n2=5, n3=1

15x1+10x2+5x3 35n1+35n2+20n3


10x1+4x2+12x3 32n1+18n2+28n3
4x1+15x2+10x3 18n1+24n2+35n3
L=1800x1+2000x2+1500x3 max
x1,x2,x3 0
15x1+10x2+5x3 300
10x1+4x2+12x3 214
4x1+15x2+10x3 209
L=1800x1+2000x2+1500x3 max
x1,x2,x3 0

15y1+10y2+4y3 1800


10y1+4y2+15y3 2000
5y1+12y2+10y3 1500
Z=180y1+156y2+154y3 min

15x1+10x2+5x3 300


10x1+4x2+12x3 214
4x1+15x2+10x3 209
L=1800x1+2000x2+1500x3+x4+x5+x6 max

dastur
#include


#include
#include

using namespace std;


vector> A = {{15, 10, 5}, {10, 4, 12}, {4, 15, 10}};


vector b = {300,214,209};
vector c = {1800, 2000, 1500};

vector solveSimplex(const vector>& A, const vector& b, const vector& c) {


int m = A.size(); // Number of equations
int n = c.size(); // Number of variables

// Initialize the tableau


vector> tableau(m + 1, vector(n + m + 1));
vector basis(m);

for (int i = 0; i < m; ++i) {


for (int j = 0; j < n; ++j) {
tableau[i][j] = A[i][j];
}
tableau[i][n + i] = 1;
basis[i] = n + i;
tableau[i][n + m] = b[i];
}

for (int j = 0; j < n; ++j) {


tableau[m][j] = -c[j];
}

while (true) {


int q = 0;
for (int j = 1; j < n + m; ++j) {
if (tableau[m][j] < tableau[m][q]) {
q = j;
}
}
if (tableau[m][q] >= 0) {
break;
}

int p = -1;


double minRatio = numeric_limits::infinity();
for (int i = 0; i < m; ++i) {
if (tableau[i][q] <= 0) {
continue;
}
double ratio = tableau[i][n + m] / tableau[i][q];
if (ratio < minRatio) {
minRatio = ratio;
p = i;
}
}
if (p == -1) {
throw logic_error("Unbounded solution");
}

for (int i = 0; i <= m; ++i) {


if (i != p) {
double alpha = tableau[i][q] / tableau[p][q];
for (int j = 0; j <= n + m; ++j) {
tableau[i][j] -= alpha * tableau[p][j];
}
}
}
basis[p] = q;
}

vector result(n);


for (int i = 0; i < m; ++i) {
if (basis[i] < n) {
result[basis[i]] = tableau[i][n + m] / tableau[i][basis[i]];
}
}
return result;
}

int main() {


vector result = solveSimplex(A, b, c);

cout << "Result: ";


for (double val : result) {
cout << val << " ";
}
cout << endl;

double maxValue = 0;


for (int i = 0; i < c.size(); ++i) {
maxValue += c[i] * result[i];
}
cout << "Maximum value: " << maxValue << endl;

return 0;


}
natija

Xulosa:



Berilgan masalaning simpleks usulda yechilishi chiziqli dasturlash muammolarini optimal hal qilishda simpleks usulining samaradorligini yana bir bor tasdiqladi. Ushbu usul o'zining aniqligi va tezkorligi bilan ajralib turadi. Excel yordamida yechim chiqarish jarayonini avtomatlashtirish va natijalarni tezroq olish imkonini beradi. Bu ish nafaqat chiziqli dasturlash nazariyasini mustahkamlashda, balki amaliy muammolarni hal qilishda ham foydali bo'ldi. Simpleks usuli yordamida muammolarni tizimli va izchil hal qilish mumkinligi yana bir bor tasdiqlandi.


Ushbu mustaqil ish davomida o'rgangan simpleks usulining qadamlarini qo'llash orqali har qanday chiziqli dasturlash muammosini samarali hal qilish mumkinligi aniqlandi. Bu bilimlar kelajakda boshqa murakkab muammolarni yechishda ham foydali bo'ladi.

Download 1,37 Mb.
1   2




Download 1,37 Mb.