---
# System prepended metadata

title: Matlab入門教學(二)
tags: [技巧教學]

---

# Matlab 教學(二)
> 此篇內容為還沒有接觸matlab的初學者所寫，作者也是新手，資料來源於網路，有錯的話還請指正

> [Matlab入門教學(一)](https://hackmd.io/5N3j2unnQA-SS53txfTsXg?both)
[Matlab入門教學(三)](https://hackmd.io/fr2bmUY9TcKub2LG9J6_7w?view)
## Equation
![Example_1](https://hackmd.io/_uploads/HysPnDAPA.png)

```python=
#script
clc, clearvars, close all

x = linspace(0,5);
y = (-(x-3) .^2)+10

plot(x,y)

max(y)

[MaxVal,I] = max(y)

x_maxval = x(I)
```
* 0~5中取出100個值，帶入方程式中
* 印出圖形並找出最大值
![Example_2](https://hackmd.io/_uploads/BJxlTZWuA.png)
* 透過Max function找出y在I=60時有最大值
* 可反推在I=60時，x的值為2.9798
![Example_3](https://hackmd.io/_uploads/SyvNkMb_R.png)

```python=
#script
clc, clearvars, close all

x = linspace(0,5);
y = @(x) (-(x-3) .^2)+10

y(20.7)
x(2)
```
* anonymous function:將整個y宣告為x變數的方程式
* x=20.7時，y的值為-303.2900；x(2)為矩陣，此時的0.0505為第二個矩陣元素內的值，並非運算後的結果
![Example_4](https://hackmd.io/_uploads/SJS7WGZdR.png)


## Plotting
![Example_5](https://hackmd.io/_uploads/SkkIfGbuR.png)

```python=
#script1
clc, clearvars, close all

x = linspace(-10,10);
y1 = (-(x-3) .^2) +10;
y2 = (-(x-3) .^2) +15;
y3 = (-(x-5) .^2) +10;

figure(1)

plot(x,y1,'ms')
xlabel('x'),ylabel('y'),title('Y vs. X - Problem A')
grid on

hold on
plot(x,y2,'bv')

hold on
plot(x,y3,'g+')

legend('y1','y2','y3')
```
* 先準備三個方程式，方便作圖。呼叫```figure(1)```當作作圖介面
* ```plot(x,y)```印出圖形，除了xy軸之外，後方增加的是繪出的線型ex.'ms'為粉色方形的意思，可透過```doc plot```或```help plot```尋找相關編號
* ```title```、```xlabel```、```ylabel```分別為圖的名稱、x軸內容、y軸內容。
:::danger
label必定在plot的後方
:::
* ```grid on```分割背景方格；```hold on ```保留上個線型
![Example_6](https://hackmd.io/_uploads/ryVMuzWO0.png)

```python=
#script2
clc, clearvars, close all

x = linspace(-10,10);
y1 = (-(x-3) .^2) +10;
y2 = (-(x-3) .^2) +15;
y3 = (-(x-5) .^2) +10;

figure(1)
subplot(2,2,1)
plot(x,y1,'--m','MarkerFaceColor','m','MarkerSize',10)
xlabel('x'),ylabel('y'),title('Y vs. X - Problem A')
grid on

subplot(2,2,2)
plot(x,y2,'bv')
xlabel('x'),ylabel('y'),title('Y vs. X - Problem A')

subplot(2,2,3)
plot(x,y3,'gs','MarkerFaceColor','g')
xlabel('x'),ylabel('y'),title('Y vs. X - Problem A')
xlim([0 2]),ylim([-20 100])
```
* ```subplot(x,y,z)```x乘y的大小，z表示第幾位。ex.subplot(2,2,3):在2x2的4個位子中排第三位(左下角)
* ```xlim```、```ylim```限制圖形所打印出的範圍
![Example_7](https://hackmd.io/_uploads/HyJ60f-OC.png)

## Logic

![Example_8](https://hackmd.io/_uploads/B1xggX-dC.png)

```python=
#script1
% Matrices and vector
clc, clearvars, close all

% parameters
max_x=10;
x = linspace(0,max_x,100000);
y = sin(x);
y_check = 0.8;

% actions
plot(x,y,'*'),hold on ,plot([0 max_x],[y_check y_check],'-r')
y_greater = y > y_check;

% outputs
sum(y_greater)
FinalPercent = sum(y_greater) / length(y) *100
```
* ```linspace```給出範圍內的x值；```y_check```定義比大小的y值
* ```plot1```印出sin(x)的圖形；```plot2```印出想要界定大小，方便觀察
* ```y_greater```實際上為一個等同取樣數量大小的矩陣，將```y > y_check```的值存入，成立存1、不成立存0。
ex.此處的取樣大小為100000，便是1x1000000的矩陣
* ```sum(y_greater)```因為矩陣內只有0跟1，將矩陣元素全部相加後，出來的值為超過0.8的總數，再除以取樣總數，得出百分比
![Example_9](https://hackmd.io/_uploads/BycTQiMuC.png)

:::info
以下在command window中執行，可一行一行做，觀察執行結果
:::
```python=
A = ones(1,10)
A > 0
A = ones(1,10)*5
A > 0
sum(A)
result = A > 0
sum(result)
8 >= 8
18 + 5 < 100
55 ~= 20
10 > 5 & 11 > -100
10 > 5 & 11 < -100
10 > 5 | 11 < -100
```
* ```&```:and(且)
* ```~=```:does not equal(不等於)
* ```|```:or(或)

## 附錄:電腦很笨，所以人要很聰明
大家應該都聽過看過下面這張梗圖，電腦真的這麼笨嗎?
電腦的確很笨，笨到只能一個口令一個動作，你給他A只會跳出A來。電腦資料庫收到長得像貓生物辨別為狗，那電腦看到的貓就會認為是狗。電腦拓展了人腦的極限，幫我們省略許多步驟，讓我們能夠專注在問題上，嫌棄電腦，很多時候只是找不到正確的使用說明而已，這也是我寫下這篇網誌的原因，希望能夠幫助大家學習如何使用matlab

![image](https://hackmd.io/_uploads/ByXFDjGuR.png)

---
參考資料
>1.[MATLAB Crash Course for Beginners](https://youtu.be/7f50sQYjNRA?si=tSxig57n6B59pO08)
