1-amaliy ishi. Mavzu: Massiv elementlarini tartiblashtirish. Matrisa maksimal, minimal elementini aniqlash algoritmi. Matrisalarni ko’paytirish dasturi. Amallar tartibini baholash 7-variant


Download 1.8 Mb.
bet2/3
Sana15.06.2023
Hajmi1.8 Mb.
#1480268
1   2   3
Bog'liq
algoritmlar1-amaliy

7-variant.
1) 3x-cosx-1=0
2) x3+0.2x2+0.5x-1.2=0
1) 3x-cosx-1=0
Berilgan tenglama 3x - cos(x) - 1 = 0 ni yechish uchun "bisecting" deb nomlanadigan algoritmani foydalanish orqali ildizning taqribiy qiymatini topish mumkin. Bu qiymatni topish uchun kod quyidagicha bo'ladi:

#include


#include
using namespace std;

double f(double x) {


return 3 * x - cos(x) - 1;
}

int main() {


double a = 0, b = 1, eps = 0.001; // boshlang'ich taxminiy oraliqlar va epsilon (toleransiya)
double c = (a + b) / 2; // o'rtaqiymatni topish
int iteration = 0, max_iter = 100; // maksimum vaqtni ko'rsatuvchi o'zgaruvchilar

while (fabs(f(c)) > eps && iteration < max_iter) {


if (f(a) * f(c) < 0) { // yechim taxminiy oraliqida yotadi
b = c;
} else { // yechim taxminiy oraliqida yotmaydi
a = c;
}
c = (a + b) / 2; // o'rtaqiymatni hisoblash
iteration++;
}

double root = (a + b) / 2; // ildizning taqribiy qiymatini hisoblash


cout << "Ildizning taqribiy qiymati: " << root << endl;

return 0;


}

Bu dasturda, `a` va `b` o'zgaruvchilari boshlang'ich taxminiy oraliqlarni ifodalaydi. `eps` qiymati ildizning taqribiy qiymatini aniqlash uchun ishlatiladi. `c` oraliqi yordamida, `a` va `b` ning o'rtaqiymatini topish uchun foydalaniladi.

`while` tsikli orqali yechimni topish uchun "bisecting" algoritmi ishlatiladi. Har bir yangi taxminiy yechim `c` o'rtaqiymati yordamida hisoblanadi. Tsikl sharti, `fabs(f(c)) > eps` bo'lsa, yani, yechim `eps` orqali yana e'tiborga olingan yechimlarga qarab nolga yaqin emas bo'lsa va "max_iter" (maksimum iteratsiya soni) o'tmagan bo'lsa, qaytaradi.

Dastur bajarildiqligi uchun, `root` o'zgaruvchisida ildizning taqribiy qiymati (`(a + b) / 2`) hisoblanadi va konsolga chiqariladi.


2) x3+0.2x2+0.5x-1.2=0
Berilgan tenglamani teng ikkiga bo'lish usuli bilan yechish uchun "Newton-Raphson" metodi foydalanilishi mumkin. Bu metoddan foydalanish uchun, berilgan funksiyaning birinchi va ikkinchi darajasining funksiyalarini topish va "Newton-Raphson" formulasi yordamida yangi taxminiy yechimlarni hisoblash kerak. Kod quyidagicha bo'ladi:

#include


#include
using namespace std;

double f(double x) {


return pow(x, 3) + 0.2 * pow(x, 2) + 0.5 * x - 1.2;
}

double df(double x) {


return 3 * pow(x, 2) + 0.4 * x + 0.5;
}

int main() {


double x0 = 1; // boshlang'ich taxminiy yechim
double eps = 0.0001; // epsilon (toleransiya)
int iteration = 0, max_iter = 100; // maksimum vaqtni ko'rsatuvchi o'zgaruvchilar

double x1 = x0 - f(x0) / df(x0); // birinchi yangi taxminiy yechim

while (fabs(x1 - x0) > eps && iteration < max_iter) {
x0 = x1; // birinchi taxminiy yechimni o'zgartirish
x1 = x0 - f(x0) / df(x0); // keyingi taxminiy yechimni hisoblash
iteration++; // iteratsiyani hisoblash
}

double root = x1; // ildizning taqribiy qiymati


cout << "Ildizning taqribiy qiymati: " << root << endl;

return 0;


}

`f(x)` funksiyasi berilgan tenglamani aniqlaydi, va `df(x)` funksiyasi uning ikkinchi darajasining funksiyasini topadi. `x0` o'zgaruvchisi boshlang'ich taxminiy yechimni aniqlaydi. `eps` qiymati yechimning taqribiy qiymatini aniqlash uchun ishlatiladi.

Dasturda `while` tsikli yordamida "Newton-Raphson" formulasi ishlatiladi. Har bir yangi taxminiy yechim `x1`-ni hisoblash uchun `x0` ning qiymati foydalaniladi. Shuningdek, tsikl sharti `fabs(x1 - x0) > eps` bilan tekshiriladi, yani, yechim `eps` orqali yana e'tiborga olingan yechimlarga qarab nolga yaqin emas bo'lsa va "max_iter" (maksimum iteratsiya soni) o'tmagan bo'lsa, qaytaradi.

Dastur bajarildiqligi uchun, `root` o'zgaruvchisida ildizning taqribiy qiymati (`x1`) hisoblanadi va konsolga chiqariladi.




Download 1.8 Mb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling