全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:908
推到 Plurk!
推到 Facebook!

剔除μ±1.64σ以外的投影量

尚未結案
imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-08 23:35:26 IP:220.139.xxx.xxx 未訂閱
各位前輩您好!!               小弟之前被大大指點後化繁而簡的算出六個Image投影量的平均值及標準差; 但小弟希望這六筆的投影量必須變異情況不大,故必須將這些較不具代表性的投影量予以剔除即用統計的方法"剔除信賴區間以外的筆跡投影量"。也就是90%的信賴區間為μ±1.64σ 因此以下是簡單程式碼:(部份由m58610大大提供) int Array[6] = {6812,5630,5823,6020,5422,5902}; float m = 0; //平均值 float div = 0; //標準差 int N = 0 ; for(int i = 0; i < 6; i ) m = m Array[i]; m = m / 6.0; for(int i = 0; i < 6; i ) div = div pow((Array[i] - m), 2); div = sqrt(div / 6.0); Edit1->Text = m; Edit2->Text = div; for(int i =0; i<6 ; i ) if((Array[i] > m-1.64*div) && (Array[i] < m 1.64*div)) //是否有符合信賴區間 N ; //符合信賴區間的筆數 Edit3->Text = N; 由上可知符合信賴區間的有5筆 我想問的是如何在剔除信賴區間後重新計算平均值與標準差 (註:如果在不知會剔除幾筆的情況下…小弟就不知如何舉一反三了@@) 煩請大大給小弟提示謝謝!! 打擾您保貴的閱讀時間在此跟您說聲抱歉!! 發表人 - imjoshua 於 2005/06/08 23:41:13
------
joshua
fusung
中階會員


發表:26
回覆:169
積分:99
註冊:2003-11-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-09 12:45:09 IP:61.222.xxx.xxx 未訂閱
Hello, imjoshua:    參考看看囉! < class="code"> //--------------------------------------------------------------------------- #include #pragma hdrstop #include <math> #include #include "Unit1.h" using namespace std; //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- float mymean(int* Array, int size); float mysigma(int* Array, int size, float m); vector conf_data(int* Array, int size, float m, float div); void __fastcall TForm1::Button1Click(TObject *Sender) { int Array[] = {6812,5630,5823,6020,5422,5902}; int size; //資料長度 float m = 0; //平均值 float div = 0; //標準差 int N = 0 ; vector in_data; // 在信賴區間內的資料 size = sizeof(Array)/sizeof(Array[0]); //計算資料長度 m = mymean(Array, size); Edit1->Text = FloatToStr(m); div = mysigma(Array, size, m); Edit2->Text = FloatToStr(div); in_data = conf_data(Array, size, m, div); N = in_data.size(); Edit3->Text = IntToStr(N); // 複製 in_data(向量形式) 至 copydata(矩陣形式) int *copydata = new int[N]; //剔除信賴區間以外的投影量 copy(in_data.begin(),in_data.end(),copydata); m = mymean(copydata, N); Edit4->Text = FloatToStr(m); div = mysigma(copydata, N, m); Edit5->Text = FloatToStr(div); delete copydata; } //--------------------------------------------------------------------------- float mymean(int* Array, int size) { float m = 0; //平均值 for(int i = 0; i < size; i++) m += Array[i]; m = m / size; return m; } //--------------------------------------------------------------------------- float mysigma(int* Array, int size, float m) { float div = 0; //標準差 for(int i = 0; i < size; i++) div = div + pow((Array[i] - m), 2); div = sqrt(div / size); return div; } //--------------------------------------------------------------------------- vector conf_data(int* Array, int size, float m, float div) { int N; // 落在信賴區間的資料個數 vector in_data; // 落在信賴區間內的資料 for(int i =0; i m-1.64*div) && (Array[i] < m 1.64*div)) //是否有符合信賴區間 in_data.push_back(Array[i]); // 滿足的堆疊至in_data } N = in_data.size(); if (N > 0){ return in_data; } } /* The first step toward proving things for yourself is to understand how others have done it before! */
------


The first step toward proving things for yourself is to understand how others have done it before!

imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-11 17:50:13 IP:61.228.xxx.xxx 未訂閱
fusung大大您好!! 實在太強了~我的問題都解決了! 但是請問大大您的程式碼執行後並無錯誤為什麼會有一個 [ > 打擾您保貴的閱讀時間在此跟您說聲抱歉!!
------
joshua
fusung
中階會員


發表:26
回覆:169
積分:99
註冊:2003-11-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-11 18:15:54 IP:211.23.xxx.xxx 未訂閱
Hello,imjoshua:    因為計算落在信賴區間內的副程式conf_data需要(always)回傳一vector,    但如果N>0不成立時,則不會回傳任何值,    這與自己上面定義的副程式相違背,同時被compiler檢查出來 如果把下面紅色部分遮起來,應該就可以修正這個 > < class="code"> vector conf_data(int* Array, int size, float m, float div) { // int N; // 落在信賴區間的資料個數 vector in_data; // 落在信賴區間內的資料 for(int i =0; i m-1.64*div) && (Array[i] < m 1.64*div)) //是否有符合信賴區間 in_data.push_back(Array[i]); // 滿足的堆疊至in_data } // N = in_data.size(); // if (N > 0){ <-錯誤,因為小於等於零情況應該不會發生 return in_data; // } } /* The first step toward proving things for yourself is to understand how others have done it before! */
------


The first step toward proving things for yourself is to understand how others have done it before!

系統時間:2024-05-17 12:42:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!