Fark hesabı, örnekler. - sayfa 4

 
Yousufkhodja Sultonov :

Örnek N=100'e yükseltildiğinde, 4. derece denklem aşağıdaki sonucu verir:



Matematiksel bir bakış açısından, aramanızın sınırları çok bulanık. Nasıl göründüğünü daha ayrıntılı olarak açıklayabilir misiniz?

 
Nikolay Semko :

Evet, yanılmışım. Gerçekten bir yaklaşım kullandığını sanıyordum. Kodunuza daha yakından baktım ve bunun bir yaklaşım olmadığını, çok sıra dışı olsa da sadece banal bir ortalama olduğunu fark ettim. Bundan sonra mor çizgiyi ve kırmızı çizgiyi 72 bar sola kaydırıyorsunuz ve 92 barlık kırmızı kuyruğu çiziyorsunuz ve her yeni barla yeniden çiziliyor. Mavi çizgi, kaydırılan mor çizgiden oluşur. Ve bu arada, açılış fiyatını değil kapanış fiyatını kullanmak daha doğru. Kapatmak için değiştirirseniz, her tik ile 92 barlık kırmızı kuyruğun zıpladığını hemen görebilirsiniz.

Hareketli ortalamaların sola kaydırılması herhangi bir fayda ve pratik uygulama taşımamaktadır. Ve sadece güzelliğe, uydurmaya ve kandırmaya hizmet eder.

Yaklaşım ve yumuşatma (ortalama) arasındaki farkı anlamanız gerekir. Yaklaşım sırasında, belirli bir veri aralığında bazı fonksiyonların (polinom, Fourier, Bezier, spline'lar, vb.) katsayıları hesaplanır ve bu katsayılar, kural olarak, en az bir veri değerindeki bir değişiklikle tümünü değiştirir, dolayısıyla fonksiyon, gözlemlenen verilerin tüm aralığı üzerinde yeniden çizilir. Ancak ortalama alırken, önceki verilere dayalı olarak yalnızca bir geçerli nokta dikkate alınır, bu nedenle ortalama alma (düzeltme) yeniden çizilmez, ancak yaklaşıklığın aksine her zaman verilerin gerisinde kalır.
Ve bir derece polinomunun ve Newton'un binomunun bununla ne ilgisi olduğunu anlamadım, kodda derece olmasa bile.

))

Uh-huh ve şimdi de açık bir Sin işlevi olmayan bir sinüzoid.

Sinüs için fark denklemi: https://dxdy.ru/post1247421.html#p1247421

      a1_Buffer[i]=((open[i] - Znach)    + 5061600 *a1_Buffer[i+ 1 ]- 7489800    *a1_Buffer[i+ 2 ]+ 4926624 *a1_Buffer[i+ 3 ]- 1215450 *a1_Buffer[i+ 4 ])/ 1282975 ;

      a2_Buffer[i]=   2701 *a1_Buffer[i]   - 5328    *a1_Buffer[i+ 1 ]    +   2628 *a1_Buffer[i+ 2 ];

      a4_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 1 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a4_Buffer[i+ 0 +z]=   5 *a4_Buffer[i+ 1 +z]  -   10 *a4_Buffer[i+ 2 +z]   +   10 *a4_Buffer[i+ 3 +z]  -   5 *a4_Buffer[i+ 4 +z]  +   1 *a4_Buffer[i+ 5 +z];  }}

       a3_Buffer[i+ 292 ]=a1_Buffer[i];   if (i<= 1 ) { for (z= 292 - 1 ;z>= 0 ;z--){         a3_Buffer[i+ 0 +z]=   2.998096443 *a3_Buffer[i+ 1 +z]  -   2.998096443 *a3_Buffer[i+ 2 +z]   +   1 *a3_Buffer[i+ 3 +z]   ;  }}

      a5_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 1 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a5_Buffer[i+ 0 +z]=   3 *a5_Buffer[i+ 1 +z]  -   3 *a5_Buffer[i+ 2 +z]   +   1 *a5_Buffer[i+ 3 +z]   ;  }}

       a6_Buffer[i+ 292 ]=a1_Buffer[i];   if (i<= 1 ) { for (z= 292 - 1 ;z>= 0 ;z--){         a6_Buffer[i+ 0 +z]=   3.998096443 *a6_Buffer[i+ 1 +z]  -   5.996192886 *a6_Buffer[i+ 2 +z]   +   3.998096443 *a6_Buffer[i+ 3 +z]  -   1 *a6_Buffer[i+ 4 +z] ;  }}

