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


沒有留言:
張貼留言