Matlab模糊逻辑addRule多输出语法及代码适配问题
Matlab模糊逻辑工具箱双输出规则的正确用法
Matlab模糊逻辑工具箱完全支持多输出模糊规则,你的代码无法运行是因为存在语法错误和变量命名冲突,下面是具体的修正方案和语法说明:
核心问题分析
- 命名冲突:你同时定义了输入
Deficiency和输出Deficiency,工具箱无法区分两者,必须修改其中一个的名称(比如把输出改为UpdatedDeficiency)。 - 规则中的错误:
- 规则里引用了未定义的输入
Factor1,实际应该是你定义的输入Deficiency。 - 输出
Condition2的隶属度函数只有Routine、Priority、Urgent,但规则里写了Condition2=High,属于引用不存在的隶属度函数。 - 多输出结论的分隔符错误,应该用逗号而非
&。
- 规则里引用了未定义的输入
修正后的完整代码
% 初始化Mamdani型模糊推理系统 FIS = mamfis(); % 定义输入变量及隶属度函数 FIS = addInput(FIS, [0 100], 'Name', 'Risk'); FIS = addMF(FIS, 'Risk', 'trimf', [30 50 70], 'Name', 'Moderate'); FIS = addMF(FIS, 'Risk', 'trimf', [60 80 100], 'Name', 'Severe'); FIS = addInput(FIS, [0 100], 'Name', 'Deficiency'); FIS = addMF(FIS, 'Deficiency', 'trimf', [30 50 70], 'Name', 'Moderate'); FIS = addMF(FIS, 'Deficiency', 'trimf', [60 80 100], 'Name', 'High'); % 定义输出变量及隶属度函数(修改名称避免冲突) FIS = addOutput(FIS, [0 100], 'Name', 'Condition2'); FIS = addMF(FIS, 'Condition2', 'trimf', [0 0 40], 'Name', 'Routine'); FIS = addMF(FIS, 'Condition2', 'trimf', [30 50 70], 'Name', 'Priority'); FIS = addMF(FIS, 'Condition2', 'trimf', [60 80 100], 'Name', 'Urgent'); FIS = addOutput(FIS, [0 100], 'Name', 'UpdatedDeficiency'); FIS = addMF(FIS, 'UpdatedDeficiency', 'trimf', [30 50 70], 'Name', 'Moderate'); FIS = addMF(FIS, 'UpdatedDeficiency', 'trimf', [60 80 100], 'Name', 'Severe'); % 正确的多输出规则写法 rules = [ "Risk==Severe & Deficiency==High => UpdatedDeficiency=Severe, Condition2=Urgent(1)" "Risk==Moderate & Deficiency==High => UpdatedDeficiency=Moderate, Condition2=Urgent(1)" ]; % 添加规则到FIS FIS = addRule(FIS, rules); % 测试推理(可选) testInputs = [85, 75]; outputs = evalfis(FIS, testInputs); disp(['Condition2输出值:', num2str(outputs(1))]); disp(['UpdatedDeficiency输出值:', num2str(outputs(2))]);
多输出规则的语法要点
- 输入条件:用
&连接多个输入判断,每个判断必须用==(双等号)匹配隶属度函数名称。 - 输出结论:多个输出之间用逗号分隔,格式为
输出变量名=隶属度函数名。 - 规则权重:放在规则末尾,用
(权重值)表示,权重默认是1,可省略。 - 命名唯一性:所有输入、输出变量的名称必须唯一,不能重复,否则会导致解析失败。
内容的提问来源于stack exchange,提问作者Issac Abraham
相关产品推荐
相关产品推荐

