我如何操作,比如2x + 4y + 6z这样的数字?

时间:2017-10-28 15:58:53

标签: python python-3.x math fuzzy-logic mathematical-expressions

我正在为我的应用数学专业开设一个项目,基本上我有一个数字类(三角模糊数),我有一个函数,它使用我给出的模糊数字的相似性方法。

问题是,这是一个模糊线性规划问题,所以我要做的是让我们说:

对于模糊数字A,B和C:

Max Z = (2, 3, 4)A (+) (3, 5, 7)B (+) (2, 4, 6)C

要查找Max Z,我必须将其转换为以下内容:

Max Z = Sqrt((1/3)((2Ax + 3Ay + 4Az)^2 + (3Bx + 5By + 7Bz)^2 + (2Cx + 4Cy + 6Cz)^2))

还有排名函数,它取一个模糊数的x,y和z并返回(x + 2y + z)/ 4

因此,对于模糊数(3,5,7)A,它必须回馈:

(3Ax + 10Ay + 7Az)/4

最好的办法是什么?

我决定给我的"三角模糊"或称为__type的Trifuz类,它是"定义"默认情况下,它有一个try / expect方法,尝试转换输入参数以创建一个三角模糊数(如Trifuz([3,5,7]))到int,如果它不能,它将自己指定为&#34 ;未定义"所以我可以知道模糊数字是定义为数字还是定义为未知数。

问题是,对模糊数A =(Ax,Ay,Az)的操作很容易,在模糊数A =(3Ax,5Ay,7Az)上操作很难,因为我需要能够对这些数字进行操作3,5和7,而Ax,Ay和Az被重新分配给新的值。

最好的办法是什么?

编辑:我也在谈论操作未知数字的数字部分,而不是在未知部分上操作。我想sqrt(2x)返回1.414√x。

忘了提到我试图这样做而不使用任何额外的库,特别是任何数学相关的库,甚至数学本身。

1 个答案:

答案 0 :(得分:0)

好的,我找到了我想要实现的解决方案:

基本上我会将输入分为3x + 4y + z,用于在数组中创建模糊数,拆分为(3x,4y,z)并将其作为“__parameters”存储在Trifuz类中(3, 4,1)和(x,y,z)为“__unknowns”

为此,我将使用以下脚本:

def splitNumber(word):
    split = list(word)
    number = []
    k = 0
    while(True):
        for i in split:
            try:
                number.append(int(i))
                k = k + 1
            except ValueError:
                break
        break
    for i in range(0, k):
        del split[i]
    if(k == 0):
        number.append(1)
    number = "".join(str(x) for x in number)
    split = "".join(split)
    return [number, split]

这就像我想的那样,不使用额外的库,让我选择一个单词的第一个整数部分,将其拆分为两个,并将第二个部分作为“未知”,这样我就可以更容易地操作数字部分像3x1 + 4x2 + 5x3这样的东西,因为它不会在x3中抓取“3”,只是为它分配了数字。

对于任何简单为“x1”或“Ax”等的数字,它将返回1.