我如何对 2x + 4y + 6z 这样的数字进行运算,比如求平方根?

How can I operate, like take square root, of numbers like 2x + 4y + 6z?

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

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

对于模糊数 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

最好的方法是什么?

我决定将我的 "Triangular Fuzzy" 或 Trifuz class 命名为 __type,默认为 "Defined",但它有一个 try/expect 方法可以尝试将输入参数转换为创建三角形模糊数(如 Trifuz([3, 5, 7]))为 int,如果不能,它会将自己分配为 "Undefined" 这样我就可以知道是否定义了模糊数作为数字或定义为未知数。

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

最好的方法是什么?

编辑:另外我说的是对未知数的数字部分进行操作,而不是对未知部分进行操作。我想 sqrt(2x) 到 return 1.414√x.

忘了说我正在尝试在不使用任何其他库的情况下执行此操作,尤其是任何与数学相关的库,甚至是 Math 本身。

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

基本上我会将用于创建模糊数的 3x + 4y + z 这样的输入拆分为一个数组,拆分为 (3x, 4y, z) 并将其存储在 Trifuz class 中作为“ __parameters”的 (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]

这就像我想要的那样,不使用额外的库,让我选择单词的第一个整数部分,将其分成两部分,然后将第二部分作为 "unknown",这样我就可以更轻松地操作3x1 + 4x2 + 5x3 之类的数字部分,因为它没有在 x3 中获取“3”,只是为其分配了数字。

至于任何简单的 "x1" 或 "Ax" 等的数字,它将 return 1.