隶属函数图像绘制之不老不年轻

问题描述

隶属函数图像绘制之不老不年轻_第1张图片

背景说明

这是我们计算智能课程的模糊数学篇章的一道题目。所谓模糊数学,就是处理生活中那些无法精确定义处理的问题。像年龄,高低,胖瘦都没有一个固定的区分界限的。它的含义是模糊的,过程是渐变的。基于此,扎德提出了模糊数学,有别于之前的精确数学。模糊数学的基础就是模糊集合。模糊集合的讨论范围是在所研究问题的论域之上。论域中的元素对于模糊集合的隶属程度用隶属函数表示之。隶属函数的值在[0,1]区间连续变化。
我们这门课程的最后的结课论文也就是选择一个问题,用模糊数学/神经网络/遗传算法的办法解决之。
这道题目,没有什么难点,唯一要注意的是绘制"既不老又不年轻"的隶属函数时候,要注意到这是一个分段函数,断点一定要精确计算。

隶属函数图像

隶属函数图像绘制之不老不年轻_第2张图片

代码

import numpy as np
import math
from matplotlib import pyplot as plt

x1=[]
y1=[]
x2=[]
y2=[]
a=np.linspace(0,60,10000)

#函数定义
def line1(x1):
    if (x1>=0 and x1<50):
        y1=1
    else:
        x1=1/((x1/5-10)*(x1/5-10))
        y1=1-1/(1+x1)
    return y1
def line2(x2):
    if (x2>=0 and x2<=25):
        y2=0
    else:
        x2=(x2/5-5)*(x2/5-5)
        y2=1-1/(1+x2)
    return y2
def f3(k):
    if(k>=0 and k<50):
        y3=1
    else:
        k=1/((k/5-10)*(k/5-10))
        y3=1-1/(1+k)
    return y3
def f4(k):
    if(k>=0 and k<=25):
        y4=0
    else:
        k=(k/5-5)*(k/5-5)
        y4=1-1/(1+k)
    return y4


plt.figure("notOld & notYoung function")
for i in a:
    x1.append(i)
    y1.append(line1(i))
    x2.append(i)
    y2.append(line2(i))
x_position=0
y_position=0
j=0
for k in a:
     y5=f3(k)-f4(k)
     if math.fabs(y5)<0.0001:
         j=j+1
         plt.scatter(k ,f4(k) , marker = '*',color = 'black', s = 40 ,label = 'intersection'+str(j))
         plt.text(k*1.01 ,f4(k)*1.01 ,(round(k,2),round(f4(k),2)),fontdict={'size': 10, 'color':  'black'})
plt.text(2.7,0.9, "y=notOld(x)", weight="bold", color="blue")
plt.plot(x1, y1, color='blue', label="notold")
plt.text(4.5,0.1, "y=notYoung(x)", weight="bold", color="red")
plt.plot(x2, y2, color='red', label="notyoung",linestyle="--")
plt.title("notOld & notYoung function")
plt.legend()
plt.show()

参考链接

  1. python3数学建模基础(四)多个函数图像求交点. (代码在这篇文章上修改完成!)
  2. plt.plot() 函数详解

你可能感兴趣的:(模糊数学)