Jason 2017 在輔大碩職的日子
2017年9月24日 星期日
H925(Sun) YMDD說明
H925(Sun) YMDD說明
是一個實用的日期縮寫版...
一般我們在註明 日期 時,會用到幾個格式
民國 年-月-日
106-9-25
1060925
西元 年-月-日
2017-9-25
20170925
170925 <--雖然可以縮短至六位,但容易混淆.
例: 040905 ??
在需要註明日期,又不希望它太長(愈短愈好)...
最短格式為YMD 年月日 各一個"符號"來代
Y表示"年"(Year) 由2000年開始 ~到203x年
可由 0(2000年),1(2001年),2...,9, A, B, ..., G, H(2017年), ..., Y, Z
M表示"月"(Month)
可由 1, 2, 3,...9, A(10月), B(11月), C(12月)
D表示"日"(Day)
1-31日, 可由 1, 2, 3, ...9, A(10日), ....K(20日)...
1-9 => 1, 2, 3, 4, 5, 6, 7, 8, 9
10-19 => A, B, C, D, E, F, G, H, J, K, (I不使用)
20-29 => L, M, N, P, Q, R, S, T, V, W, (O,U不使用)
30-31 => X, Y
YMD雖然可以變很短,但有一個問題,就是(人工)轉換上
比較困難,後來改為YMDD (日改成兩位數,直接用01-31,沒有轉換問題)
註: 可能有人會說 日 會有轉換問題,年也會有轉換問題...
但 你試想一下,一年才"年"改變一次,基本上,不會有問題
--------------------------------
x101 101是好的開始
xC31 一年的最後一天
xAxx 月份看到英文(A,B,C)表示年底到了...
H925 = 2017年9月25日
是一個實用的日期縮寫版...
一般我們在註明 日期 時,會用到幾個格式
民國 年-月-日
106-9-25
1060925
西元 年-月-日
2017-9-25
20170925
170925 <--雖然可以縮短至六位,但容易混淆.
例: 040905 ??
在需要註明日期,又不希望它太長(愈短愈好)...
最短格式為YMD 年月日 各一個"符號"來代
Y表示"年"(Year) 由2000年開始 ~到203x年
可由 0(2000年),1(2001年),2...,9, A, B, ..., G, H(2017年), ..., Y, Z
M表示"月"(Month)
可由 1, 2, 3,...9, A(10月), B(11月), C(12月)
D表示"日"(Day)
1-31日, 可由 1, 2, 3, ...9, A(10日), ....K(20日)...
1-9 => 1, 2, 3, 4, 5, 6, 7, 8, 9
10-19 => A, B, C, D, E, F, G, H, J, K, (I不使用)
20-29 => L, M, N, P, Q, R, S, T, V, W, (O,U不使用)
30-31 => X, Y
YMD雖然可以變很短,但有一個問題,就是(人工)轉換上
比較困難,後來改為YMDD (日改成兩位數,直接用01-31,沒有轉換問題)
註: 可能有人會說 日 會有轉換問題,年也會有轉換問題...
但 你試想一下,一年才"年"改變一次,基本上,不會有問題
--------------------------------
x101 101是好的開始
xC31 一年的最後一天
xAxx 月份看到英文(A,B,C)表示年底到了...
H925 = 2017年9月25日
2017年9月23日 星期六
H923(Sat) 科學計算方法與實務探討 課後議題
H923(Sat) 科學計算方法與實務探討 課後議題
課堂使用MatLab軟體,在學校有買MatLab版權...
學生課後回家,需要有替代方案...
課後兩個議題
1. MatLab 替代方案
找到Octave 來替代MatLab
https://zh.wikipedia.org/wiki/GNU_Octave
2. plot 繪圖問題
plot 繪圖,正常會給結果.就是已經畫好
老師希望 可以看到慢動作的過程
找到 用for迴圈及 drawnow; pause(.3) 配合
寫程式副程式plots 已經可以實現初步功能
--------------------------------------------------------------------------------------
1. MatLab 替代方案
在網路上找到Octave
https://zh.wikipedia.org/wiki/GNU_Octave
Octave是一個旨在提供與Matlab語法相容的開放原始碼科學計算及數值分析的工具;它同時也是GNU計畫成員之一。...
2. plot 繪圖問題
老師希望 可以看到慢動作的過程
找到 用for迴圈及 drawnow; pause(.3) 配合
寫程式副程式plots 已經可以實現初步功能
t = [ 0:0.01:2*pi];
%時間軸 0到2pi (6.2831852...)
v = sin(t);
% 值為 sin wave
% 內附 繪圖 功能 缺點,無法看到過程...
plot(t,v)
% 初步 改善plot 加個 s為plots (取slow,step用意)
%註:講 初步 改善 只它用在 某些資料數據格式
% 無法完全 相容plot 還沒全面了解...
plots(t,v)
plots(t,v,0.1) % (繪圖)間隔0.1秒
plots(t,v,0.1, 100) % (整個圖形)分成 100次 完成
% 以上效果一樣 (10秒完成 整個圖形)
plots(t,v,0.1, 1000) % (整個圖形)分成 1000次 完成
plots(t,v,0.3) % (繪圖)間隔 變長 =0.3秒 (放慢更新速度)
plots(t,v,0.01, 1000) % (整個圖形)分成 1000次 完成 ,(繪圖)間隔 變短 =0.01秒 (加快更新速度)
% 註:1000 * 0.01 = 10秒 (全部時間一樣是10秒,但繪圖動作更細緻...)
% 以下程式碼在 Octave 可以正常work
% 初步 改善 能某些資料數據格式
% 無法完全 相容plot 還沒全面了解...
function plots(x,y,sec,times)
len = length(x);
if nargin == 2,
sec = 0.1; %預設為每0.1秒 更新一次
end
step = int32(len/100); % 預設 共分100個步驟完成
% 預設 100*0.1 = 10秒完成
if nargin == 4,
step = int32(len/times);
end
xmin = min(x);
xmax = max(x);
xrang= xmax - xmin;
xmin = xmin - xrang/10;
xmax = xmax + xrang/10;
ymin = min(y);
ymax = max(y);
yrang= ymax - ymin;
ymin = ymin - yrang/10;
ymax = ymax + yrang/10;
for n=1:step:len,
plot(x(1:n), y(1:n));
axis([xmin xmax ymin ymax]);
drawnow
pause(sec);
end
endfunction
課堂使用MatLab軟體,在學校有買MatLab版權...
學生課後回家,需要有替代方案...
課後兩個議題
1. MatLab 替代方案
找到Octave 來替代MatLab
https://zh.wikipedia.org/wiki/GNU_Octave
2. plot 繪圖問題
plot 繪圖,正常會給結果.就是已經畫好
老師希望 可以看到慢動作的過程
找到 用for迴圈及 drawnow; pause(.3) 配合
寫程式副程式plots 已經可以實現初步功能
--------------------------------------------------------------------------------------
1. MatLab 替代方案
在網路上找到Octave
https://zh.wikipedia.org/wiki/GNU_Octave
Octave是一個旨在提供與Matlab語法相容的開放原始碼科學計算及數值分析的工具;它同時也是GNU計畫成員之一。...
2. plot 繪圖問題
老師希望 可以看到慢動作的過程
找到 用for迴圈及 drawnow; pause(.3) 配合
寫程式副程式plots 已經可以實現初步功能
t = [ 0:0.01:2*pi];
%時間軸 0到2pi (6.2831852...)
v = sin(t);
% 值為 sin wave
% 內附 繪圖 功能 缺點,無法看到過程...
plot(t,v)
% 初步 改善plot 加個 s為plots (取slow,step用意)
%註:講 初步 改善 只它用在 某些資料數據格式
% 無法完全 相容plot 還沒全面了解...
plots(t,v)
plots(t,v,0.1) % (繪圖)間隔0.1秒
plots(t,v,0.1, 100) % (整個圖形)分成 100次 完成
% 以上效果一樣 (10秒完成 整個圖形)
plots(t,v,0.1, 1000) % (整個圖形)分成 1000次 完成
plots(t,v,0.3) % (繪圖)間隔 變長 =0.3秒 (放慢更新速度)
plots(t,v,0.01, 1000) % (整個圖形)分成 1000次 完成 ,(繪圖)間隔 變短 =0.01秒 (加快更新速度)
% 註:1000 * 0.01 = 10秒 (全部時間一樣是10秒,但繪圖動作更細緻...)
% 以下程式碼在 Octave 可以正常work
% 初步 改善 能某些資料數據格式
% 無法完全 相容plot 還沒全面了解...
function plots(x,y,sec,times)
len = length(x);
if nargin == 2,
sec = 0.1; %預設為每0.1秒 更新一次
end
step = int32(len/100); % 預設 共分100個步驟完成
% 預設 100*0.1 = 10秒完成
if nargin == 4,
step = int32(len/times);
end
xmin = min(x);
xmax = max(x);
xrang= xmax - xmin;
xmin = xmin - xrang/10;
xmax = xmax + xrang/10;
ymin = min(y);
ymax = max(y);
yrang= ymax - ymin;
ymin = ymin - yrang/10;
ymax = ymax + yrang/10;
for n=1:step:len,
plot(x(1:n), y(1:n));
axis([xmin xmax ymin ymax]);
drawnow
pause(sec);
end
endfunction
H923(Sat) 開學了 剛拿到的學生證
含有門禁(感應)與悠遊卡功能
原則上 這兩年(2017-2018)要經常到輔大上課
H915(Fri) 開學日(大學部新生參加,研究所不用參加)
H917(Sun) 體檢日(大學部新生體適能)
H923(Sat) 科學計算方法與實務探討
H923(Sat) 科學計算方法與實務探討
MatLab
A = zeros(8)
A = zeros(8,8)
% 歸零 8x8 矩陣
A = zeros(1,8)
0 0 0 0 0 0 0 0
A = zeros(8,1)
0
0
...
0
A = rand(8)
% 亂數產生 (0~1)
A = 100*rand(8)
% 亂數產生 (0~100)
A = 100*rand(8) - 50
% 亂數產生 (-50 ~50)
A = [ A11 A12 A13 ] %一維陣列
A = [ A11 A12; A21 A22 ] %二維陣列
Anxn * Xnx1 = Bnx1
A- [ A X ] = A- B
X = A- B
Note: A- inv(A)
A- A = 1
-----------------------------------------
A- 與 B ,(反過)來求解 X
A = rand(8);
X = rand(8,1);
B = A * X;
Y = inv(A) B; % A- => inv(A)
比較 Y與 X 差異
norm(X-Y)
ans = 1.1161e-15
結果為一個很小的誤差(數據沒什麼差異)
註: norm 有三個實現方式
1. sum | X-Y |
X-Y 絶對值的總合 2. max | X-Y |
X-Y 絶對值的最大值
3. sum (X-Y)^2
X-Y 平方的總合
-----------------------------------------------
t = [ 0:0.01:2*pi];
a = sin(t);
plot(t,a)
sin wave 繪圖
如果要控制繪圖細節動作,請參考
H923(Sat) 科學計算方法與實務探討 課後議題
MatLab
A = zeros(8)
A = zeros(8,8)
% 歸零 8x8 矩陣
A = zeros(1,8)
0 0 0 0 0 0 0 0
A = zeros(8,1)
0
0
...
0
A = rand(8)
% 亂數產生 (0~1)
A = 100*rand(8)
% 亂數產生 (0~100)
A = 100*rand(8) - 50
% 亂數產生 (-50 ~50)
A = [ A11 A12 A13 ] %一維陣列
A = [ A11 A12; A21 A22 ] %二維陣列
Anxn * Xnx1 = Bnx1
A- [ A X ] = A- B
X = A- B
Note: A- inv(A)
A- A = 1
-----------------------------------------
A- 與 B ,(反過)來求解 X
A = rand(8);
X = rand(8,1);
B = A * X;
Y = inv(A) B; % A- => inv(A)
比較 Y與 X 差異
norm(X-Y)
ans = 1.1161e-15
結果為一個很小的誤差(數據沒什麼差異)
註: norm 有三個實現方式
1. sum | X-Y |
X-Y 絶對值的總合 2. max | X-Y |
X-Y 絶對值的最大值
3. sum (X-Y)^2
X-Y 平方的總合
-----------------------------------------------
t = [ 0:0.01:2*pi];
a = sin(t);
plot(t,a)
sin wave 繪圖
如果要控制繪圖細節動作,請參考
H923(Sat) 科學計算方法與實務探討 課後議題
2017年9月22日 星期五
H922(Fri) 資訊安全
H922(Fri) 資訊安全
cryptography and network security principles and practice
使用Python程式語言
*大學全面教Python
$ python
Python 2.7.3 (default, Oct 26 2016, 21:04:23)
...
>>> 10 // 3 # 取商
3
>>> 10 / 3
3
>>> 10 / 3.0
3.3333333333333335
>>> 10 % 3 # 取餘
1
>>> 50**23 # 整數 沒有位數限制 ?!
1192092895507812500000000000000000000000L
RSA加密演算法是一種非對稱加密演算法。在公開金鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。...
以下均為整數
(N, e)公鑰public key,(N, d) 是私鑰 (private key 或是 secret key)
公鑰(N, e)公開給別人用來加密用
私鑰(N, d)要保存好,用來解密用
A傳訊息給B
1. 明文 (未加密)
A的 Text ==> 未加密(明文) ==> 傳送 ===> B 收到Text
優點: 簡單不需要額外成本(加密/解密)...
缺點: 訊息被取得,修改,違造...等問題
2. 對稱加密
A的 Text ==> 加密(Key(Text)) ==> 傳送 ===> B 收到Key(Text), B使用同一個Key解密
優點: 加解密 演算法 較容易 實作
缺點: 雙方取得同一個Key的問題
3. 非對稱加密
A的 Text ==> 用B的公鑰加密 ==> 傳送 ===> B 收到密文,用B(自已)私鑰解開.
優點: 加解密 公私鑰不同
缺點: 加解密 演算法複雜且費時
-----------------------------------------------------------------------------------------------
第一步 質數 問題 ...
Fermat little theorem 費馬小定理
https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
整數 1<a<p, 如果 p是質數, 則a p 除p 取餘 等於 a
例: a = 2, p = 7, 27 = 128, 128 / 7 餘 2
例: a = 3, p = 7, 37 = 2187, 2187 / 7 餘 3
a p / p 餘 a , 同除 a
a p-1 / p 餘 1
例: 1 < a < p, a p-1 = xxx, xxx / p 餘 1
例: a = 2, p = 7, 27-1 = 64, 64 / 7 餘 1
例: a = 3, p = 7, 37-1 = 729 , 729 / 7 餘 1
--------------------------------------------------------------
使用Python
例: a = 2, p = 7, 27-1 = 64, 64 / 7 餘 1
a p-1
可以使用 a**(p-1) 或 pow(a, p-1)
加入取餘之後,可以直接使用....
pow(a, p-1, p)
表示 a p-1 除 p 取餘 ==> a p-1 mod p
註: pow(a, p-1) %7 與 pow(a, p-1, p)
運算過程不太一樣, 一個要算出a**(p-1)真正的值
它可能非常的大要算很久 例: 723456234767 ** 234654778345234237
pow(a, p-1, p) 可以邊取餘 邊算次方
例: pow(5, 6, 7)
在算 5的6次方時,
1. 算5的2次方, 5*5 = 25 (超過7)先取餘 ,結果為 4.
2. 算5的3次方, 4*5 = 20 (超過7)先取餘 ,結果為 6.
3. 算5的4次方, 6*5 = 30 (超過7)先取餘 ,結果為 2.
4. 算5的5次方, 2*5 = 10 (超過7)先取餘 ,結果為 3.
5. 算5的6次方, 3*5 = 15 (超過7)先取餘 ,結果為 1.
結果(餘數)為 1
運算過程不用真的算出 5的6次方的值.
cryptography and network security principles and practice
使用Python程式語言
*大學全面教Python
$ python
Python 2.7.3 (default, Oct 26 2016, 21:04:23)
...
>>> 10 // 3 # 取商
3
>>> 10 / 3
3
>>> 10 / 3.0
3.3333333333333335
>>> 10 % 3 # 取餘
1
>>> 50**23 # 整數 沒有位數限制 ?!
1192092895507812500000000000000000000000L
RSA加密演算法
https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95RSA加密演算法是一種非對稱加密演算法。在公開金鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。...
以下均為整數
- 找兩個夠大的質數
和
,兩者不相等,計算N=
。
-
= (
- 1)(
- 1)
- 讓
<
,兩者互質。並求
, 令
- 將
和
的記錄銷毀
(N, e)公鑰public key,(N, d) 是私鑰 (private key 或是 secret key)
公鑰(N, e)公開給別人用來加密用
私鑰(N, d)要保存好,用來解密用
A傳訊息給B
1. 明文 (未加密)
A的 Text ==> 未加密(明文) ==> 傳送 ===> B 收到Text
優點: 簡單不需要額外成本(加密/解密)...
缺點: 訊息被取得,修改,違造...等問題
2. 對稱加密
A的 Text ==> 加密(Key(Text)) ==> 傳送 ===> B 收到Key(Text), B使用同一個Key解密
優點: 加解密 演算法 較容易 實作
缺點: 雙方取得同一個Key的問題
3. 非對稱加密
A的 Text ==> 用B的公鑰加密 ==> 傳送 ===> B 收到密文,用B(自已)私鑰解開.
優點: 加解密 公私鑰不同
缺點: 加解密 演算法複雜且費時
-----------------------------------------------------------------------------------------------
第一步 質數 問題 ...
Fermat little theorem 費馬小定理
https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
整數 1<a<p, 如果 p是質數, 則a p 除p 取餘 等於 a
例: a = 2, p = 7, 27 = 128, 128 / 7 餘 2
例: a = 3, p = 7, 37 = 2187, 2187 / 7 餘 3
a p / p 餘 a , 同除 a
a p-1 / p 餘 1
例: 1 < a < p, a p-1 = xxx, xxx / p 餘 1
例: a = 2, p = 7, 27-1 = 64, 64 / 7 餘 1
例: a = 3, p = 7, 37-1 = 729 , 729 / 7 餘 1
--------------------------------------------------------------
使用Python
例: a = 2, p = 7, 27-1 = 64, 64 / 7 餘 1
a p-1
可以使用 a**(p-1) 或 pow(a, p-1)
加入取餘之後,可以直接使用....
pow(a, p-1, p)
表示 a p-1 除 p 取餘 ==> a p-1 mod p
註: pow(a, p-1) %7 與 pow(a, p-1, p)
運算過程不太一樣, 一個要算出a**(p-1)真正的值
它可能非常的大要算很久 例: 723456234767 ** 234654778345234237
pow(a, p-1, p) 可以邊取餘 邊算次方
例: pow(5, 6, 7)
在算 5的6次方時,
1. 算5的2次方, 5*5 = 25 (超過7)先取餘 ,結果為 4.
2. 算5的3次方, 4*5 = 20 (超過7)先取餘 ,結果為 6.
3. 算5的4次方, 6*5 = 30 (超過7)先取餘 ,結果為 2.
4. 算5的5次方, 2*5 = 10 (超過7)先取餘 ,結果為 3.
5. 算5的6次方, 3*5 = 15 (超過7)先取餘 ,結果為 1.
結果(餘數)為 1
運算過程不用真的算出 5的6次方的值.
2017年9月20日 星期三
H920(Wed)平行處理
H920(Wed)平行處理
上課要用到程式語言
C*(start), openMP(Multi-Processing)
註:另有 open MPI (Message Passing Interface)
可用於分散系統
https://en.wikipedia.org/wiki/Open_MPI
平行處理 原始碼所需修改
CStar
平行處理專有指令 例: forall
優點: 模擬 平行與沒有平行 的效能結果
缺點: 要改比較多的程式碼...
openMP
增加 #pragma omp parallel
語法: #pragma omp <directive> [clause[[,] clause] ...]
優點: 修改少(減少出錯)...
缺點: debug增加困難度...
int main(int argc, char* argv[]) {
#pragma omp parallel
printf("Hello, world.\n");
return 1;
}
編譯選項
$ gcc -fopenmp omp.c
# (由2線程來執行)
$ export OMP_NUM_THREADS=2
$ ./a.out
Hello, world.
Hello, world.
上課要用到程式語言
C*(start), openMP(Multi-Processing)
註:另有 open MPI (Message Passing Interface)
可用於分散系統
https://en.wikipedia.org/wiki/Open_MPI
平行處理 原始碼所需修改
CStar
平行處理專有指令 例: forall
優點: 模擬 平行與沒有平行 的效能結果
缺點: 要改比較多的程式碼...
openMP
增加 #pragma omp parallel
語法: #pragma omp <directive> [clause[[,] clause] ...]
優點: 修改少(減少出錯)...
缺點: debug增加困難度...
int main(int argc, char* argv[]) {
#pragma omp parallel
printf("Hello, world.\n");
return 1;
}
編譯選項
$ gcc -fopenmp omp.c
# (由2線程來執行)
$ export OMP_NUM_THREADS=2
$ ./a.out
Hello, world.
Hello, world.
訂閱:
意見 (Atom)



