程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将 FiniteSet 对象转换为 python 列表大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将 FiniteSet 对象转换为 python 列表?

开发过程中遇到将 FiniteSet 对象转换为 python 列表的问题如何解决?下面主要结合日常开发的经验,给出你关于将 FiniteSet 对象转换为 python 列表的解决方法建议,希望对你解决将 FiniteSet 对象转换为 python 列表有所启发或帮助;

我正在寻找一种方法来轻松操作 SymPy 包中的 solveset 方法给出的结果。特别是,我有一个函数 omega(x,n,p,gAMMa),我想在保持 gAMMa 作为符号变量的同时计算它的根:

def omega(x,gAMMa):
    #do stuff
    
gAMMa,x=var('gAMMa x')
roots=solveset(omega_complete(x,30,1,gAMMa),X)

omega 返回 xgAMMa 的非线性组合,因此同一库中的其他方法(例如 linsolvesolve)不起作用.目前,我在调用 FiniteSet 后遇到了 solveset 类型的输出:结果打印在 LaTeX 中,看起来像 this。

简单的转换 List(roots) 给出了错误 TypeError: dID not evaluate to a bool: None。我在 this answer 中使用 roots.args[0],roots.args[1] 找到的替代方法也不是我想要的。有人可以帮忙吗?


完整代码(注意实际上是两个函数,omega_completeomega_cycle,它们的定义类似):

import numpy as np
import cmath as cm
from sympy import *

def target(n,p):
    w=[]
    for j in range(n):
        if j==p:
            w.append(1)
        else: w.append(0)
    return np.array(w)

###---complete---####

def change_basis_complete(N):
    
    matrix=np.zeros((N,N),dtype=compleX)
    for n in range(0,N):
        for m in range(0,N):
            matrix[n,m]=(1/cm.sqrt(N))*cm.exp(2*np.pi*1j*(n+1)*(m+1)/N)
    return matrix  

def new_target_complete(N,p):
    return np.dot(change_basis_complete(N),target(N,p))

def omega_complete(x,N,gAMMa):
    
    w=new_target_complete(N,p)
    
    old_spectrum=np.zeros(N)
    for i in range(N-1):
        old_spectrum[i]=N
    old_spectrum[N-1]=0
    
    sigma=0
    for i in range(N):
        sigma+=(abs(w[i])**2)/(gAMMa*old_spectrum[i]-X)
    return 1-sigma

###---cycle---####

def change_basis_cycle(N):
    
    matrix=np.zeros((N,m]=(1/cm.sqrt(N))*cm.exp(-2*np.pi*1j*(n+1)*(m+1)/N)
    return matrix  

def new_target_cycle(N,p):
    return np.dot(change_basis_cycle(N),p))

def omega_cycle(x,gAMMa):
    
    w=new_target_cycle(N,p)
    
    old_spectrum=np.zeros(N)
    for n in range(N):
        old_spectrum[n]=2-2*cm.cos((2*cm.pi*n)/N)
   
    sigma=0
    for i in range(N):
        sigma+=(abs(w[i])**2)/(gAMMa*old_spectrum[i]-X)
    return 1-sigma

解决方法

SymPy issues 很想知道您正在尝试解决的方程式,以便可以重现:list(finite_set_object) 没有理由不给您一个参数列表。但如果 list(finite_set_object.args) 有效...嗯。

关于 ConditionSet 或 solveset 返回的任何其他对象,您必须阅读它们的含义以了解您可以用它们做什么。通常,ConditionSet 会像 ConditionSet(Eq(eq,0),domain) 一样返回,表示“未找到 eq = 0 的解决方案”,因此无法将其转换为解决方案列表。

大佬总结

以上是大佬教程为你收集整理的将 FiniteSet 对象转换为 python 列表全部内容,希望文章能够帮你解决将 FiniteSet 对象转换为 python 列表所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。