您可以生成使用MATLAB®Coder™评估模糊推理系统的代码。有关生成代码的更多信息,请参阅代码生成(MATLAB编码器)。
要生成评估模糊系统的代码,必须首先创建模糊推理系统(FIS)。有关更多信息,请参阅在命令行构建模糊系统和使用模糊逻辑设计师构建模糊系统。
虽然此示例为Type-1 Mamdani模糊推理系统生成代码,但工作流也适用于Sugeno和Type-2模糊系统。
使用MATLAB编码器生成代码不支持模糊的FIS对象(金宝appMamfis.
那Sugfis.
那Mamfistype2.
那sugfistype2.
)。要生成评估模糊系统的代码,必须使用模糊推理系统对象将模糊推理系统对象转换为均匀的结构getfiscodegenerationdata.
功能。
您可以在生成的代码中嵌入模糊推理系统的数据。如果您不想在编译后更改FIS数据,请使用此选项。
首先,创建模糊系统,或从a中加载模糊系统.fis.
文件。对于此示例,请加载模糊系统Tipper.fis.
。
fisobject = readfis(“tipper.fis”);
要使用此FIS进行代码生成,将其转换为均匀的结构。
fis = getfiscodegenerationdata(fisobject);
默认,getfiscodegenerationdata.
假设FIS对象是类型1系统。要为类型-2系统生成代码,您必须指示系统类型使用getFiscodegenerationData(Fisobject,“Type2”)
。
创建用于评估模糊系统的功能FIS.
对于给定的输入矢量X
。在此函数中,您可以指定选项evalfis.
使用evalfisOptions.
。
功能Y = evaluateFIS1(FIS,X)%#codegen.opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾
生成代码评估FIS1.
,指明那个FIS.
输入参数是常量。您可以为构建指定不同的目标,例如静态库,可执行文件或MEX文件。对于此示例,生成MEX文件。
Codegen('评估FIS1'那'-args',{coder.constant(fis),[0 0]},'-config:mex')
代码成功。
要验证MEX文件的执行:
评估一个或多个输入值的MEX文件。调用MEX文件时,请指定在编译时使用的相同的FIS结构。
评估使用相同输入值的原始FISevalfis.
。在使用时进行评估时evalfis.
,使用相同的均匀的FIS结构。
比较评估结果。
MexOutput1 = EvaluateFIS1_MEX(FIS,[7 9])
MexOutput1 = 21.0327.
opt = evalfisOptions('numsamplepoints',51);evalfisOutput = evalfis(FIS,[7 9],选择)
evalfisoutput = 21.0327.
MEX文件输出匹配evalfis.
输出。
或者,您可以通过在代码生成时间从文件读取FIS数据来嵌入生成的代码中的FIS数据。指定用于评估给定输入向量X的模糊系统的功能。在此函数中,从文件中读取FIS数据Tipper.fis.
。
功能y = equatefis2(x)%#codegen.fis = getfiscodegenerationData('tipper.fis');opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾
生成代码评估FIS2.
。
Codegen('评估FIS2'那'-args',{[0 0]},'-config:mex')
代码成功。
使用相同的输入值验证MEX文件的执行X
。在这种情况下,您不必指定在编译时使用的原始FIS结构。
MexOutput2 = evaluateFIS2_MEX([7 9])
MexOutput2 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.
您可以生成用于评估从A读取的FIS的代码.fis.
在运行时指定的文件。在这种情况下,FIS数据不会嵌入生成的代码中。指定用于评估指定文件中定义的模糊系统的函数文件名
对于给定的输入矢量X
。
功能y = evaluatefis3(文件名,x)%#codegen.fis = getfiscodegenerationData(文件名);opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾
定义此功能的输入数据类型。
filename = coder.newtype('char',[1 inf],[false true]);x = coder.newtype('双倍的',[1 inf],[false true]);
生成代码评估FIS3.
。
Codegen('equatefis3'那'-args',{filename,x},'-config:mex')
代码成功。
使用相同的输入值验证MEX文件的执行X
。在这种情况下,您可以指定的名称.fis.
文件。
mexoutput3 = evaluateFIS3_MEX('tipper.fis',[7 9])
MexOutput3 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.
每次跑步评估FIS3.
,它从文件中重新加载模糊系统。为了计算效率,您可以创建一个只在指定新文件名时加载FIS的函数。
功能y = evaluatefis4(文件名,x)%#codegen.%#内部的执着的Fisname FIS.如果isempty(fisname)[fisname,fis] = loadfis(文件名);eleesif.〜strcmp(fisname,filename)[fisname,fis] = loadfis(文件名);结尾opt = evalfisOptions('numsamplepoints',51);Y = EVALFIS(FIS,X,OPT);结尾功能[fisname,fis] = loadfis(filename)fisname = filename;fis = getfiscodegenerationdata(fisname);结尾
生成代码评估FIS4.
。此函数的输入数据类型与其相同评估FIS3.
。
Codegen('评估FIS4'那'-args',{filename,x},'-config:mex')
代码成功。
使用相同的输入值文件名验证MEX文件的执行。
mexoutput4 = evaluateFIS4_MEX('tipper.fis',[7 9])
MexOutput4 = 21.0327.
evalfisoutput.
evalfisoutput = 21.0327.
前面的示例生成了双重精度数据的代码。要生成单精度数据的代码,请指定输入值的数据类型单身的
。例如,生成代码评估FIS2.
使用单精度数据。
Codegen('评估FIS2'那'-args',{单([0 0])},'-config:mex')
代码成功。
验证MEX文件执行,通过单精度输入值。
MexOutputSingle = evaluateFIS2_MEX(单([7 9]))
mexoutputsingle =单身的21.0327
evalfisoutput.
evalfisoutput = 21.0327.
evalfis.
|getfiscodegenerationdata.