2010年11月27日 星期六 16:35
你要对这样的算式做什么计算?举个例子吧。
2010年11月27日 星期六 18:51
比如对y=exp(x**n-1)的dy/dx做x从0~100的积分(n=1~5)
画这个图
2010年11月27日 星期六 19:07
图的x轴是什么,是n么?
2010年11月27日 星期六 19:18
恩,x只是积分范围。
还有一个新问题:
x = np.linspace(0,1,100)
def Signal(a,b):
if a-b < 0:
return 0
else:
return a-b
Signal(x,0.5)就提示出错了。应该怎么改啊?
2010年11月27日 星期六 19:38
对数组进行处理的分段函数不能用if做。可以用where:
np.where(x<0.5,0,x-0.5)
当然也可以把它包装成一个函数:
def signal(x, b):
return np.where(x<b,0,x-b)
2010年11月27日 星期六 19:42
y=exp(x**n-1)的导数的积分就是y函数本身吧。
而你这个是定积分,因此积分结果是:exp(100**n-1) - exp(0**n-1)
可以用sympy做符号运算:
In [24]: from sympy import *
In [25]: x,n = symbols("x,n")
In [27]: integrate(exp(x**n-1).diff(x), (x,0,100))
Out[27]: -exp(-1)*exp(0**n) + exp(-1)*exp(100**n)
2010年11月27日 星期六 22:58
哦不好意思积分号里面还要乘一个x**2..
2010年11月28日 星期日 06:33
整理一下:
你要计算当n=1,2,3,4,5时, x**2 * ( exp(x**n-1).diff(x) ) 的x从0到100的定积分?
exp(x**n-1).diff(x) 表示exp(x**n-1) 对 x 微分。
可以想象这个数字非常大,以至于无法用浮点数表示,不过计算方法如下:
首先手工计算exp(x**n-1) 对 x 微分,或者用sympy
In [87]: exp(x**n-1).diff(x)
Out[87]: n*x**n*exp(-1 + x**n)/x
那么你要积分的算式是:
x**2*(n*x**n*exp(-1 + x**n)/x)
使用scipy.integrate的定积分计算函数quad:
from math import exp
from scipy.integrate import quad
def f(n, x0, x1):
return quad(lambda x:x**2*(n*x**n*exp(-1 + x**n)/x), x0, x1)
计算n=1时的定积分,前一个数是结果,后一个数是误差:
In [92]: f(1, 0, 100)
Out[92]: (9.6932275190238917e+46, 8.9608528599586246e+35)
如果计算f(2, 0, 100)则出错,因为超过了浮点数的表示范围,
不过计算x从0到2的定积分倒是可以:
In [94]: f(2, 0, 2)
Out[94]: (60.624490210734457, 1.7318644934590501e-09)
2010年11月28日 星期日 22:27
谢谢若愚老师的专业指导!
2010年11月28日 星期日 23:00
In [87]: exp(x**n-1).diff(x)
Out[87]: n*x**n*exp(-1 + x**n)/x
这个步骤在IDLE里面应该怎么做呢?
from sympy import *?
好像不对啊。。。
2010年11月29日 星期一 06:38
2010年11月29日 星期一 22:30
原来如此。。。。
搞定了
Zeuux © 2024
京ICP备05028076号