Octave模糊逻辑工具箱readfis索引越界报错,求代码定位路径
Octave模糊逻辑工具箱readfis索引越界问题排查
报错详情
执行读取FIS文件命令时出现索引越界错误:
fis = readfis ( 'dc_motor.fis') error: line_vec(5): out of bound 4 (dimensions are 1x4) error: called from readfis>get_next_rule at line 519 column 23 readfis>read_rules at line 346 column 27 readfis at line 92 column 7
本地代码位置查找
要定位报错相关代码的本地路径,可按以下步骤操作:
- 打开Octave命令行,输入命令:
该命令会返回which readfisreadfis.m文件的绝对路径(路径根据Octave安装位置不同会有差异,例如/usr/share/octave/packages/fuzzy-logic-toolkit/readfis.m) - 使用文本编辑器打开该
readfis.m文件,即可找到报错中提到的:get_next_rule子函数位于第519行read_rules子函数位于第346行
附自制FIS文件内容
[System] Name='Dc-Motor' Type='mamdani' Version=1.0 NumInputs=2 NumOutputs=1 NumRules=25 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='centroid' [Input1] Name= 'Error' Range= [-97.5 +97.5 ] NumMFs = 5 MF1='Nl':'trapmf',[=-67-66 -65 -32.5 ] MF2='Ns':'trimf',[-65 -32.5 0 ] MF3 ='Z':'trimf',[-32.5 0 32.5] MF4 ='Ps':'trimf',[0 32.5 65] MF5 ='Pl':'trapmf',[32.5 65 66 67] [Input2] Name ='Edot' Range=[-54 54] NumMFs=5 MF1='Nl':'trapmf',[-38-37 -36 -18] MF2='Ns':'trimf',[-36 18 0] MF3 ='Z':'trimf',[-18 0 18] MF4 ='Ps':'trimf',[0 18 36] MF5 ='Pl':'trapmf',[18 36 37 38] [Output1] Name ='U' Range=[-155 155] NumMFs=5 MF1='Nl':'trimf',[-155 -103.3 -51.66] MF2='Ns':'trimf',[-103.3 -51.66 0] MF3 ='Z':'trimf',[ -51.66 0 51.6 ] MF4 ='Ps':'trimf',[ 0 51.66 103.3] MF5 ='Pl':'trimf',[ 51.6 103.3 155] [Rules] 1 1, 1 (1): 1 1 2, 1 (1): 1 1 3, 1 (1): 1 1 4, 1 (1): 1 1 5, 5 (1): 1 2 1, 1 (1): 1 2 2, 2 (1): 1 2 3, 2 (1): 1 2 4, 3 (1): 1 2 5, 2 (1): 1 3 1, 5 (1): 1 3 2, 4 (1): 1 3 3, 3 (1): 1 3 4, 2 (1): 1 3 5, 1 (1): 1 4 1, 1 (1): 1 4 2, 3 (1): 1 4 3, 4 (1): 1 4 4, 4 (1): 1 4 5, 5 (1): 1 5 1, 3 (1): 1 5 2, 4 (1): 1 5 3, 5 (1): 1 5 4, 4 (1): 1 5 5, 5 (1): 1
额外排查提示
从FIS文件内容看,存在几处格式错误可能导致解析失败:
- Input1的MF1参数中多了多余的
=符号,且-67与-66之间缺少空格,应修正为[-67 -66 -65 -32.5] - Input2的MF1参数中
-38与-37之间缺少空格,应修正为[-38 -37 -36 -18] - Input2的MF2参数顺序错误(trimf要求参数从小到大),应修正为
[-36 0 18]
内容的提问来源于stack exchange,提问作者Saturn777
相关产品推荐
相关产品推荐

