作者ejialan (eji)
看板MATLAB
标题Re: [讨论] 数值积分
时间Fri Jul 5 18:57:38 2013
※ 引述《sikotu (sikotu)》之铭言:
: 请问一下
: 现在我式子需要做两次数值积分(不是做双重积分)
: 例如:
: 1 1
: ∫ exp(∫ 2tx dx) dt
: 0 0
: t和x为变数
: 先在指数做一次对x的数值积分
: 积分後为t的函数
: 接着指数函数再对t做数值积分
: 尝试过许多遍一直积不出来...
: 所以想来请教一下大家
: 感谢 <(_ _)>
你要做数值积分的话被积函数必须变数可分离
如你的例子可写成
1 1
∫ exp(t∫ 2x dx) dt
0 0
剩下的就很简单了
f1=@(x) 2*x;
I1=quad(f1,0,1,1e-15);
f2=@(t) exp(I1*t);
I2=quad(f2,0,1,1e-15)
如果变数不可分离就只能用符号运算
I=int(exp(int('2*x*t','x',0,1)),0,1)
答案为exp(1)-1
可以看两个算出来的答案的差
er=double(abs(I-I2))
基本上非常接近
不过用符号运算必须被积函数能够求出反导函数才可以
也有可能里面积分积得出来 但是外面的就积不出来
所以还有第三种作法
I3=int('2*x*t','x',0,1);
eval(['f3=@(t) exp(',char(I3),');'])
I4=quad(f3,0,1,1e-15)
这样是把里面的积分用符号运算算出结果
然後外面的积分用数值积分
这样被积函数的要求只有里面的积分可以写出反导函数而已
当然你的例子是三种作法都可以
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.146.175
1F:推 sikotu:谢谢eji热心的帮忙,po文问问题的时候都没有考虑得那麽仔细 07/06 02:46
2F:→ sikotu:但是我的真实例子就是里面的积分没办法写出反导函数... 07/06 02:49
3F:→ sikotu:里面有cos,exp,coth函数相乘,所以才觉得头疼...Orz... 07/06 02:51
4F:→ ejialan:那可能做不太出来了 不过你还是可以把真实例子放上来看看 07/06 17:36
5F:推 evovss48:先用linspace界定积分区间 再用trapz执行数值积分 07/08 09:54