您可以使用MATLAB®编码器生成用于评估模糊推理系统的代码™. 有关生成代码的详细信息,请参阅代码生成(MATLAB编码器)。
要生成用于评估模糊系统的代码,必须首先创建模糊推理系统(FIS)。有关更多信息,请参阅在命令行中构建模糊系统和使用模糊逻辑设计器构建模糊系统.
虽然此示例为1型Mamdani模糊推理系统生成代码,但工作流也适用于Sugeno和2型模糊系统。
使用MATLAB编码器生成代码不支持模糊FIS对象(万博1manbetx曼菲斯
,苏格菲斯
,mamfistype2
,sugfistype2
)。若要生成用于评估模糊系统的代码,必须使用getFISCodeGenerationData
作用
您可以在生成的代码中嵌入模糊推理系统的数据。如果不希望在编译后更改FIS数据,请使用此选项。
首先,创建一个模糊系统,或者从.fis
文件对于本例,请从加载模糊系统蒂珀·菲斯
.
fisObject=readfis(“tipper.fis”);
要使用此FIS生成代码,请将其转换为同构结构。
fis=getFISCodeGenerationData(fisObject);
默认情况下,getFISCodeGenerationData
假定FIS对象是类型1系统。若要为类型2系统生成代码,必须使用getFISCodeGenerationData(fisObject,“类型2”)
.
创建用于评估模糊系统的函数金融机构
对于给定的输入向量x
。在此函数中,您可以为评估
函数使用评估等值线
.
作用y=evaluatefis1(fis,x)%#编码基因opt=评估等值线(“NumSamplePoints”y=evalfis(fis,x,opt);终止
为生成代码评估信息1
,指定金融机构
输入参数是常量。您可以为生成指定不同的目标,例如静态库、可执行文件或MEX文件。在本例中,生成MEX文件。
编码基因(“evaluatefis1”,“-args”,{coder.Constant(fis),[0]},“-config:mex”)
要验证MEX文件的执行,请执行以下操作:
为MEX文件计算一个或多个输入值。调用MEX文件时,请指定编译时使用的相同FIS结构。
使用以下公式计算相同输入值的原始FIS评估
.评估使用时评估
,使用相同的同质FIS结构。
比较评估结果。
mexOutput1=评估值为1_mex(fis,[7 9])
mexOutput1=21.0327
opt=评估等值线(“NumSamplePoints”,51); evalfisOutput=evalfis(fis[7 9],opt)
evalfisOutput=21.0327
MEX文件输出与评估
输出
或者,您可以通过在代码生成时从文件中读取FIS数据,将FIS数据嵌入生成的代码中。指定用于评估给定输入向量x的模糊系统的函数。在此函数中,从文件中读取FIS数据蒂珀·菲斯
.
作用y=2(x)%#编码基因fis=getFISCodeGenerationData(“tipper.fis”);opt=evalfisOptions(“NumSamplePoints”y=evalfis(fis,x,opt);终止
为生成代码评估信息系统2
.
编码基因(“evaluatefis2”,“-args”,{[0 0]},“-config:mex”)
使用相同的输入值验证MEX文件的执行x
。在这种情况下,您不必指定编译时使用的原始FIS结构。
mexOutput2=evaluatefis2\u mex([7 9])
mexOutput2=21.0327
蒸发输出
evalfisOutput=21.0327
您可以生成用于评估从数据库读取的FIS的代码.fis
在运行时指定的文件。在这种情况下,FIS数据不会嵌入到生成的代码中。请指定用于评估指定文件中定义的模糊系统的函数文件名
对于给定的输入向量x
.
作用y=evaluatefis3(文件名,x)%#编码基因fis=getFISCodeGenerationData(文件名);opt=evalfisOptions(“NumSamplePoints”y=evalfis(fis,x,opt);终止
定义此函数的输入数据类型。
fileName=coder.newtype(“char”,[1 Inf],[false-true]);x=coder.newtype(“双人”,[1 Inf],[false-true]);
为生成代码评估信息3
.
编码基因(“evaluatefis3”,“-args”,{fileName,x},“-config:mex”)
使用相同的输入值验证MEX文件的执行x
。在本例中,您可以指定.fis
文件
mexOutput3=评估值为3\u mex(“tipper.fis”,[7 9])
mexOutput3=21.0327
蒸发输出
evalfisOutput=21.0327
每次你跑步评估信息3
,它将从文件中重新加载模糊系统。为了提高计算效率,您可以创建一个函数,该函数仅在指定新文件名时加载FIS。
作用y=evaluatefis4(文件名,x)%#编码基因%#内部的持久的fis名称fis如果isempty(fisName)[fisName,fis]=loadFIS(文件名);埃尔塞夫~strcmp(fisName,fileName)[fisName,fis]=loadFIS(fileName);终止opt=评估等值线(“NumSamplePoints”y=evalfis(fis,x,opt);终止作用[fisName,fis]=loadFIS(文件名)fisName=fileName;fis=getFISCodeGenerationData(fisName);终止
生成代码评估4
。此函数的输入数据类型与的相同评估信息3
.
编码基因(“evaluatefis4”,“-args”,{fileName,x},“-config:mex”)
使用相同的输入值文件名验证MEX文件的执行。
mexOutput4=评估值为4\u mex(“tipper.fis”,[7 9])
mexOutput4=21.0327
蒸发输出
evalfisOutput=21.0327
前面的示例为双精度数据生成代码。若要为单精度数据生成代码,请将输入值的数据类型指定为仅有一个的
。例如,生成评估信息系统2
使用单精度数据。
编码基因(“evaluatefis2”,“-args”,{single([0])},“-config:mex”)
验证MEX文件的执行,传入单精度输入值。
mexOutputSingle=evaluatefis2_-mex(单个([7 9]))
mexOutputSingle=仅有一个的21.0327
蒸发输出
evalfisOutput=21.0327