Ana*_*ran 2 python integration equation scipy
我有以下积分方程:

我试图解决积分方程,看看f(u)是否被预测为cos(2u).因为我们知道,解决了积分方程为cos(2U),我们可以从0近似积分到无穷大的极限0说,5如果能让积分值从5到无穷大可忽略不计,这样就可以通过选择t来做小.我已经为0到5之间的积分选择了100个评估点,这意味着我正在求解f(u)的100个值.由于我需要求解100个f(u)值,我需要生成100个方程,因此需要100个时间t值.我为1到1.3之间的时间t选择100个值,因为这将确保积分对于5和更大的值可忽略不计.以下是执行此操作的scipy代码:
from scipy import*
from matplotlib.pyplot import*
Nt_samples=100 #100 evaluation points for the time t
t=linspace(1.0,1.3,100)
number_eval_points=100 #100 evaluation points for u
eval_points=linspace(0.005,5,number_eval_points)
delta=eval_points[1]-eval_points[0]
R=zeros(100,1)
R=0.5*sqrt(2*3.14)*t*exp(-2*t*t)
A=zeros((Nt_samples,number_eval_points))
for i in range(100):
for j in range(100):
A[i,j]=delta*exp(-(eval_points[j]*eval_points[j])/(2*(t[i]*t[i])))
Z=cos(2*eval_points)
Fu=dot(linalg.inv(A),R)
plot(eval_points,Fu,eval_points,Z)
Run Code Online (Sandbox Code Playgroud)
不知何故,我对f(u)的结果与cos(2u)相差甚远.事实上,它们看起来像很多随机噪音,完全没有图案!而且,f(u)的大小非常大.我试过玩评估点的数量和t的值,但我没有运气.
参数/逻辑的代码/设置有什么问题吗?
太感谢了!
这不是一个编程问题,但是这里是:积分方程通常在数值上受到严格限制.
的确,在你的情况下,
u, s, vh = linalg.svd(A)
print(s.max()/s.min())
# -> 4.03758642411e+16
Run Code Online (Sandbox Code Playgroud)
这是条件数,而且是巨大的.矩阵A几乎是单数,因此解决方案中会出现大的误差.
谷歌搜索"Tikhonov正规化"应该让你开始研究人们如何处理这样的问题.求解积分方程是数学中的一个成熟领域,所以谷歌搜索应该在这里帮助你很多.
一个快速的正则替换linalg.inv(A)用
linalg.pinv(A, 1e-8)
Run Code Online (Sandbox Code Playgroud)这给了更多余弦的东西.神奇的值1e-8取决于整数内核,但是当事情是关于舍入错误时,要尝试的好值sqrt(finfo(float).eps)就是说你相信浮点数具有的~15位数的一半.
此外,变量的变化可能比截断uto 的范围更好[0, 5].您的案例中的数字问题可能与指数减少的权重因子有关,因此通过变量的变化来摆脱这一点也可能使条件数更好.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |