当函数的变量是数组时与SciPy集成

2024-04-19 07:40:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个尝试学习科学计算的Python新手,因此在这件事上需要一些帮助。我要做的是,当4个变量从给定的数组中取值时,集成一个函数。当一个数组只表示一个变量时,它工作得很好,但对4个变量不起作用。 例如,这是有效的:

    import scipy.integrate as integrate
    from numpy import *

    values1 = [3.333, 6.667, 10, 13.333, 16.667, 20] #these are test1 values
    test2 = -2.333 
    test3 = 4.333
    test4 = 0.4918
    test5 = -12.005

    f = lambda u : (u**(test1-1))*((1-u)**test3-test1-1)*((1-u*test4)**-test2)*exp(u*test5)
    I=[]

    for test1 in values1:
    result, err = integrate.quad(f,0,1)
    I.append(result)

    print(I)

我想做的,但不起作用:

    import scipy.integrate as integrate
    from numpy import *

    values1 = [3.333, 6.667, 10, 13.333, 16.667, 20] #these are test1 values
    values2 = [-2.333, -5.667, -9, -12.333, -15.667, -19] #these are test2 values 
    values3 = [4.333, 7.667, 11, 14.333, 17.667, 21] #these are test3 values
    test4 = 0.4918 #this is constant
    values5 = [-12.005, -12.063, -12.121, -12.178, -12.235, -12.293] #these are test5 values

    f = lambda u : (u**(test1-1))*((1-u)**test3-test1-1)*((1-u*test4)**-test2)*exp(u*test5)
    I=[]

    for test1, test2, test3, test5 in values1, values2, values3, values5:
    result, err = integrate.quad(f,0,1)
    I.append(result)

    print(I)

我得到值错误:引用for循环的值太多,无法解包。我可以想象循环必须扩展以容纳所有数组,但我不确定如何扩展。你知道吗


Tags: importforscipy数组resultarevaluesintegrate
1条回答
网友
1楼 · 发布于 2024-04-19 07:40:26

使用for .. in ..循环,您不能像在示例代码中那样一次遍历多个列表。 可以使用函数zip(...)返回元组列表,其中第i个元组包含每个列表中的第i个元素,如下所示:

import scipy.integrate as integrate
from numpy import *

values1 = [3.333, 6.667, 10, 13.333, 16.667, 20] #these are test1 values
values2 = [-2.333, -5.667, -9, -12.333, -15.667, -19] #these are test2 values 
values3 = [4.333, 7.667, 11, 14.333, 17.667, 21] #these are test3 values
test4 = 0.4918 #this is constant
values5 = [-12.005, -12.063, -12.121, -12.178, -12.235, -12.293] #these are test5 values

f = lambda u : (u**(test1-1))*((1-u)**test3-test1-1)*((1-u*test4)**-test2)*exp(u*test5)
I=[]

for test1, test2, test3, test5 in zip(values1, values2, values3, values5):  # Change this line
    result, err = integrate.quad(f,0,1)
    I.append(result)

print(I)

相关问题 更多 >