Moving average in c language


Mungkinkah menerapkan rata-rata bergerak di C tanpa memerlukan jendela sampel, saya telah menemukan bahwa saya dapat mengoptimalkan sedikit, dengan memilih ukuran jendela, itulah kekuatan dua untuk memungkinkan perpindahan bit daripada membagi, tapi tidak memerlukannya. Penyangga akan menyenangkan Apakah ada cara untuk mengungkapkan hasil rata-rata bergerak baru hanya sebagai fungsi dari hasil lama dan sampel baru Tentukan contoh rata-rata bergerak, di atas jendela 4 sampel menjadi: Tambahkan sampel baru e: Rata-rata bergerak dapat diimplementasikan secara rekursif. , Tapi untuk kalkulasi rata-rata bergerak yang tepat, Anda harus mengingat sampel masukan tertua dalam jumlah (misalnya huruf a pada contoh Anda). Untuk panjang N rata-rata bergerak yang Anda hitung: di mana yn adalah sinyal output dan xn adalah sinyal input. Pers. (1) dapat ditulis secara rekursif. Jadi Anda harus selalu mengingat sampel xn-N untuk menghitung (2). Seperti yang ditunjukkan oleh Conrad Turner, Anda dapat menggunakan jendela eksponensial (jauh lebih panjang), yang memungkinkan Anda menghitung keluaran hanya dari keluaran lalu dan masukan saat ini: namun ini bukan standar pergerakan rata-rata (tanpa bobot) namun secara eksponensial Rata bergerak tertimbang, di mana sampel lebih jauh di masa lalu mendapatkan bobot yang lebih kecil, tapi (setidaknya secara teori) Anda tidak akan pernah melupakan apapun (bobotnya semakin kecil dan kecil untuk sampel jauh di masa lalu). Saya menerapkan rata-rata bergerak tanpa memori item individual untuk program pelacakan GPS yang saya tulis. Saya mulai dengan 1 sampel dan bagi 1 untuk mendapatkan nilai rata-rata saat ini. Saya kemudian menambahkan sampel anothe dan membagi dengan 2 ke avg saat ini. Ini berlanjut sampai saya mencapai panjang rata-rata. Setiap saat setelah itu, saya menambahkan sampel baru, mendapatkan rata-rata dan menghapus rata-rata dari total. Saya bukan seorang matematikawan tapi ini sepertinya cara yang bagus untuk melakukannya. Kupikir itu akan mengubah perut orang matematika sejati tapi, ternyata itu adalah salah satu cara yang bisa diterima untuk melakukannya. Dan hasilnya bagus. Ingatlah bahwa semakin tinggi panjangnya semakin lambat maka mengikuti apa yang ingin Anda ikuti. Itu mungkin tidak masalah sebagian besar waktu tapi ketika mengikuti satelit, jika Anda lamban, jejaknya bisa jauh dari posisi sebenarnya dan akan terlihat buruk. Anda bisa memiliki jarak antara tempat duduk dan titik-titik trailing. Saya memilih panjang 15 update 6 kali per menit untuk mendapatkan smoothing yang memadai dan tidak terlalu jauh dari posisi duduk sebenarnya dengan titik jepret yang merapikan. Jawab 16 16 16 di 23:03 menginisialisasi total 0, count0 (setiap kali melihat nilai baru Kemudian satu masukan (scanf), satu menambahkan totalnewValue, satu kenaikan (hitungan), satu rata-rata pembagian (jumlah total) Ini akan menjadi rata-rata bergerak di atas Semua input Untuk menghitung rata-rata hanya di atas 4 masukan terakhir, akan memerlukan 4 variabel input, mungkin menyalin setiap masukan ke inputvariable yang lebih tua, kemudian menghitung rata-rata pergerakan baru. Sebagai jumlah dari 4 variabel input, dibagi dengan 4 (pergeseran kanan 2 akan menjadi Baik jika semua input positif membuat perhitungan rata-rata dijawab 3 Feb 15 at 4:06 Itu benar-benar akan menghitung rata-rata total dan TIDAK rata-rata bergerak. Seiring bertambahnya dampak, setiap sampel masukan baru menjadi sangat kecil ndash Hilmar Feb Stack Exchange, IncI tahu ini dapat dicapai dengan dorongan sesuai: Tapi saya benar-benar ingin menghindari penggunaan dorongan. Saya telah googled dan tidak menemukan contoh yang sesuai atau mudah dibaca. Pada dasarnya saya ingin melacak bergerak Rata-rata arus aliran angka floating point yang sedang berlangsung menggunakan 1000 nomor terbaru sebagai sampel data. Apa cara termudah untuk mencapainya? Saya bereksperimen dengan menggunakan array melingkar, moving average eksponensial dan rata-rata bergerak yang lebih sederhana dan menemukan bahwa hasil dari array melingkar sesuai dengan kebutuhan saya yang terbaik. Tanya 12 Jun 12 at 4:38 Jika kebutuhan Anda sederhana, Anda mungkin hanya mencoba menggunakan rata-rata bergerak eksponensial. Sederhananya, Anda membuat variabel akumulator, dan saat kode Anda melihat setiap sampel, kode akan memperbarui akumulator dengan nilai baru. Anda memilih alpha konstan yaitu antara 0 dan 1, dan hitung ini: Anda hanya perlu menemukan nilai alfa dimana efek sampel tertentu hanya bertahan sekitar 1000 sampel. Hmm, saya tidak yakin ini cocok untuk anda, sekarang saya sudah meletakkannya disini. Masalahnya adalah bahwa 1000 adalah jendela yang cukup panjang untuk rata-rata bergerak eksponensial Im tidak yakin ada alfa yang akan menyebar rata-rata selama 1000 nomor terakhir, tanpa arus dalam perhitungan floating point. Tapi jika Anda menginginkan rata-rata yang lebih kecil, seperti 30 angka atau lebih, ini adalah cara yang sangat mudah dan cepat untuk melakukannya. Jawab 12 Jun pukul 4:44 1 di posmu Rata-rata pergerakan eksponensial dapat memungkinkan alfa menjadi variabel. Jadi ini memungkinkannya digunakan untuk menghitung rata-rata basis waktu (misalnya byte per detik). Jika waktu sejak update akumulator terakhir lebih dari 1 detik, Anda membiarkan alpha menjadi 1.0. Jika tidak, Anda bisa membiarkan alpha menjadi (usecs sejak update1000000 terakhir). Ndash jxh 12 Jun 12 at 6:21 Pada dasarnya saya ingin melacak rata-rata bergerak aliran arus dari sebuah angka floating point dengan menggunakan 1000 nomor terbaru sebagai sampel data. Perhatikan bahwa di bawah ini update total sebagai elemen sebagai tambahan yang ditambahkan, hindarkan O (N) yang mahal untuk menghitung jumlah yang dibutuhkan untuk rata-rata - sesuai permintaan. Total dibuat parameter yang berbeda dari T untuk mendukung mis. Menggunakan panjang panjang bila total 1000 s panjang, int untuk char s, atau double to total float s. Ini sedikit cacat pada numsamples yang bisa melewati INTMAX - jika Anda peduli Anda bisa menggunakan unsigned long long. Atau gunakan anggota data bool tambahan untuk merekam saat wadah pertama kali diisi saat bersepeda mendekati numamples di sekitar array (terbaik kemudian berganti nama menjadi sesuatu yang tidak berbahaya seperti pos). Dijawab 12 Jun 12 at 5:19 seseorang mengasumsikan bahwa operator quotvoid (T sample) quot sebenarnya adalah quotvoid operatorltlt (T sample) quot. Ndash oPless 8 Jun 14 jam 11:52 oPless ahhh. Baik terlihat Sebenarnya saya bermaksud untuk itu menjadi operator void () (sampel T) tapi tentu saja Anda bisa menggunakan notasi apa pun yang Anda sukai. Akan memperbaiki, terima kasih. Ndash Tony D 8 Jun 14 di 14: 27I memiliki 4.000 jumlah data stok, dan menghitung rata-rata pergerakan untuk semua nilai data, namun karena rata-rata bergerak berdasarkan data sebelumnya dan saya tidak dapat menghitung SMA 15 hari untuk 14 hari pertama, lewati 14 hari pertama dan hitunglah SMA di sisa data. Dan itu harus menggunakan LINQ untuk mencapainya. Ada yang bisa memberikan contoh atau petunjuk bagaimana menggunakan LINQ untuk menghitung rata-rata bergerak Output untuk nilai rata-rata sekitar 500-an saya benar-benar tidak mengerti bagaimana mungkin untuk mendapatkan nilai tinggi itu? Bergerak averager dengan jumlah array yang: 06072012 562,49 571,72 06.082.012 565,84 580,32 06.112.012 568,56 571,17 06.122.012 569,55 576,16 06.132.012 570,56 572,16 06.142.012 570,63 571,53 06.152.012 571,21 574,13 06.182.012 572,78 585,78 06.192.012 573,79 587,41 06.202.012 574,23 585,74 06.212.012 574,22 577,67 06.222.012 575,63 582,10 06.252.012 576,06 570,77 06.262.012 576,68 572,03 06.272.012 576,88 574.50 06282012 576.7 569.05 06292012 576.95 584.00 07022012 578.32 592.52 07032012 579.92 599.41 07032012 581,74 599.41 Diedit oleh Leemx Jumat, 16 November 2012 2:59 Pindah oleh Lisa Zhu Staf kontingen Microsoft Senin, 19 November 2012 7:38 linq terkait (Dari : Visual C General) Jumat, 16 November 2012 2:42 Untuk menciptakan moving average, saya akan mulai dengan membuat range dari 0 sampai (length of data list - length of moving period), maka untuk setiap nilai pada range Pilih elemen x sampai x 43 panjang periode bergerak dan hitung rata-rata. Semua dalam satu pernyataan LINQ yang bagus: Perhatikan bahwa ini tidak terlalu efisien, karena pada dasarnya Anda menguraikan daftar data untuk setiap nilai dalam jangkauan .. Hei, lihat Sistem ini memungkinkan tanda tangan lebih dari 60 cha Diedit oleh Arno Brouwer Jumat, November 2012, 4:42 PM Ditandai sebagai jawaban oleh Alexander Sun Jumat, 07 Desember 2012 2:44 PM Jumat, 23 November 2012 16:41 Semua balasan Contoh pernyataan LINQ Anda akan membantu. QuotPremature optimization adalah akar dari semua evil. quot - Knuth Untuk menciptakan moving average, saya akan memulai dengan membuat range dari 0 sampai (length of data list - length of moving period), maka untuk setiap nilai pada range pilih elements x Ke x 43 panjang periode bergerak dan hitung rata-rata. Semua dalam satu pernyataan LINQ yang bagus: Perhatikan bahwa ini tidak terlalu efisien, karena pada dasarnya Anda menguraikan daftar data untuk setiap nilai dalam jangkauan .. Hei, lihat Sistem ini memungkinkan tanda tangan lebih dari 60 cha Diedit oleh Arno Brouwer Jumat, November 2012, 4:42 PM Ditandai sebagai jawaban oleh Alexander Sun Jumat, 23 November 2012 14:42 PM Microsoft sedang melakukan survei online untuk memahami pendapat Anda dari situs Msdn Web. Jika Anda memilih untuk berpartisipasi, survei online akan dipresentasikan kepada Anda saat Anda meninggalkan situs MSDN. Apakah Anda ingin berpartisipasi Bantu kami memperbaiki MSDN. Kunjungi Halaman UserVoice kami untuk menyampaikan dan memberikan suara pada gagasan. Dev center Sumber belajar

Comments

Popular Posts