首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视线上的密度剖面积分

视线上的密度剖面积分
EN

Stack Overflow用户
提问于 2015-11-27 06:08:07
回答 1查看 1.3K关注 0票数 1

我的问题是:

我知道密度是球体半径的函数。假设密度rho(1000)和半径(1000)已经进行了数值计算。我想找到一条视线上的密度积分,如下所示,尽管这是一个3D问题:

这条视线可以从中心移动到边界。我知道我们需要先沿视线插值密度,然后相加得到视线上的密度积分。但是任何人都可以给我一些想法,如何快速地进行插值?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-18 21:59:52

我有下面的实现(假设密度配置文件rho = exp(1-log(1+r/rs)/(r/rs))):

第一种方法要快得多,因为它不需要处理来自r/np.sqrt(r**2-r_p**2)的奇点。

代码语言:javascript
复制
import numpy as np
from scipy import integrate as integrate

### From the definition of the LOS integral
def LOS_integration(rs,r_vir,r_p):  #### radius in kpc
    rho = lambda l: np.exp(1 - np.log(1+np.sqrt(l**2 + r_p**2)/rs)/(np.sqrt(l**2 + r_p**2)/rs))
    result = integrate.quad(rho,0,np.sqrt(r_vir**2-r_p**2),epsabs=1.49e-08, epsrel=1.49e-08)
    return result[0]

integration_vec = np.vectorize(LOS_integration)   ### vectorize the function


###  convert LOS integration to radius integration
def LOS_integration1(rs,r_vir,r_p):  #### radius in kpc
    rho = lambda r: np.exp(1 - np.log(1+r/rs)/(r/rs)) * r/np.sqrt(r**2-r_p**2)  
    ### r/np.sqrt(r**2-r_p**2) is the factor convert from LOS integration to radius integration
    result = integrate.quad(rho,r_p,r_vir,epsabs=1.49e-08, epsrel=1.49e-08)
    return result[0]

integration1_vec = np.vectorize(LOS_integration1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33951194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档