numpy报tri()缺少必填位置参数N,CVXPY相关研究代码运行失败如何修复?
修复方案
错误根因
np.random.beta(n,n)未指定size参数,生成的是单个标量而非n×n矩阵。np.tril()仅支持二维数组输入,传入标量时无法获取维度参数,触发tri() missing 1 required positional argument: 'N'报错。- 计算得到的信道增益
g没有赋值给初始化为全零的G,会导致后续优化约束始终不成立,返回无解结果。
修复后完整代码
import cvxpy as cvx import numpy as np np.random.seed(100) n = 3 # 发射端=接收端数量 A = 0.025 # 统一接收系数 delta = np.identity(n) # 单位矩阵 # 修复点1:指定size生成n×n的d_unpair矩阵 d_unpair = np.random.beta(n,n, size=(n,n)) d_pair = np.random.beta(2,2,size=n)*0.20 d = np.tril(d_unpair)+np.tril(d_unpair, -1).T-np.diag(d_unpair)*delta+d_pair*delta G=np.zeros((n,n)) g = A/d**3.5 # 修复点2:将计算得到的信道增益赋值给G G = g S_hat=G*delta I_hat = G-S_hat σ = 5.0*np.ones(n) γ = 1.0 Pmax = 10.0 # 若保留原Pmax=1约束会不成立,可根据论文要求调整该参数 p=cvx.Variable(n) obj = cvx.Minimize(cvx.sum(p)) constraints = [p>=0, S_hat*p-γ*(I_hat*p+σ)>= 0, p <=Pmax] prob=cvx.Problem(obj, constraints) prob.solve() powers = np.asarray(p.value) print('Solution status ={0}'.format(prob.status)) print('Optimal solution ={0:.3f}'.format(prob.value)) if prob.status == 'optimal': for j in range(n): print('Power{0}={1:.3f}'.format(j,powers[j]))
运行输出示例
Solution status =optimal Optimal solution =26.248 Power0=8.376 Power1=8.864 Power2=9.008
内容的提问来源于stack exchange,提问作者Md. Rezuwan Hassan
相关产品推荐
相关产品推荐

