xixi2 发表于 2008-3-6 15:49

求助:matlab中解模糊的选择

请问模糊直接转矩控制中,输出单点模糊集是否需要解模糊?很多论文都说不需要,可是fuzzy界面当中有defuzzification这一项,不知不用解模糊该自己怎么弄呢??

心无挂碍 发表于 2008-4-2 20:47

根据实际情况自己选择,解模糊的方法很多,里面有4种,例如最大隶属度法,重心法平均法等,也可以自己加别的。
可以都试一试啊 ,那个效果好用哪个 。呵呵

nicolef 发表于 2008-4-3 10:36

我看的论文多数都是用centroid ,如楼上所说,都试试也无妨

linlin820 发表于 2008-4-4 16:35

模糊数据的判决

通过模糊推理得到的结果是一个模糊集合或者隶属函数,但在实际使用中,特别是在模糊逻辑控制中,必须用一个确定的值才能去控制伺服机构。在推理得到的模糊集合中取一个相对最能代表这个模糊集合的单值的过程就称作模糊判决或解模糊(Defuzzification)。模糊判决可以采用不同的方法,用不同的方法所得到的结果也是不同的。理论上用重心法比较合理,但是计算比较复杂,因而在实时性要求较高的系统不采用这种方法。最简单的方法是最大隶属度方法,这种方法取所有模糊集合或者隶属函数中隶属度最大的那个值作为输出,但是这种方法未考虑其他隶属度较小的值的影响,代表性不好,所以它往往用于比较简单的系统。介于这两者之间的还有几种平均法:如加权平均法、隶属度限幅(α-cut)元素平均法等。下面介绍各种模糊判决方法,并以“水温适中”为例,说明不同方法的计算过程及其SQL查询的实现。

这里假设“水温适中”的隶属函数为:
mN(xi)={X: 0.0/0 0.0/10 0.33/20 0.67/30 1.0/40 1.0/50 0.75/60 0.5/70 0.25/80 0.0/90 0.0/100}
1. 重心法
所谓重心法就是取模糊隶属函数曲线与横坐标轴围成面积的重心作为代表点。理论上应该计算输出范围内一系列连续点的重心,即
u =åxi×mN(xi)/åmN(xi) 但实际上是计算输出范围内整个采样点(即若干离散值)的重心。这样,在不花太多时间的情况下,用足够小的取样间隔来提供所需要的精度,这是一种最好的折衷方案。即
u =åxi×mN(xi)/åmN(xi)
=(0·0.0+10·0.0+20·0.33+30·0.67+40·1.0+50·1.0
+60·0.75+70·0.5+80·0.25+90·0.0+100·0.0)
/(0.0+0.0+0.33+0.67+1.0+1.0+0.75+0.5+0.25+0.0+0.0)
=48.2
在隶属函数不对称的情况下,其输出的代表值是48.2℃。如果模糊集合中没有48.2℃,那么就选取最靠近的一个温度值50℃输出。

2. 最大隶属度法
这种方法最简单,只要在推理结论的模糊集合中取隶属度最大的那个元素作为输出量即可。不过,要求这种情况下其隶属函数曲线一定是正规凸模糊集合(即其曲线只能是单峰曲线)。如果该曲线是梯形平顶的,那么具有最大隶属度的元素就可能不止一个,这时就要对所有取最大隶属度的元素求其平均值。例如,对于“水温适中”,按最大隶属度原则,有两个元素40和50具有最大隶属度1.0,那就要对所有取最大隶属度的元素40和50求平均值,执行量应取:
umax=(40 50)/2=45
3. 系数加权平均法
系数加权平均法的输出执行量由下式决定:
u =Ski×xi/Ski
式中,系数ki的选择要根据实际情况而定,不同的系统就决定系统有不同的响应特性。当该系数选择ki=mN(xi)时,即取其隶属函数时,这就是重心法。在模糊逻辑控制中,可以通过选择和调整该系数来改善系统的响应特性。因而这种方法具有灵活性。 php学习之家http://www.444p.com
4. 隶属度限幅元素平均法
用所确定的隶属度值α对隶属度函数曲线进行切割,再对切割后等于该隶属度的所有元素进行平均,用这个平均值作为输出执行量,这种方法就称为隶属度限幅元素平均法。
例如,当取α为最大隶属度值时,表示“完全隶属”关系,这时α=1.0。在“水温适中”的情况下,40℃和50℃的隶属度是1.0,求其平均值得到输出代表量:
u =(40 50)/2=45
这样,当“完全隶属”时,其代表量为45℃。
如果当α=0.5时,表示“大概隶属”关系,切割隶属度函数曲线后,这时从30℃到70℃的隶属度值都包含在其中,所以求其平均值得到输出代表量:
u =(30 40 50 60 70)/5=50
这样,当“大概隶属”时,其代表量为50℃
----------------------------------------------------------------------------
例:用重心法通过SQL语言查询何时该锅炉水温适中?
SQL99语句:

create function sum()
returns integer as
select (x* mn x* mn x* mn x* mn x* mn x* mn x* mn x* mn x* mn x* mn)/( mn mn mn mn mn mn mn mn mn mn)
from temperature
where fuzzytemp=’适中’)
/*使用ORDBMS中的用户定义函数用重心法建立隶属函数*/
select time
from measure
where (temp-sum())<5 or (temp-sum())>-5
/*通过使用隶属函数的返回值完成查询,并将水温适中的误差范围定为5℃以内

摘自http://www.444p.com/example/php-mysql/aid1858/

xixi2 发表于 2008-4-7 21:10

多谢各位的解答:@)
看楼上各位的解释,貌似是一定要选择解模糊的了?
那有的文章里面说不用解模糊化又是该怎么理解呢?

owen8863 发表于 2008-4-8 17:24

可是在GUI方法设计模糊控制器的时候怎么才能修改解模糊的方法呢?

2365215 发表于 2008-4-17 21:57

我也想知道,解模糊的方法中自定义那一项怎么弄
我每次选完之后都发弹出错误的提示,很奇怪。
页: [1]
查看完整版本: 求助:matlab中解模糊的选择