我有一个项目,它的一个步骤是解决R(k,d,a), 其中k表示第k步。
我的朋友建议我这样做,但我不知道该怎么做。
from sympy import *
k= symbols('k')
d= symbols('d')
a= symbols('a')
R= function('R')(k,d,a)
print R`
事实上,我不知道如何用类方法来定义一个函数... 而这个表达是失败的。
def R(k,d,a):
k:第n个进程的数量
d:参数以便初始化
应给出R(0,d,a)
if k==0:
return 100*d
r=d*(1-(1-(d/R(k-1,d,a))**2)**0.5)**0.5
B=-3/2*d
D=(R(k-1,d,a))**3*(3*a*d/R(k-1,d,a)-2)+r**2*(r-3/2*d)
这里我用R(k-1,d,a)定义R(k,d,a),它是否合适?
x ^ 3 + Bx ^ 2 + Cx + D = 0,其中c = 0
x代表R(k,d,a)。
x=symbols('x')
y=solve (x**3+x**2*B+D,x)
return max(y)
这里我想要一个y的列表,并用实数来询问y。
稍后返回最大的一个。
但我不知道如何实现它。
最后,对于每个k,我将需要另一个函数给出一个R(k,d,a)将成为其中的参数的值。我想我可以通过我的自己用for循环,它是对我来说并不难。
最难的是如何获得R(k,d,a)。
我不需要复杂的根。但是如果我想要,我怎么能得到它们? 谢谢你的收看!
答案 0 :(得分:0)
你看起来基本上没问题。但是有三点建议:
S(100)*d
; B = -S(3)/2*d
代替你拥有的内容(并在B
的表达式中使用D
,在结尾处写(r+B)
; max
将无法对根进行排序,因此最好手动选择真实的:y=[i for i in solve (x**3+x**2*B+D,x) if i.is_real]
。