メインコンテンツ

トレーサビリティ情報の Simulink の MATLAB コード行との関連付け

R2026b

MATLAB エディターのトレーサビリティ管理サポートは、Simulink® ベースの要件管理インターフェイスの拡張であり、MATLAB® コード行と外部アーティファクトの関連付けを可能にします。この機能では、MATLAB ファイルの編集は必要ありません。すべてのトレーサビリティ データは別々に保存されます。これは、Simulink モデルを扱うときの RMI リンクの "外部" ストレージと似ています。

さらに、トレーサビリティ情報管理の "外部ストレージ" モードを使用することで、Simulink および Stateflow® のユーザーは、外部ドキュメントを MATLAB Function ブロックのコンテンツと関連付けるときに、より細かく調整できる利点があります。

含まれるモデル例には、Simulink ブロックと、MATLAB Function ブロックの各コード行の両方に関連付けられるトレーサビリティ データがあります。

モデル例を開く

この例では、接続された複数の神経細胞における刺激によるスパイクをモデル化するときの、外部ドキュメントと MATLAB コード行の間のリンクについて説明します。

以下のコードを評価して、作業ディレクトリに slvnvdemo_synaptic_transmission Simulink モデルを開き、この例に含まれるファイルが適切に通信できるよう、基本設定を設定します。

open_system("slvnvdemo_synaptic_transmission.slx");
rmipref(UnsecureHttpRequests=true);

同一の神経細胞スパイク モデルを参照するモデル ブロックが 3 つあります。このモデルは、slvnvdemo_neuron.slx で確認できます。以下のコードを評価して、モデルを開きます。

open("slvnvdemo_neuron.slx");

神経細胞モデルは、"漏洩積分器" 式に従います。

CmdVdt=Itotal-V-V0Rm

Cm,Rm-capacitance and resistance of cell membrane

Itotal-includes injected stimulation current and all ion channel currents

V0-resting cross-membrane potential, typically -70mV

このシミュレーションの目的上、これを以下に変換します。

V→V0+∫0t1Cm(Itotal-V-V0Rm)dt

ニューロン間の 2 つの MATLAB 関数がシナプス後電流を計算します。シナプス前の脱分極が神経伝達物質の放出しきい値を超えると、指定された振幅の 1 パルス分、シナプス後電流をインクリメントします。

I→I+Iamplitude

結果の全電流は、以下に従って、指数的に減衰します。

dIdt=-I*tτ

シナプスの短期抑圧効果をモデル化するため、前にパルスが印加された後、一定の時間枠の間、次のインクリメントは許可されません。モデルは、軸索輸送の時間遅延を無視します。

モデルのシミュレーションと結果の表示

以下のコードを評価して、slvnvdemo_synaptic_transmission モデルをシミュレートします。

sim("slvnvdemo_synaptic_transmission");
### Searching for referenced models in model 'slvnvdemo_synaptic_transmission'.
### Total of 1 models to build.
### Starting serial model build.
### Successfully updated the model reference simulation target for: slvnvdemo_neuron

Build Summary

Model reference simulation targets:

Model             Build Reason                                         Status                        Build Duration
===================================================================================================================
slvnvdemo_neuron  Target (slvnvdemo_neuron_msf.mexw64) did not exist.  Code generated and compiled.  0h 1m 28.205s

1 of 1 models built (0 models already up to date)
Build duration: 0h 1m 38.92s

結果を確認するには、Scope ブロックを手動でチェックするか、以下のコードを評価します。

open_system("slvnvdemo_synaptic_transmission/Scope");

6 つのプロットは以下のとおりです。

  1. 外部から印加された電流パルス

  2. 1 つ目のニューロンの、印加によって刺激された細胞内電圧スパイク

  3. 2 つ目のニューロンで生成されたシナプス後電流

  4. 2 つ目のニューロンのシナプスによって刺激された活動

  5. 3 つ目のニューロンで生成されたシナプス後電流

  6. 3 つ目のニューロンのシナプスによって刺激された活動

刺激パルス印加中 (プロット 1) の上流ニューロンの規則的なスパイク (プロット 2) を観察します。Synaptic current Function ブロックで神経伝達物質の短期抑圧が一時的ターンオフ期間としてモデル化されているため、下流ニューロンのシナプスによって誘起された電流 (プロット 3) は、上流ニューロンの活動電位の一部をスキップします。以下のコードを評価して、Synaptic current ブロックに移動します。

