主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

精度の引き下げによる速度の向上

計算精度を下げてMATLAB®の速度を引き上げます。精度を下げるには,符号数学工具箱™の関数vpa数字で提供される可変精度演算を使用します。精度を下げることで正確度は低下しますが,動作性能が向上します。詳細は,数値演算またはシンボリック演算の選択を参照してください。

たとえば,大規模行列Cのリーマンゼータ関数を求めるのは時間がかかります。最初に,Cを初期化します。

(X, Y) = meshgrid((0:0.0025:综合)(5:-0.05:0));C = X + Y*i;

その際,泽塔(C)の計算に要する時間がわかります。

抽搐泽塔(C);toc
运行时间是340.204407秒。

ここで,vpaを使用して精度を下げ,この演算を繰り返します。まず,数字を使用してvpaで使用する精度を10桁に引き下げる変更を行います。次に,vpaを使用して,Cの精度を引き下げて再度泽塔(C)を求めます。演算が大幅に高速化します。

数字(10)vpaC = vpa(C);抽搐泽塔(vpaC);toc
经过时间是113.792543秒。

メモ

vpaの出力はシンボリックです。シンボリック値を受け取らないMATLAB関数でシンボリック出力を使用するには,を使用してシンボリック値を倍精度に変換します。

行列が大きいほど計算時間の差も非常に大きくなります。たとえば,次のような1001301列の行列Cを考えます。

(X, Y) = meshgrid((0:0.0025:综合)(5:-0.005:0));C = X + Y*i;

10桁の精度で泽塔(vpa (C))を実行すると15分かかりますが,泽塔(C)の実行はその3倍の時間がかかります。

数字(10)vpaC = vpa(C);抽搐泽塔(vpaC);toc
经过时间是886.035806秒。
抽搐泽塔(C);toc
经过时间是2441.991572秒。

メモ

精度を”引き上げる”場合は,数値計算精度の引き上げを参照してください。