30 / 103

Exercise: Loops and Functions

Mashq: sikllar va funksiyalar

Funksiyalar va sikllar bilan mashq qilish uchun kvadrat ildiz funksiyasini yozamiz: x soni berilganda, z² eng ko'p x ga yaqin bo'ladigan z sonini topishimiz kerak.

Kompyuterlar x ning kvadrat ildizini odatda sikl yordamida hisoblaydi. Biror z taxminidan boshlab, z² ning x ga qanchalik yaqinligiga qarab z ni to'g'rilab, yaxshiroq taxmin hosil qilishimiz mumkin:

example.go
z -= (z*z - x) / (2*z)

Shu to'g'rilashni takrorlash taxminni tobora yaxshilaydi, oxiri haqiqiy kvadrat ildizga imkon qadar yaqin javobga yetamiz.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

Buni tayyor turgan func Sqrt ichida amalga oshiring.

z uchun yaxshi boshlang'ich taxmin — kiruvchi qiymatdan qat'i nazar, 1.

Avval hisoblashni 10 marta takrorlang va yo'l-yo'lakay har bir z ni chiqarib boring. x ning turli qiymatlari (1, 2, 3, ...) uchun javobga qanchalik yaqinlashishingizni va taxmin qanchalik tez yaxshilanishini kuzating.

Maslahat: haqiqiy (float) qiymatni e'lon qilib, boshlang'ich qiymat berish uchun uni kasrli yozuvda yozing yoki tip o'zgartirishdan foydalaning:

example.go
z := 1.0
z := float64(1)

Keyin sikl shartini o'zgartiring: qiymat o'zgarishdan to'xtaganda (yoki juda kichik miqdorga o'zgarganda) sikl to'xtasin. Bu 10 dan ko'p yoki kam iteratsiya bo'lishini ko'ring.

z uchun boshqa boshlang'ich taxminlarni, masalan x yoki x/2 ni sinab ko'ring.

Funksiyangiz natijalari standart kutubxonadagi math.Sqrt ga qanchalik yaqin?

(Eslatma: agar algoritm tafsilotlari qiziqtirsa: yuqoridagi z² − x — z² kerakli qiymat x dan qanchalik uzoqligi, 2z ga bo'lish esa z² ning hosilasi bo'lib, z² qanchalik tez o'zgarayotganiga qarab z ni qancha to'g'rilashni belgilaydi. Bu umumiy yondashuv Nyuton usuli deb ataladi. U ko'plab funksiyalar uchun yaxshi ishlaydi, kvadrat ildiz uchun esa ayniqsa yaxshi.)

Testlar Sqrt funksiyangizni math.Sqrt bilan 1e-9 aniqlikda solishtiradi (x = 0.25, 2, 9, 100, 2500 uchun), shuning uchun sikl soni o'zgarish yo'qolguncha davom etishi kerak.

2-topshiriq

Kub(x float64) float64 funksiyasini yozing: x ning kub ildizini Nyuton usuli bilan toping. Bu safar to'g'rilash formulasi z -= (z*z*z - x) / (3*z*z). z := 1.0 dan boshlang va o'zgarish yo'qolguncha (yoki 100 marta) takrorlang. Masalan, Kub(27) — 3, Kub(2) — 1.2599.... Test 1e-6 aniqlikni tekshiradi.