Artan sinuslar#10145

Artan sinuslar (Həll təhlili)

Lazımi ardıcıllığı konstruktiv şəkildə quracağıq. Təkrarlanan bir funksiya olan sinusun dövriyyəsi olduğu üçün, onu sin(k(2π + ɛ)) şəklində axtaracağıq, burada k = 0, 1, 2, .... Təbii bir ədəd tapacağıq ki, orada bir tam mövcud olsun və A = 2πk + ɛ mümkün olan ən kiçik dəyərində olsun. Məsələn, dəyərlərini -dən -ə qədər yoxlasanız, A = 710 olduqda ən kiçik əldə edilmiş olar. Bu halda 710 ≈ 2π \cdot 113 + 0.00006028.

Qoyun A = 710. Aşağıdakı ardıcıllığı nəzərdən keçirək

sin(A), sin(2A), sin(3A), ..., sin(nA)

Bu ardıcıllığın elementlərinin dəyərləri

sin(2π \cdot 113 + ɛ), sin(2 \cdot 2π \cdot 113 + 2 \cdot ɛ), sin(3 \cdot 2π \cdot 113 + 3 \cdot ɛ), ..., sin(n \cdot 2π \cdot 113 + n \cdot ɛ)

və ya dövriyyəni nəzərə alaraq bu dəyərlər bərabərdir

sin(ɛ), sin(2 \cdot ɛ), sin(3 \cdot ɛ), …, sin(n \cdot ɛ)

funksiyası x ∈ [0; π/2] aralığında artandır. Yuxarıdakı real ədədlərin ardıcıllığının monoton artan olmasını təmin etmək üçün kifayət edir ki: n \cdot ɛ ≤ \pi / 2. n = 10000 və ɛ = 0.00006028 qoyduqda əldə edəcəyik: 10000 \cdot 0.00006028 \le \pi / 2 və ya 0.6028 \le 1.57, bu doğrudur. Beləliklə, bu metodla lazım olan 10^4 təbii ədəd tapıla bilər.

Alqoritmin həyata keçirilməsi

Giriş dəyəri -i oxuyuruq.

scanf("%d", &n);

aralığında belə bir təbii ədəd tapırıq ki, A = 2πk + ɛ olduğu halda dəyəri ən kiçik olsun.

bestA = 0;
bestE = 2 * PI;
for (a = 1; a < 1000; a++)
{
  e = fmod(a, 2.0 * PI);
  if (e < bestE)
  {
    bestE = e;
    bestA = a;
  }
}

x = bestA dəyəri olacaq.

x = bestA;

Lazımi ardıcıllığı çıxarırıq: 0 \cdot 710, 1 \cdot 710, 2 \cdot 710, ..., (n - 1) \cdot 710.

for (i = 0; i < n; i++)
  printf("%d ", x * i);
printf("\n");