144 periyodu olan sinüzoidlerin hesaplanması vurgulanmıştır.İlki sabite yakındır (şekilde yeşil), ikincisi eğimli bir düz çizgiye yakındır (şekilde kırmızı).

Рекуррентная формула для синуса : Дискуссионные темы (М) - Страница 7
  • dxdy.ru
В принципе, используется и рекуррентное вычисление через возвратное уравнение второго порядка, и через комплексную экспоненту. Первое менее расходно по ресурсам (умножение и два сложения и две ячейки памяти) по сравнению со вторым (два умножения, четыре сложения, две ячейки памяти при постоянной частоте), но накапливается погрешность быстрее...
 

Muhtemelen, şubeye hemen bir "referans listesi" eklemek gerekiyordu. ))

Konuyla ilgili çok fazla literatür var, bu yüzden zevkinize birkaç ince kitap sunacağım:

Sonlu farklar hesabı Leonid Kuzmich Lakhtin

Markushevich A.I. Dönüş Sıraları

 
Alexey Panfilov :

))

Uh-huh ve şimdi de açık bir Sin işlevi olmayan bir sinüzoid.

Sinüs için fark denklemi: https://dxdy.ru/post1247421.html#p1247421

144 periyodu olan sinüzoidlerin hesaplanması vurgulanmıştır.İlki sabite yakındır (şekilde yeşil), ikincisi eğimli bir düz çizgiye yakındır (şekilde kırmızı).


Edebiyat için teşekkürler Alexey. Özyinelemenin dikkati hak ettiğini ve bazı işlevleri veya algoritmaları hızlandırmak için başarıyla uygulanabileceğini tamamen kabul ediyorum, ancak doğruyu söylemek gerekirse bundan emin değilim.
Ben sadece şeylerin özel adlarıyla anılmasını ve kafa karışıklığı olmaması için genel kabul görmüş terminolojinin kullanılmasını savunuyorum. Bence bu konunun başında özyinelemeden bahsetmek ve enterpolasyon, yaklaşım ve polinomlardan bahsetmemek daha mantıklı olacaktır, çünkü sizin örneğinizde gösterilmezler. Ve formların aşırı doğruluğu ile başkalarını yanıltmamak için göstergenin sola kaymasına odaklanmak daha doğru olacaktır, çünkü herkes bir başkasının kodunu anlamayı sevmez, ben de buna düştüm.

Alexey, anladığım kadarıyla özyineleme konusunda uzmansın. Şahsen ben bu meşe meşesindeyim. Size bir sorum, bir ricam ve bir önerim var. Fourier yöntemiyle yaklaşımı hızlandırmak için yöntemlerinizi kullanabilir misiniz? Bir şey bana bunun mümkün olduğunu söylüyor. Başarılı olursanız, sadece WOW olacak !!! ve pratik faydaları muazzam olacaktır. MT5'te Fourier ekstrapolasyonu ile bir yaklaşıklık örneği ekliyorum (sadece çok daha hızlı ve basitçe daha iyi). Bu örneği buradan aldım ve netlik için fare ve Ctrl tuşları (başlangıç konumunu değiştirir) ve Shift (eş zamanlı olarak harmonik sayısını değiştirirken gözlem süresini değiştirir) ile kontrol ekleyerek biraz geliştirdim. Deneyebilir misin?

Bu göstergenin kontrolü şu şekildedir: fare ile grafiğe tıkladıktan sonra (pencereyi etkinleştirmek için), Ctrl tuşuna basın (ve bırakın) ve fareyi hareket ettirerek başlangıç konumunu değiştirin, işlemi tamamlamak için herhangi bir tuşa basın (hariç Ctrl ve Üst Karakter). Periyodu değiştirmek için Shift tuşu ile aynı (yaklaşık işlevi hesaplamak için çubuk aralığı).

Dosyalar:
Fourier.mq5  16 kb
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Fark hesabı, örnekler.

Nikolai Semko , 2018.01.12 00:43


Ben sadece şeylerin özel adlarıyla anılmasını ve kafa karışıklığı olmaması için genel kabul görmüş terminolojinin kullanılmasını savunuyorum. Bence bu konunun başında özyinelemeden bahsetmek ve enterpolasyon, yaklaşım ve polinomlardan bahsetmemek daha mantıklı olacaktır, çünkü sizin örneğinizde gösterilmezler. Ve formların aşırı doğruluğu ile başkalarını yanıltmamak için göstergenin sola kaymasına odaklanmak daha doğru olacaktır, çünkü herkes bir başkasının kodunu anlamayı sevmez, ben de buna düştüm.


