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 列被描述为 a {5x1 cell})。因此,您需要再次使用花括号。如果要访问第二列中的第二个元素,则必须编写:

C{2}{2}

PS
如果您要访问第三列中的第二个元素,您将使用圆括号()作为第二个下标,因为第二列是一个向量。在这种情况下,语法应该是:

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

我假设这些输出矩阵存储在变量中还是存储在另一个单元格数组中?

您可以做的是将两个文本数组保留为单元格数组,您可以像这样找出特定字符串的行(我可能得到了ismember反转的参数):

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

然后你可以将数值数组组合成一个矩阵。您必须在此处指定它们的存储方式,但可以说它们位于名为 col1、col2 等的单独变量中(显然它们不是,您可能需要使用 cell2mat 但我们需要查看容纳它们的单元矩阵的结构) 然后你可以像这样组合它们:

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

您可能需要将它们重新转换为双打,但我对此表示怀疑:

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

现在,如果你想要 R1 R 行的第三个数值,你可以去

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 回答