分数次幂微积分计算
引例
首先,网上目前有很多微积分的实现。例如下面2个以Python示例的微积分计算。
示例1:
from sympy import *
x = Symbol('x')
y = integrate(x*2,(x,-1,1))
示例2:
from sympy import *
t = Symbol('t')
x = Symbol('x')
m = integrate(sin(t)/(pi-t),(t,0,x))
n = integrate(m,(x,0,pi))
这两种微积分的计算形式其实已经可以解决大多数的微积分计算问题。
但是后来本人发现有一种微积分形式的出现(也是朋友问我的问题):例如下面两个微积分中出现分数次幂且在分母中的形式,要如何用编程的方式实现计算。
大家可以先自己实现一下,看看会出现什么问题。其实本文的内容也不是多么高深的实现方式,只是实现计算的一个总结吧。
R语言实现
在R语言中的实现方式基本不会有太多问题,毕竟R语言本身的数学计算实现能力还是可以的。
# 微积分1
formule1 <- function(x){x/((5-2*x)^0.5)}
integrate(formule1,lower = -2,upper = 2)
# 微积分2
formule1 <- function(x){x/((5-2*x)^(5/2))}
integrate(formule1,lower = -2,upper = 2)
运行结果:
Python实现
Python的实现方式开始采用sympy库一直计算不出来。先来计算第一个微积分。
import sympy
x = sympy.Symbol('x')
y = x/((5-2*x)**0.5)
print(sympy.integrate(y,(x,-2,2)))
运行后会出现报错:
_CoeffExpValueError: expr not of form a*x**b: 0.252313252202016
第一次修改:(失败)
也就是微积分中的函数形式不能为“a*x**b”。那么如果我将代码中y = x/((5-2*x)**0.5)的次幂部分用pow函数(次幂函数)修改为y = x/pow(5-2*x,0.5),是否可行呢?
y = x/pow(5-2*x,0.5)
print(sympy.integrate(y,(x,-2,2)))
运行结果会发现还是一样的报错:
_CoeffExpValueError: expr not of form a*x**b: 0.252313252202016
那是因为虽然采用了pow函数,但是运行之后的函数形式并没有发生变化。
第二次修改:(成功)
那如果用sqrt函数进行开方呢?即将y = x/((5-2*x)**0.5)的次幂部分用sqrt函数(开方函数)修改为y = x/sympy.sqrt(5-2*x)。
y = x/sympy.sqrt(5-2*x)
print(sympy.integrate(y,(x,-2,2)))
新问题:
虽然已经运行出结果,但又出现新的问题:上面计算出来的是第一个微积分,它的分母是开方形式,而第二个微积分的分母不是开方形式的函数,而是5/2的形式。
这时是不能采用sqrt函数,本人尝试使用了很多表达方式,最终在函数中都会转换为“a*x**b”。
因此,最后还是放弃了sympy库,而使用了SciPy库实现。
from scipy import integrate,sqrt
x1 = lambda x: x/sqrt(5-2*x)
integrate.quad(x1,-2,2)
x2 = lambda x: x/(5-2*x)**0.5
integrate.quad(x2,-2,2)
x3 = lambda x: x/(5-2*x)**(5/2)
integrate.quad(x3,-2,2)
文章未经博主同意,禁止转载!