# 北軟100 pC 高斯分佈(Gaussian distribution) ###### tags: `北軟100` ## 題目 高斯分佈(Gaussian distribution)又稱為常態分配 )又稱為常態分配(Normal distribution),在數學、物理以及工程等領域 、物理以及工程等領域,是非常重要的機率分佈 ,是非常重要的機率分佈,在統計學上,許多方面,有著重大的影響力。其中,一維度或是單變數高斯分佈 ,一維度或是單變數高斯分佈(Gaussian distribution),其機率密度函數 p(x)定義如下: $$ y = p(x)=\dfrac{1}{\sqrt{2\pi}\sigma} \exp(-\dfrac{(x-u)^2}{2\sigma^2})$$ 參數µ代表隨機變數 x 的平均值(mean),參數$σ^2$代表隨機變數 x 的變異度(variance), 當分佈中的平均值µ = 0 和變異度$σ^2$ = 1時,稱此分佈為標準常態分佈(standard normal distribution)。 請你設計一程式,可以讓使用者輸入隨機變數 ,可以讓使用者輸入隨機變數 x 的範圍[min ~ max],平均值 µ,變異度 $σ^2$和顯示顏色,按執行後,可以畫出此時使用者輸入參數之高斯分布(Gaussian distribution)圖形。執行範例如下 。執行範例如下: ![](https://i.imgur.com/A8OW9o4.png) 左圖為輸入 x = [-5 ~ 5], 5 ~ 5], µ=0, $σ^2$=0.2,藍色之高斯分佈。 右圖為輸入 x = [-5 ~ 5], 5 ~ 5], µ=0, $σ^2$=1,紅色之高斯分佈。 評分: 1. 程式介面 (2.5 分)。 2. 可以讓使用者輸入資料(5 分)。 3. 水平座標,會隨著輸入資料不同而變動(5 分)。 4. 劃出的高斯分佈圖形正確(12.5 分)。 ## 想法 不知道使用者隨機輸入的顏色是啥,所以我只新增Red Blue Green。 跟一般處理算式題的方式沒兩樣,刻一個函式來處理公式。 接下來將點標上去。 圖表要先做預處理,Series的ChartType要設為Spline。 ## 程式碼(C#) ```csharp= using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace problemC { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public double getValue(double x,double u,double var) { return (1 / (Math.Sqrt(2 * Math.PI) * Math.Sqrt(var))) * Math.Exp(-(Math.Pow((x - u), 2)) / (2 * var)); } private void Form1_Load(object sender, EventArgs e) { chart1.Series[0].Points.Clear(); comboBox1.Items.Add("Red"); comboBox1.Items.Add("Blue"); comboBox1.Items.Add("Green"); } private void button1_Click(object sender, EventArgs e) { chart1.Series[0].Points.Clear(); chart1.Series[0].Color = Color.FromName(comboBox1.Text); double var = Convert.ToDouble(textBox1.Text); double u = Convert.ToDouble(textBox2.Text); double xMin = Convert.ToDouble(textBox3.Text); double xMax = Convert.ToDouble(textBox4.Text); for(double i = xMin; i <= xMax; i+=0.1) { chart1.Series[0].Points.AddXY(i,getValue(i, u, var)); } } } } ```