2013-10-17 40 views
0

我想通过uxx将我的函数整合起来,然后将这些值存储在矩阵中,这样我就可以用imshowpcolormesh来绘制它们。整合的边界是0 < u < inf-inf < xx < inf。目前,我只能将界限设置为10,直到我可以解决这个问题。Python:无限域上的双重积分

import numpy as np 
import pylab as pl 
from scipy.integrate import dblquad 

b = 50.0 

x = np.linspace(-10, 10, 1000) 
y = np.linspace(0, 10, 1000) 

T = pl.zeros([len(x), len(y)]) 


for xi in enumerate(x): 
    for yi in enumerate(y): 
     def f(xi, yi, u, xx): 
      return ((np.exp(u * (b - yi)) - np.exp(-u * (b - yi)))/
        (np.exp(u * b) - np.exp(-u * b)) * np.cos(u * (xx - xi))) 


def fint(u, xx): 
    return T + dblquad(f, -10, 10, 0.1, 10, args = (u, xx))[0] 

这是我到目前为止的代码,但我知道它不能正常工作;不幸的是,我不知道问题是什么。也许我不能在我的定义f或我的我的fint是错误的两个循环。

+0

是的,在for循环中有一个定义是我从来没有考虑过的。你会意识到,既然你在循环中定义了你的函数,你可以定义它很多次而不使用它(甚至工作吗?)。另外,我没有看到你在这个例子中称呼fint,你是从外面做还是根本不做? – Jblasco

+0

@Jblasco我不想再打电话给fint。我整合的目标是让我可以将某些点的矩阵作为热图映射到指定的域上。 – dustin

回答

1

从你的问题中不完全清楚你想要做什么。但这里是我的解释:你有两个变量uxx的双重积分,它也需要两个参数xiyi。您想要在xiyj的许多不同值上评估xxu上的积分,并将这些值存储在T中。假设这是你想要做的(并纠正我,如果我错了),这是我该怎么做。

import numpy as np 
from scipy.integrate import dblquad 

b = 50.0 

x = np.linspace(-10, 10, 1000) 
y = np.linspace(0, 10, 1000) 

def f(xx, u, xi, yj): 
    return ((np.exp(u * (b - yj)) - np.exp(-u * (b - yj)))/
      (np.exp(u * b) - np.exp(-u * b)) * np.cos(u * (xx - xi))) 

T = np.zeros([len(x), len(y)]) 
for i, xi in enumerate(x): 
    for j, yj in enumerate(y): 
     T[i, j] += dblquad(
      f, -10, 10, lambda x: 0.1, lambda x: 10, args=(xi, yj))[0] 
+0

您正确解释了问题。那么我可以设置我的绘图并执行'pylab.pcolormesh(x,y,T)'或是否必须是'pylab.pcolormesh(x,y,T [i,j])'? – dustin

+0

另外,我想整合u和xx,所以我需要将参数更改为正确的? – dustin

+0

第一个是正确的:'pylab.pcolormesh(x,y,T)'。后者只会将'T'的一个元素传递给'pcolormesh',但您想传递'T'的所有元素,所以您只需传递整个'T'矩阵。 – hunse

0

fint是唯一调用f的东西。你不是在调用fint,这意味着f没有被使用,只是被定义了大约一百万次。我会考虑定义该函数一次,并将其称为一百万次。