Algebraik va transtsendent tenglamalarni taqribiy echish usullari
Download 129.76 Kb.
|
2. URINMALAR (NYUTON) USULI
Urinmalar usulini N’yuton usuli deb ham ataydilar. Bu usulni ham ikki xolat uchun kurib chiqamiz. 1- xolat. Faraz kilaylik, f(a) < 0, f(b) > 0, f'(x) > 0, f''(x) > 0 yoki f(a)>0, f(b) < 0, f'(x) < 0, f''(x) < 0 (7-rasm). 7- racm 8 - racm y = f(x) egri chiziqka V nuqtada urinma o’tkazamiz va urinmaning Ox uki bilan kesishgan nuqtasi x1ni aniqlaymiz. Urinmaning tenglamasi quyidagicha: y - f(b) = f'(b) (x-b), (2.12) bu erda y=0, x=x1 deb , (2.12) ni x1 nisbatan echsak, (2.13) Shu muloxazani [a;x1] kesma uchun takrorlab, x2 ni topamiz: (2.14) Umuman olganda (2.15) Hisoblashni |xn+1 - xn| £ e shart bajarilganda tuxtatamiz. 2- xolat. Faraz kilaylik f(a) < 0, f(b) > 0, f'(x) > 0, f''(x) < 0 yoki f(a)>0, f(b) < 0, f'(x) < 0, f''(x) > 0 (8- rasm). y = f(x) egri chiziqka A nuqtada urinma o’tkazamiz, uning tenglamasi: y - f(a) = f' (a) (x – a), (2.16) Bu erda y=0, x=x1 decak, (2.17) [x1;b] kesmadan (2.18) Umuman (2.19) (2.13) va (2.17) formulalarni bir-biri bilan solishtirsak, ular bir-birlaridan boshlangich yaqinlashishi (a yoki b) ni tanlab olish bilan farqlanadilar. Boshlangich yaqinlashishni tanlab olishda quyidagi koidadan fondalaniladi; boshlangich yaqinlashish tarzida [a;b] kesmaning shunday chekka (a yoki b) qiymatini olish kerakki, bu nuqtada funktsiyaning ishorasi uning ikkinchi hosilasining ishorasi bilan bir xil bo`lsin. Misol. x-sinx=0,25 tenglamaning ildizi e=0,0001 aniqlikda urinmalar usuli bilan aniqlansin. Echish. Tenglamaning ildizi [0,982; 1,178] kesmada ajratilgan (buni tekshirishni kitobxonga xavola kilamiz); bu erda a=0,982; b=1,178; f'(x)=1-cosx; f''(x) = sin x>0. [0,982; 1,178] kesmada f(1,178) . f''(x) > 0, ya`ni boshlangich yaqinlashishda x0 =1,178. Hisoblashni (2.13)-(2.15) formulalar vositasida bajaramiz. Hisoblash natijalari quyidagi 2.1-jadvalda berilgan. 2.1-jadval
J advaldan kurinadiki, x3-x2 = |1,17125 – 1,1713| = 0,00005 < e . Demak echim deb x = 1,17125 ni (e =0,0001 aniqlikda) olish mumkin. 5-8 – rasmlarga dikkat bilan e`tibor kilsak shuni ko`ramizki, f(x)=0 tenglamaning taqribiy echimlarini vatarlar va urinmalar usuli bilan topganda aniq echimga ikki chekkadan yaqinlashib kelinadi. Shuning uchun ikkala usulni bir vaktning o`zida qo`llash natijasida maqsadga tezrok erishish mumkin. Bu usulni kombinatsiyalangan usul deb ataydilar. Kombinatsiyalangan usul yuqorida keltirilgan usullarning umumlashmasi bo`lgani tufayli bu to`g’rida ko`p tuxtalmaymiz. #include #include using namespace std; int main() { int n; cout << "Enter the number of equations: "; cin >> n; double a[n][n+1], x[n]; cout << "Enter the elements of the augmented matrix: " << endl; for(int i=0; i; i++){ for(int j=0; j+1; j++){ cout << "a[" << i+1 << "][" << j+1 << "]: "; cin >> a[i][j];}} for(int i=0; i; i++) { for(int j=i+1; j; j++) { double f = a[j][i] / a[i][i]; for(int k=i+1; k+1; k++) { a[j][k] = a[j][k] - f * a[i][k]; } } } x[n-1] = a[n-1][n] / a[n-1][n-1]; for(int i=n-2; i>=0; i--) { double sum = 0; for(int j=i+1; j; j++) { sum += a[i][j] * x[j]; } x[i] = (a[i][n] - sum) / a[i][i]; } cout << "The solution is:" << endl; for(int i=0; i; i++) { cout << "x[" << i+1 << "]: " << x[i] << endl; } return 0; } Bu dastur yordamida paskalda Gauss usuli yordamida ma'lumotlarni kiritib uni hal qilishimiz mumkin. Oddiy takrorlash usuli Oddiy takrorlash usuli Zaydel usulidan biroz farq qiladi. Bu erda o'zgaruvchilarning ikkita vektori mavjud: oldingi X0 qiymatlari va X1 ning keyingi qiymatlari bilan. Har bir iteratsiya oxirida qiymatlar keyingisidan oldingisiga qayta tayinlanadi: #include #include double f(double x) { // funksiya return pow(x, 3) - 2*x - 5; } double g(double x) { // yana funksiya, uni oddiy takrorlash usuli bilan ishlatamiz return pow(2*x + 5, (double)1/3); } int main() { double x0 = 1; // boshlang'ich qiymat double x1 = g(x0); // keyingi qiymat double eps = 0.0001; // epsilon, masofa int i = 0; // iteratsiya soni while (fabs(x1 - x0) > eps) { x0 = x1; x1 = g(x0); std::cout << "Iteratsiya #" << ++i << ": x0=" << x0 << ", x1=" << x1 << ", |x1-x0|=" << fabs(x1 - x0) << std::endl; } std::cout << "Natija: " << x1 << std::endl; // natijani chiqaramiz return 0; } Download 129.76 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling