スポンサーサイト [Edit]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)
Matlabでfor文が遅い場合 [Edit]
Matlabはベクトル演算専門なので,C言語みたいなfor文を書くと,とんでもなく遅くなることがある.以下がその例.

clear;
Resolution = 16; % [bit]
Amplitude = 200; % [mV]
DC = 0; % [mV]
Vref = 320; % [mV]

Fin = 11; % 入力周波数 = (Fin/FFT_point)*Fs
FFT_Point = 128;
Des_Ratio = 128;

G1 = 1;
G2 = 1;
FB1 = 1;
FB2 = 1;

Total_Point = FFT_Point*Des_Ratio;
Coeff1 = 2*pi*Fin/Total_Point;

tic
t = [0:1:Total_Point-1];
Vsin = Amplitude*sin(t*Coeff1);
toc

V1 = G1*Vsin;

tic
% Vsin2 = zeros(Total_Point,1);
for i=1:1:Total_Point
Vsin2(i,1) = Amplitude*sin(i*Coeff1);
end
toc

VsinとVsin2は同じ値を持つ配列なんだけど,Vsinはベクトル演算でfor文を使ってない.このときのtic-tocは0.3ms程度なのに対し,Vsin2の生成には0.2秒もかかってる.およそ1000倍!

これ,どうやらVsin2の配列要素数をfor文の進行と同時に動的変更してるのがまずいらしい.

そこで,上のVsin2=zeros・・・っていうところを有効にして,for文計算するまえにあらかじめVsin2の配列要素数を確保しておくと,時間は1ms程度になった.

気をつけよう.

スポンサーサイト
[ソフトウェア]Matlab | 【2008-02-26(Tue) 10:56:38】 | Trackback:(0) | Comments:(0)
次のページ
FC2カウンター
現在の閲覧者数:
リンク
RSSフィード
ブログ内検索
フリーエリア

カテゴリー
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。