---
title: 數學軟體實作 - Exam 1
tags: 2020 Fall - 數學軟體實作
GA: G-77TT93X4N1
---
# Exam 1
> 考試時間: 9:00-9:50AM
> 請在 9:50AM 前上傳兩個 `matlab` m-file 至 github 並 pull request.
> 需有註解
## Problem 1 - 暴力求根
給定一個函數 $f(x)$ 及區間 $[-L, L]$, 試寫一 `matlab` 程式將其所有的根 ($f(x)=0$) 找出來.
* 此函數 input 為 $L$, output 為所有的根.
### !!指定做法!!
**指定求根法如下**:
1. 先求函數實根個數及區間
先將 $[a, b]$ 區間分成 $N$ 等分, 接著用中間值定理來看每個區間內有沒有函數的實根.
Reference: [Root finding-函數實根個數](https://hackmd.io/@teshenglin/ms_root_finding)
2. 在每個區間用暴力法求根
在區間內隨機取點, 如果在取到的點其函數值夠小我們就說找到解了.
* 誤差容許值 $10^{-5}$.
* 迭代超過 $10^8$ 次跳出並顯示提醒
* Reference: [matlab-03-暴力求根](https://hackmd.io/@teshenglin/ms_matlab_03)
## Problem 2 - 精準做圖
給定一個**可微分函數** $f(x)$ 及區間 $[-L, L]$, 試寫一 `matlab` 程式將其**準確**的畫出來.
**準確** 意思是要畫出 $f(x)$ 圖形並且標出所有的局部極大/極小值 (critical points, $f'=0$, 即可)
* 此 `matlab` 函數其 input 為 $L$, output 為 matlab figure.
* 程式主結構如下:
* 此函數內有兩個 local function, 分別為 `y=f(x)` 以及 `y=df(x)`, 對應於 $f(x)$ 以及 $f'(x)$.
```
function accurate_graph(L)
function y = f(x)
y = ??
end
function y = df(x)
y = ??
end
```
### !!指定做法!!
**指定作法**如下:
1. 先利用 problem 1 的暴力求根法求出函數微分 $f'(x)$ 在 $[-L, L]$ 區間內所有的根
2. 畫出函數圖形並在圖形上標出所有 $f'=0$ 的點
* 上傳的程式用以下函數為例
$$
f(x) = x\sin(x), \quad x\in[-L, L].
$$