0

Matlab で datenum を保存する際に小さな問題があります。リアルタイムでデータを読み取るセンサーがあります。次に、読み取り値がコンピューターによって受信された時間を追加しています。関数から与えられた最初の列の時間を使用してマトリックスを構築しています.2番目の列はデータです。これは、Matlab でリアルタイムに行われます。データを保存する必要があるまで、すべてが完璧に機能します。

データを保存するとき、日付は自動的に四捨五入されます。ここで自分の時間 (da 変数) をプロットすると、増加する関数が得られます。ただし、mam(1,:) をプロットすると、平坦な線が得られます。私は多くのことを試しましたが、同じ結果です。

日付からすべての小数を保持するような方法で行列 (ma) を Matlab に保存するにはどうすればよいですか?

ここに私の問題をシミュレートする小さなスクリプトがあります:

s=0;
j=1;
for i=1:10
  s(j)=s(end)+i;
  da(j)=now;
  pause(1);
  j=j+1;
end

ma= [da; s];
dlmwrite('mam.dat',ma);

`

4

2 に答える 2

0

あなたが提供したコードは正常に動作します。これは、0を返さないma(1,1)との差を見ることで確認できます。ma(2,1)ma(1,1) - ma(1,2)

データが表示されるときに丸めが発生しています。デフォルトでは、matlab は小数点以下 6 桁を表示します。このコマンドformat('long')により、すべての小数点以下の桁数が表示されます。

スタイルノート:

ループのロジックは少し奇妙です。上で書いたことを実行するためのより多くの方法があります

nSample = 10;
s = nan(nSample,1); % pre allocate arrays, much faster for big arrays
da = nan(nSample,1);

for i = 1:nSample
    if i==1
       s(i) = 1;
    else
       s(i) = s(i-1) + i;
    end
    da(i) = now;
end

ma = [da; s];
dlmwrite('mam.dat', ma);
于 2012-06-21T15:23:05.387 に答える
0

変数に保存されているのと同じ精度でデータを保存する場合は、テキスト ファイルではなくバイナリ MAT ファイルにエクスポートします。

save mam.mat ma
于 2012-06-23T08:01:13.057 に答える