0

我试图在 Python 中取矩阵的逆并不断收到语法错误。我是 Python 新手。在进行了互联网搜索并尝试了多种方法之后,我仍然没有得到它。有人可以看看我的代码并指出我正确的方向吗?错误消息:python2.6 test.py 文件“test.py”,第 39 行 inverse = mat1.I*mat2 ^ SyntaxError: invalid syntax

谢谢!

#import all of the needed libraries
import math
import matplotlib.pyplot as plt
import numpy
import array
import itertools
from numpy import linalg as LA

#variables and defs
x = []
y = []
h1 = 1
h2 = 5
h3 = 10
x1 = .5
x2 = 9.5
x3 = 4.5
y1 = .5
y2 = 2.5
y3 = 9.5


#create a 10x10 grid
for i in range(10):
    for j in range(10):
        x.append(i)
        y.append(j)
    j=0

#Triangle Interpolation Method 3
for i in range(100):
    xp = x(i)
    yp = y(i)

    mat1 = ([[(x1-x3),(x2-x3)],[(y1-y3), (y2-y3)]])  
    mat2 = ([(xp-x3), (yp-y3)]
    inverse = (LA.inv(mat1))*mat2

    w1 = inverse(1)
    w2 = inverse(2)
    w3 = 1-w1-w2

#check to see if the points fall within the triangle
if((w1 <=1 && w1 >=0) && (w2 <=1 && w2 >=0) && (w3 <=1 && w3>=0))
    z = (h1*w1)+(h2*w2)+(h3*w3)
.
.
.
4

3 回答 3

3

除了:Nick Burns 指出的缺失之外,Python 不使用&&. 您应该and改用:

if((w1 <=1 and w1 >=0) and (w2 <=1 and w2 >=0) and (w3 <=1 and w3>=0)):
    z = (h1*w1)+(h2*w2)+(h3*w3)

此外,Python 允许使用以下语法来稍微简化您的 if 条件:

if (0 <= w1 <= 1) and (0 <= w2 <= 1) and (0 <= w3 <=1):
    z = (h1*w1)+(h2*w2)+(h3*w3)

编辑:

根据您的评论指出的实际错误是这一行的不平衡括号:

mat2 = ([(xp-x3), (yp-y3)]

这应该是:

mat2 = [(xp-x3), (yp-y3)]

你可以进一步写

mat2 = [xp-x3, yp-y3]

为了更容易看到必要的分隔符匹配。

于 2013-04-03T03:09:04.663 回答
0

你缺少一个关闭的括号。

mat2 = ([(xp-x3), (yp-y3)]

应该

mat2 = ([(xp-x3), (yp-y3)])

不过,在修复它之后,您会得到更多的语法错误。您可以查看 Ray 和 Nick Burns 的答案以了解更多信息。

于 2013-04-03T03:11:18.023 回答
0

您的语法错误很可能来自if代码末尾的语句。当 IF 语句末尾没有 ':' 时,您将收到 syntaxError。

例如:

def hello(name):
    if name

SyntaxError: invalid syntax

希望有帮助!

于 2013-04-03T02:57:51.703 回答