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

沒有留言:

張貼留言