作者Gwaewluin (神无月 孝臣)
看板MATLAB
标题Re: [问题] MATLAB新手发问(积分问题)
时间Wed Oct 17 22:25:03 2007
※ 引述《va1kyrie (123)》之铭言:
: 各位先进大家好
: 小弟想请问一个问题
: 我现在要解一个积分:
: ∫ (1/(exp((x-F-V)/T))+1) * (R)/((x-E-U)^2+R^2) dx
: 我要对x积分
: 积分区间是从-∞到F
: 而F=0.2 E=0.3 U=0.06 R=0.001 T=0.002都是已知定数
: V则是一个变数 V=0:0.001:1 後面还会用到
: 请问这样能积吗?
: 请知道的人教我
: 或是提点我一下该用哪些指令~
先把方程式写容易看一些
V 1 * R
∫--------------------------------------------------------dx
-∞ x - F - V 2 2
( exp( ----------- ) + 1 ) * ( ( x - E - U ) + R )
T
边界是无限大没办法直接做数值积分
所以先进行变数变换
1 1 - t -1
令t = --------- => x = ------- => dx = -------dt
x + 1 t t * t
1
下界-∞ => ---------- = 0
-∞ + 1
1
上界 V => ----------
V + 1
接着把x替换掉
1
-------
V + 1 - R
∫ ---------------------------------------------------------------dt
0 1 - t
/ ------- -F -V \
| t | 1 - t 2 2 2
( exp| -------------- | + 1 ) * ( ( ------- - E - U ) + R ) * t
\ T / t
变成有限区间就可以直接做数值积分了
(那直接求-∞开始区间的H开头高斯积分法我不太信任)
(而且H开头高斯积分法的高斯点与weighting也太难求)
接下来有两种作法
1
一种是把0到-------的区间再做变数变换处理成-1到1之间
V + 1
然後就可以去找网路上面很多的-1到1高斯积分点资料
直接使用高斯积分法便可得到积分值
因为经过变数变换後知道变数会转变成怎样的方程式
所以不管V怎麽变,其区间都会维持在-1到1之间
因此V不管怎麽变都可以使用完全相同的一套最基本的高斯积分点来计算
第二种作法就是不管变数变换法处理成-1到1区间
1
改成求0到-------这个区间内的高斯积分点再来做高斯积分法
V + 1
因为V会变化,所以每次变化都要再求一次新区间内的高斯积分点
不过这个Matlab Center里面有别人已经写好的funtion了
只要输入上下区间以及需要几个高斯点就会把高斯点和其weighting算出来给你
捡别人写好的来用会简单一些,可以自己少算一次变数变换
最後要注意的一点就是高斯点数目请请使用偶数,以免出现0的高斯点来
至於要取几个高斯点才会转就麻烦请进行收敛测试来决定
--
Deserves death! I daresay he does. Many that live deserve death. And some die
that deserve life. Can you give that to them? Then be not too eager to deal out
death in the name of justice, fearing for your own safty. Even the wise cannot
see all ends.
Gandalf to Frodo
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.233.241.253
※ 编辑: Gwaewluin 来自: 125.233.241.253 (10/17 22:48)
1F:推 gamer:没记错的话,Gauss point好像没有0 10/17 23:09
2F:→ gamer:不过这个题目出现0应该也不会有什麽问题 10/17 23:09
3F:→ gamer:喔,转换後的t代0会爆掉,我看成转换前的 10/17 23:10
4F:推 Gwaewluin:奇数个又是在-1到1区间的话,中间的高斯点会是0,因为在 10/17 23:11
5F:→ Gwaewluin:-1到1区间高斯点是左右对称的,所以中间那点会为0 10/17 23:12
6F:推 va1kyrie:我是原问者~ 谢谢你的解答 10/18 00:26
7F:→ va1kyrie:不过积分上限是定值(F=0.2) 不是变数 10/18 00:30
8F:推 Gwaewluin:这不重要,算出变数变换後区间内高斯点即可简单求出数值 10/18 00:41
9F:→ Gwaewluin:积分,不需要想太复杂,高斯积分很好用低 XD 10/18 00:41
10F:推 zupo:推!! 厉害 10/18 00:44
11F:推 zupo:不过.Matlab Center里面人写的函数名称是什麽? 10/18 00:48
13F:推 gamer:喔,是我记错了。 10/18 02:41
14F:→ gamer:L-G polynomial的解查表就可以了,自己解太浪费时间了 10/18 02:42
15F:→ gamer:通常函数不要太非线性,取4点5点结果就非常好了 10/18 02:43
17F:推 zupo:谢谢 ^^ 10/18 10:37
18F:推 guteres:这篇值366银 10/18 21:16