Nikolai, mesaj ve ekteki gösterge için teşekkürler.

Ve kesinlikle katılıyorum, her şeyden önce, terimlerin ve isimlerin açık bir şekilde anlaşılması gerekiyor.

Pozisyonumu açıklayacağım.

İki noktadan düz bir çizgi çizmek mümkündür, yani bu düz çizginin herhangi bir noktasını, noktalar arasındaki aralığın içinde (enterpolasyon) veya noktalar arasındaki aralığın dışında (ekstrapolasyon) bulmak mümkündür.

Örneğin, bir Kartezyen koordinat sisteminde doğrusal bir ikinci dereceden denklemle ifade edilen kare bir parabole karşılık gelen tek değerli bir eğri çizmek için üç nokta kullanılabilir. Bu, hem uç noktalar arasındaki aralığın içinde (enterpolasyon) hem de bu aralığın dışında (ekstrapolasyon) bu eğrinin herhangi bir noktasını bulabileceğiniz anlamına gelir. Aynı zamanda, bu noktaların oluşturulduğu yasa polinom olarak kalır. En azından üç noktada, sinüzoidal bir gelişme yasasını varsayarsak belirsiz olmayan bir sinüzoid veya varlığını varsayarsak bir daire çizmenin mümkün olduğunu ekleyeceğim.

Böylece, ikinci dereceden bir polinomun üç nokta üzerinden (bizim durumumuzda, ikisi önceki tarihi biriktiren ve üçüncüsü yeni bilgi taşıyan) dördüncü, gerekli (başka yasalar olabilir) ve yeterli olduğu ortaya çıkıyor. Bir eylem veya sürecin tanımı.

Tabii bunun için başka şartlar sunmazsanız.

Aynı zamanda, gereken minimum sayıyı aşan değerlerin sayısı için bir eğri oluşturmak gerekirse, istatistiksel olarak (veya başka türlü) regresyon dahil değerleri ağırlıklandırmanın makul yöntemlerinin olması gerektiğine tamamen katılıyorum. Kullanılmış.
 
Alexey Panfilov :


Nikolai, mesaj ve ekteki gösterge için teşekkürler.

Ve kesinlikle katılıyorum, her şeyden önce, terimlerin ve isimlerin açık bir şekilde anlaşılması gerekiyor.

Pozisyonumu açıklayacağım.

İki noktadan düz bir çizgi çizmek mümkündür, yani bu düz çizginin herhangi bir noktasını, noktalar arasındaki aralığın içinde (enterpolasyon) veya noktalar arasındaki aralığın dışında (ekstrapolasyon) bulmak mümkündür.

Örneğin, bir kartezyen koordinat sisteminde doğrusal bir ikinci dereceden denklemle ifade edilen kare bir parabole karşılık gelen tek değerli bir eğri çizmek için üç nokta kullanılabilir. Bu, hem uç noktalar arasındaki aralığın içinde (enterpolasyon) hem de bu aralığın dışında (ekstrapolasyon) bu eğrinin herhangi bir noktasını bulabileceğiniz anlamına gelir. Aynı zamanda, bu noktaların oluşturulduğu yasa polinom olarak kalır. En azından üç noktada, sinüzoidal bir gelişme yasasını varsayarsak belirsiz olmayan bir sinüzoid veya varlığını varsayarsak bir daire çizmenin mümkün olduğunu ekleyeceğim.

Böylece, ikinci dereceden bir polinomun üç nokta üzerinden (bizim durumumuzda, ikisi önceki tarihi biriktiren ve üçüncüsü yeni bilgi taşıyan) dördüncü, gerekli (başka yasalar olabilir) ve yeterli olduğu ortaya çıkıyor. Bir eylem veya sürecin tanımı.

Tabii bunun için başka şartlar sunmazsanız.

Aynı zamanda, gereken minimum sayıyı aşan değerlerin sayısı için bir eğri oluşturmak gerekirse, istatistiksel olarak (veya başka türlü) regresyon dahil değerleri ağırlıklandırmanın makul yöntemlerinin olması gerektiğine tamamen katılıyorum. Kullanılmış.

Üç noktadan polinom eğrisi nasıl oluşturulur, yakın zamanda bu kodda uyguladım. Kendinizi tanımanızı tavsiye ederim.

Ancak kodunuzda üç nokta üzerinden polinom hesaplaması yok:

Alexey Panfilov :

Grafikte şöyle görünüyor:

72'lik bir omuz ile 4. dereceden bir polinom ile mavi-kırmızı çizgi enterpolasyonu (aralık içinde bir nokta bulma).

a1_Buffer[i]=((open[i] - Znach)    + 5061600 *a1_Buffer[i+ 1 ]- 7489800    *a1_Buffer[i+ 2 ]+ 4926624 *a1_Buffer[i+ 3 ]- 1215450 *a1_Buffer[i+ 4 ])/ 1282975 ;

İnce mavi çizgi, 78'lik bir omuza sahip 2. derece bir polinom tarafından bir ekstrapolasyondur (aralığın dışında bir nokta bulma).

a2_Buffer[i]=   3160 *a1_Buffer[i]   - 6240    *a1_Buffer[i+ 1 ]    +   3081 *a1_Buffer[i+ 2 ];

Kırmızı, bu 4. dereceden bir polinom oluşturma çizgisidir. Yeniden çizilir ve son çubuğun açılış noktasına göre yapılır.

a4_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 10 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a4_Buffer[i+ 0 +z]=   5 *a4_Buffer[i+ 1 +z]  -   10 *a4_Buffer[i+ 2 +z]   +   10 *a4_Buffer[i+ 3 +z]  -   5 *a4_Buffer[i+ 4 +z]  +   1 *a4_Buffer[i+ 5 +z];  }}


2. dereceden bir polinom ve 4. dereceden bir polinom dediğiniz şey böyle polinomlar değildir.

2. dereceden bir polinom formülünden beri:

Price = a+b*i+c*i²

ve 4. dereceden bir polinomun formülü:

Price = a+b*i+c*i²+d*i³+f*i⁴

nerede

a,b,c,d,f - hesaplanacak katsayılar

i - çubuk numarası.

Ve bir i çizgisinin geçerli noktasının diğerinin son üç noktasından (i, i+1 ve i+2) hesaplandığı yerde (örnek olarak 2. derece polinom dediğiniz şeyi kullanarak) ortalama almanın süslü bir yöntemi var. farklı ağırlıklar ile çizgi. Buna ortalama alma (veya yumuşatma) denir. Bu nedenle ortalama alma sonucu oluşan grafik gecikmesini gizlemek için grafiği 72 bar sola kaydırdınız.

Örneğimde , bir polinomun üç nokta üzerinden hesaplanması açık ve net bir şekilde görülmektedir.

 
Nikolay Semko :

Örneğimde , bir polinomun üç nokta üzerinden hesaplanması açık ve net bir şekilde görülmektedir.

Göstergeniz çok iyi.

Dördü için aynısına sahipseniz, bu ileti dizisinin 23. mesajındaki göstergenin gri çizgisinin herhangi üç noktasına ekleyin.

Bu satır (gri) arabellekte hesaplanır:

 a5_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 1 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a5_Buffer[i+ 0 +z]=   3 *a5_Buffer[i+ 1 +z]  -   3 *a5_Buffer[i+ 2 +z]   +   1 *a5_Buffer[i+ 3 +z]   ;  }}
1 *Y1- 3 *Y2+ 3 *Y3- 1 *Y4 =0 - ikinci dereceden parabolün fark denklemi. Eşit mesafeli noktalar için.
 
Alexey Panfilov :

Göstergeniz çok iyi.

Dördü için aynısına sahipseniz, bu ileti dizisinin 23. mesajındaki göstergenin gri çizgisinin herhangi üç noktasına ekleyin.

Bu satır (gri) arabellekte hesaplanır:

1 *Y1- 3 *Y2+ 3 *Y3- 1 *Y4 =0 - ikinci dereceden parabolün fark denklemi. Eşit mesafeli noktalar için.

Yorumlarda MT4 için bir kodum var

Evet, gri çizgi bir polinomdur. Ve kaydırılmış ortalamaya çizdiğiniz mesaj 2'deki 92 barlık kırmızı kuyruk da bir polinomdur ve sadece yeniden çizilir. Ama aynı zamanda her şeye polinom diyorsunuz ve aynı zamanda polinomunuzun yeniden çizilmediğini iddia ediyorsunuz. Ve bu öyle değil. Bu yüzden sizden bir maçaya maça demenizi istiyorum.

Ve bu arada, benim örneğimde, polinomda aşağıdaki noktaların oluşumu katsayıların hesaplanmasıyla gerçekleşir ve bu algoritma, farkı önceki değerle de uygulamama rağmen, "fark hesaplamanızdan" daha hızlıdır:

 for (i= 1 ; i<=Bar[ 0 ]; i++) { ArcDownBuffer[i]=ArcDownBuffer[i- 1 ]+D2; D2+= 2 *C2;}

