0

任意の回路(スパイスのように)の節点解析用のスクリプトを作成しようとしています。テキストファイルからデータをインポートして、以降の操作の基礎となる行列を作成したいと思います。だから私はtextscanを使用しました

fid = fopen('text2.txt');
netlist = textscan(fid,'%s%s%d%d%d%d%f');

したがって、次のような入力ファイルの場合:

R1 R 1 0 3 0 0 
C1 C 1 0 5 0 0 
L1 L 2 1 10 0 0 
R2 R 1 2 1 0 0 
i1 Iac 2 0 1 1 0.523

結果はこれになります

 {5x1 cell}    {5x1 cell}    [5x1 int32]    [5x1 int32]    [5x1 int32]    [5x1 int32]
 [5x1 double]

問題は、行列から個々の値を呼び出すことができないことです。だから私は元の行列を再現する方法を見つけようとしています(可能であれば)そしてそれがうまくいかなかった場合、個々の要素を呼び出す方法を教えてもらえますか(たとえば(2,2)のCのように?ありがとうございます前進

4

2 に答える 2

2

セル配列は、データを格納するための単なる別の方法です。具体的には、各セルに異なるタイプまたは異なる次元のデータが含まれている場合(この場合、行列の使用は機能しません)、セル配列が必要になります。

セル配列内の個々の要素にアクセスするには、中括弧({})を使用します。データが列として保存された後 textscan、最初に。でi番目の列にアクセスしますC{i}

次に、セルに何が含まれているかを考える必要があります。列2には文字列が含まれているため、これは別のセル配列です(結果で確認することもできます。列2はとして記述されます{5x1 cell})。したがって、中かっこを再度使用する必要があります。2番目の列の2番目の要素にアクセスする場合は、次のように記述する必要があります。

C{2}{2}

PS 3番目の列の2番目の要素にアクセスする場合、2番目の列はベクトルであるため、2番目の添え字には
中括弧を使用します。()このような場合、構文は次のようになります。

C{3}(2)
于 2013-01-14T10:48:59.170 に答える
0

これらの出力行列は、変数または別のセル配列に格納されていると思いますか?

できることは、2 つのテキスト配列をセル配列として保持することです。特定の文字列の行を次のように見つけることができます (引数がismember逆になっている可能性があります)。

find(ismember(FirstCellArray, "R1") == 1)

次に、数値配列を単一の行列に結合できます。ここでの格納方法を指定する必要がありますが、col1、col2 などと呼ばれる個別の変数にあるとしましょう (明らかにそうではありません。おそらく cell2mat を使用する必要がありますが、それらを格納するセル マトリックスの構造を確認する必要があります)。 ) 次に、次のようにそれらを組み合わせることができます。

NumberMatrix = [col1, col2, col3 ...];

それらをダブルにキャストする必要があるかもしれませんが、私はそれを疑っています:

NumberMatrix = [double(col1), double(col2), double(col3) ...];

行 R1 R の 3 番目の数値が必要な場合は、

index1 = find(ismember(FirstCellArray, "R1") == 1);
index2 = find(ismember(SecondCellArray, "R") == 1);
rowIndex = intersect(index1, index2);
value = NumberMatrix(rowIndex, 3)
于 2013-01-14T10:33:10.990 に答える