You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复‘tuple与int实例间不支持<运算’错误及构建DS0矩阵

问题:构建DS0矩阵时触发类型错误

我需要构建矩阵S、I、H、L和DS0,其中S、I、H、L已成功创建,但DS0的构建出现错误。

原代码

import numpy as np
import sympy as sp
from sympy.matrices import zeros
from gekko import GEKKO    
n=3;z=1

m = GEKKO(remote=False)
x = [sp.symbols('x%d' % i) for i in range(8*n-4)]

t=sp.symbols('t ')

B=np.zeros((n,n))
number = range(n)
for i in number:
   for j in number:
       if i<j :
           B[i][j]=0
       else :
           B[i][j]=sp.factorial(i+j)/(2**j*sp.factorial(j)*sp.factorial(i-j))
PS=[x[0:n]];PI=[x[n:2*n]];PH=[x[2*n:3*n]];PL=[x[3*n:4*n]]
TS=[[1]];TI=[[1]];TH=[[1]];TL=[[1]]
for i in range(n-1):
    TS.append([t**(x[4*n+i]+i+1)])   
    TI.append([t**(x[5*n+i-1]+i+1)])
    TH.append([t**(x[6*n+i-2]+i+1)])
    TL.append([t**(x[7*n+i-3]+i+1)])
S=np.dot(np.dot(PS,B),TS)
I=np.dot(np.dot(PI,B),TI)
H=np.dot(np.dot(PH,B),TH)
L=np.dot(np.dot(PL,B),TL)
DS0=zeros((n,n))
for i in number:
    if i==0:
       DS0[i][i]=0
   
    else:
     DS0[i][i]=sp.gamma(x_4*n+i+1)/sp.gamma(x_4*n+i+1-z)

print (DS0)  

错误信息

运行代码后触发错误:

TypeError: '<' not supported between instances of 'tuple' and 'int'

错误详情:

line 1212, in zeros if rows < 0 or cols < 0: 
TypeError: '<' not supported between instances of 'tuple' and 'int' 

解决方案

  1. 修正zeros()调用方式:
    Sympy的zeros()函数要求传入两个独立的整数参数(行数、列数),而非元组。原代码中zeros((n,n))会把元组当作单个参数传入,导致函数内部将元组和整数做比较时触发类型错误。将其改为:

    DS0=zeros(n, n)
    
  2. 修正变量索引错误:
    代码中x_4*n+i+1是无效语法,x是列表,需用索引访问元素,改为x[4*n+i]。对应行修正为:

    DS0[i][i] = sp.gamma(x[4*n+i] + 1) / sp.gamma(x[4*n+i] + 1 - z)
    

修复后的完整代码

import numpy as np
import sympy as sp
from sympy.matrices import zeros
from gekko import GEKKO    
n=3;z=1

m = GEKKO(remote=False)
x = [sp.symbols('x%d' % i) for i in range(8*n-4)]

t=sp.symbols('t ')

B=np.zeros((n,n))
number = range(n)
for i in number:
   for j in number:
       if i<j :
           B[i][j]=0
       else :
           B[i][j]=sp.factorial(i+j)/(2**j*sp.factorial(j)*sp.factorial(i-j))
PS=[x[0:n]];PI=[x[n:2*n]];PH=[x[2*n:3*n]];PL=[x[3*n:4*n]]
TS=[[1]];TI=[[1]];TH=[[1]];TL=[[1]]
for i in range(n-1):
    TS.append([t**(x[4*n+i]+i+1)])   
    TI.append([t**(x[5*n+i-1]+i+1)])
    TH.append([t**(x[6*n+i-2]+i+1)])
    TL.append([t**(x[7*n+i-3]+i+1)])
S=np.dot(np.dot(PS,B),TS)
I=np.dot(np.dot(PI,B),TI)
H=np.dot(np.dot(PH,B),TH)
L=np.dot(np.dot(PL,B),TL)
# 修复zeros调用方式
DS0=zeros(n, n)
for i in number:
    if i==0:
       DS0[i][i]=0
   
    else:
     # 修复变量索引错误
     DS0[i][i]=sp.gamma(x[4*n+i]+1)/sp.gamma(x[4*n+i]+1-z)

print (DS0)  

内容的提问来源于stack exchange,提问作者hojat saeidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:23:16