hilite_system("slvnvdemo_synaptic_transmission/Synaptic current","find");

下流ニューロンは、ときには、複数のシナプスによる入力を統合してスパイクを生成しているように見えます (プロット 4)。3 つ目のニューロンは、2 つ目のニューロンからのシナプス入力 (プロット 5) とその後のスパイク (プロット 6) を統合します。既定のパラメーターの値では、slvnvdemo_neuron モデルの Noise current ブロックによってモデルに意図的に導入されたランダム ノイズに応じて、3 つ目のニューロンは 1 回以上スパイクする可能性があります。Noise current ブロックに移動します。

open_system("slvnvdemo_neuron");
hilite_system("slvnvdemo_neuron/Noise current","find");

3 つのニューロンすべてと両方のシナプスに、同じパラメーター値を割り当てます。トレーサビリティ リンクは、パラメーター値と実装を正当化するために使用されます。

Simulink とスタンドアロン MATLAB ファイル間の移動

slvnvdemo_synaptic_transmission model は、外部スクリプト synaptic_params.m を実行し、必要なパラメーター値をワークスペースに読み込みます。必要な場合は、コード edit("synaptic_params.m") を評価してスクリプトを開きます。

MATLAB コード リンクを使用すると、Simulink 内の依存ブロックから、スクリプト ファイルだけでなく、シミュレーションで使用される値を定義する特定の行へと追跡できるようになります。

モデルの Stimulation pulse ブロックを手動で、または以下のコードを評価して見つけます。

hilite_system("slvnvdemo_synaptic_transmission/Stimulation pulse","find");

ブロックを右クリックし、[要件]、[1."I_inj = 2e-11; % 20 pA"] を選択してリンクをたどり、MATLAB コード ファイル内の関連する強調表示領域を表示します。あるいは、以下を評価します。

edit("synaptic_params.m");
rmidemo_callback("view","slvnvdemo_synaptic_transmission/Stimulation pulse",1); 
% Follow the Requirements link

synaptic_params.m スクリプトに、不一致のパラメーター値があることがわかります。これは、トレーサビリティ リンクによって簡単に検出できます。synaptic_params.m スクリプトの 12 行目、V_syn_release = -2e-2; % -20 mV を強調表示します。選択部分を右クリックし、コンテキスト メニューで [要件]、[1. slvnvdemo_synaptic_transmission/Synaptic release threshold (Constant)] をクリックします。すると、Simulink モデルに戻り、synaptic_params.m の 12 行目にリンクされたブロックが強調表示されます。

Simulink で、[アプリ] タブをクリックし、[要件マネージャー] を開きます。[要件] タブで [リンクの強調表示] をクリックし、ここで作成したリンクを強調表示します。あるいは、以下のコードを評価します。

rmi("highlightModel","slvnvdemo_synaptic_transmission");

MATLAB コード行に対するトレーサビリティ リンクの作成

以下のコードを評価し、双方向リンクが有効であることを確実にして、1 ステップで双方向のトレーサビリティ リンクを作成できるようにします。

rmipref(BiDirectionalLinking=true);

モデルの左下にある Synaptic time constant ブロックは、synaptic_params.m の関連する行にまだリンクされていません。Simulink モデルで、Synaptic time constant ブロックを選択します。このブロックが見つからない場合、次のコードを評価してからブロックを選択します。

hilite_system("slvnvdemo_synaptic_transmission/Synaptic time constant","find");

次に、MATLAB エディターで、synaptic_params.m スクリプトの下部にある変数名 Syn_decay_time を選択します。コード edit("synaptic_params") を評価してスクリプトを開きます (まだ開いていない場合)。

選択した行を右クリックして、コンテキスト メニューから [要件]、[Simulink の選択内容へのリンク] を選択します。MATLAB から Simulink へ、さらに MATLAB へと、新しいリンクによる移動をテストします。

The MATLAB Editor. The syn_decay_time variable is selected and the Requirements options in the menu are displayed.

MATLAB Function ブロック内でのコード行に対するトレーサビリティ リンクの作成

slvnvdemo_synaptic_transmission モデルには、Synaptic strength Constant ブロックに対するパラメーター値のソースを追跡するために使用する MATLAB Function ブロックがあります。Simulink モデルで、Synaptic strength Constant ブロックをクリックするか、または以下のコードを評価してブロックを見つけます。リンク用にブロックを選択するには、ブロックを右クリックして、[MW アーティファクトへのリンク]、[リンク先として選択] を選択します。

hilite_system("slvnvdemo_synaptic_transmission/Synaptic strength","find");

MATLAB Function ブロックそのものをリンクする代わりに、このブロックの MATLAB コードを開き、特定の行をリンクします。slvnvdemo_synaptic_transmission モデルで Synaptic current ブロックに移動してブロックをダブルクリックするか、以下のコードを評価します。

open_system("slvnvdemo_synaptic_transmission/Synaptic current");

MATLAB Function ブロック エディターで、MATLAB Function ブロック コードの 33 行目の、"I_amplitude" が出現する箇所を見つけます。その行を選択して右クリックします。コンテキスト メニューから [要件]、[[外向きリンク] ダイアログを開く] を選択します。[外向きリンク] ダイアログで、[新規] をクリックし、[ドキュメント タイプ] を Simulink Diagram に設定して [現在の選択を使用] をクリックします。[適用] をクリックしてリンクを作成し、[OK] をクリックします。

The Outgoing Links Editor

MATLAB コード行と Microsoft Word 間のトレーサビリティ リンクの作成

ここまでは、MATLAB と Simulink 間のリンクのみについて見てきました。参照される slvnvdemo_neuron モデルの Sodium current calculation subsystem に属する Ion current calculation MATLAB Function ブロックを開きます。あるいは、次のコードを評価します。

open_system("slvnvdemo_neuron/Sodium channel current/Ion current calculation")

MATLAB Function ブロック エディター内で右クリックし、コンテキスト メニューから [要件]、[要件の強調表示を有効にする] を選択し、要件リンクをもつコード行を確認します。

The Requirements options in the context menu are expanded. The Enable Requirements Highlighting option is highlighted.

強調表示されたコード行の 1 つを右クリックし、それが要件リンクをもつことを示します。[要件] コンテキスト メニューから、メニューの上部にある番号付きリンクに移動します。関連付けられた Word ドキュメントの関連付けられたテキストが開きます。Word ドキュメントを開き、MATLAB アイコンと似たオブジェクトを探すことで、リンクを視覚的に見つけることもできます。このようなリンクされたオブジェクトを Ctrl キーを押しながらクリックすると、リンクされたコードに移動できます。

A screenshot of the requirements document with a requirement link.

コード open("NeuralSpikeModeling.docx") を評価して、Word ドキュメントを開きます。

Potassium channel current subsystem の関数 Ion current calculation に同様なリンクを作成するには、Word ドキュメントを開き、検索機能 (Ctrl+F) を使用して "outward current of potassium ions" という語句を見つけます。Word ドキュメント上で、この語句をカーソルで選択します。次に、上から Ion current calculation MATLAB Function ブロックを開くか、次のコードを評価します。

open_system("slvnvdemo_neuron/Potassium channel current/Ion current calculation");

MATLAB Function ブロック エディターで、サブ関数 "outwardCurrent" の実装 (34 ~ 37 行目) を選択します。選択した行を右クリックし、コンテキスト メニューで [要件]、[Word の選択内容へのリンク] を選択します。Word ドキュメントを最小化してから、MATLAB コードの下部の新しく強調表示された行から、Word 内の関連する記述に移動します。正しい位置が強調表示されたら、MATLAB アイコンを使用してコードに戻ります。

The MATLAB Editor with the Requirement context menu options. The linking options are expanded.

トレーサビリティ リンクのレポート

MATLAB Function ブロックの MATLAB コード行に関連付けられるトレーサビリティ リンクは、親の Simulink モデルに対して生成される 要件トレーサビリティ レポートに含まれます。slvnvdemo_neuron Simulink モデルの [要件] タブで、[共有]、[モデルのトレーサビリティ レポートの生成] を選択します。以下のコードを評価し、モデルを開きます。

open_system("slvnvdemo_neuron.slx");

The Requirements tab in the Simulink toolstrip. The Share options are expanded and the mouse is on the Generate Model Traceability Report option.

リンクされた MATLAB コード行の引用を含む、MATLAB Function ブロックのリンク情報がレポートに含まれていることを確認します。