senin seçeneğin:

 for (z= 92 - 1 ;z>= 0 ;z--){        a5_Buffer[i+ 0 +z]=   3 *a5_Buffer[i+ 1 +z]  -   3 *a5_Buffer[i+ 2 +z]   +   1 *a5_Buffer[i+ 3 +z]   ;  }
 
Nikolay Semko :

Yorumlarda MT4 için bir kodum var

Evet, gri çizgi bir polinomdur. Ve kaydırılmış ortalamaya çizdiğiniz mesaj 2'deki 92 barlık kırmızı kuyruk da bir polinomdur ve sadece yeniden çizilir. Ama aynı zamanda her şeye polinom diyorsunuz ve aynı zamanda polinomunuzun yeniden çizilmediğini iddia ediyorsunuz. Ve bu öyle değil. Bu yüzden sizden bir maçaya maça demenizi istiyorum.


Evet, ikinci dereceden bir polinom ile aynı fikirdeyim, yapıya katılan sadece 4 nokta veya dördüncü dereceden bir polinom için 6 puan bağlı. Elde edilen ve yeniden çizilmeyen çizginin tamamı elbette bir polinom değildir , yalnızca belirli bir derecede bir polinom kullanıldığı düşünülen durumlarda oluşturulur.

İnce çizgiler yalnızca bir sonraki noktanın oluşturulduğu polinomları görselleştirir.

Şartlar üzerinde anlaştık gibi görünüyor. :)


Ve bu arada, benim örneğimde, polinomda aşağıdaki noktaların oluşumu katsayıların hesaplanmasıyla gerçekleşir ve bu algoritma, farkı önceki değerle de uygulamama rağmen, "fark hesaplamanızdan" daha hızlıdır:

 for (i= 1 ; i<=Bar[ 0 ]; i++) { ArcDownBuffer[i]=ArcDownBuffer[i- 1 ]+D2; D2+= 2 *C2;}

senin seçeneğin:

 for (z= 92 - 1 ;z>= 0 ;z--){        a5_Buffer[i+ 0 +z]=   3 *a5_Buffer[i+ 1 +z]  -   3 *a5_Buffer[i+ 2 +z]   +   1 *a5_Buffer[i+ 3 +z]   ;  }

Hız konusunda haklısın.

Şimdilik, eğer kritik değilse, kod yazarken performans sorunlarına ve muhtemelen ihmal (öncelikle benimki :)) ) üzerinde durmamanızı öneririm.

 
Nikolay Semko :

Fourier yöntemiyle yaklaşımı hızlandırmak için yöntemlerinizi kullanabilir misiniz? Bir şey bana bunun mümkün olduğunu söylüyor. Başarılı olursanız, sadece WOW olacak !!! ve pratik faydaları muazzam olacaktır. MT5'te Fourier ekstrapolasyonu ile bir yaklaşıklık örneği ekliyorum (sadece çok daha hızlı ve basitçe daha iyi). Bu örneği buradan aldım ve netlik için fare ve Ctrl tuşları (başlangıç konumunu değiştirir) ve Shift (eş zamanlı olarak harmonik sayısını değiştirirken gözlem süresini değiştirir) ile kontrol ekleyerek biraz geliştirdim. Deneyebilir misin?

Bu göstergenin kontrolü şu şekildedir: fare ile grafiğe tıkladıktan sonra (pencereyi etkinleştirmek için), Ctrl tuşuna basın (ve bırakın) ve fareyi hareket ettirerek başlangıç konumunu değiştirin, işlemi tamamlamak için herhangi bir tuşa basın (hariç Ctrl ve Üst Karakter). Periyodu değiştirmek için Shift tuşu ile aynı (yaklaşık işlevi hesaplamak için çubuk aralığı).


Fourier ile ilgili olarak, konu zengindir. İlgi olursa belli aralıklarla dokunacağız.

Büyük olasılıkla, sorunun formülasyonu ile ana sorular ortaya çıkacaktır (farklı bir yöntem nedeniyle). Şimdi, anladığım kadarıyla, gösterge Fourier spektrumundan en genlik frekanslarını seçiyor.

Fourier göstergesini polinomun zaten ortalaması alınan çizgiye sabitlemek için bir fikrim vardı. Tahmini okumalarının daha yavaş değişeceğine dair bir şüphe var.

Neden: