---
# System prepended metadata

title: 北軟100 pC 高斯分佈（Gaussian distribution)
tags: [北軟100]

---

# 北軟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));
            }
        }
    }
}
```