设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
求定积分有什么好的算法吗?
1
2
3
/ 3 页
下一页
返回列表
查看:
5049
|
回复:
24
求定积分有什么好的算法吗?
[复制链接]
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
发表于 2003-10-26 22:35:55
|
显示全部楼层
|
阅读模式
我想求正态分布函数的反函数,但是又求不出解析式。所有我的想法是,先造一张表,表中是自变量跟函数值的对应关系,然后再利用函数值查表,从而得到自变量。但是造表的过程就是一个求积分的过程,而求精度要求极高,3位有效数字,所以当x < -9 的时候精度就要求达到10^(-20)。
我现在采用的方法是不停的把积分区间划分得更小,然后把各部分当作矩形,利用面积叠加,求得积分,直到精度达到要求。
可现在从0还没算到-3(步调是0.01),就花了4个多小时了,而这个精度还只是10^(-5)而已。真不知道算完要多少时间。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-10-27 01:10:57
|
显示全部楼层
最好还是先从数学上找到最好的算法再做
回复
支持
反对
使用道具
举报
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-10-27 01:11:38
|
显示全部楼层
编程重要的不是写代码过程而是思想过程
回复
支持
反对
使用道具
举报
显身卡
patientgentoo
patientgentoo
当前离线
积分
52
IP卡
狗仔卡
发表于 2003-10-27 09:48:11
|
显示全部楼层
建议你看看数值分析的课本。中科院的和UIUC的两本都不错,可以去china-pub上搜搜
回复
支持
反对
使用道具
举报
显身卡
lordbyorn
lordbyorn
当前离线
积分
889
IP卡
狗仔卡
发表于 2003-10-27 12:12:27
|
显示全部楼层
好想法!
不过概率书一上已经有表了。你查查就是了。
回复
支持
反对
使用道具
举报
显身卡
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
楼主
|
发表于 2003-10-27 13:05:01
|
显示全部楼层
最初由 lordbyorn 发表
好想法!
不过概率书一上已经有表了。你查查就是了。
对,书上有,不过,他的精度远远不够,而且,在我这个程序中,求分布函数,只不过是一个过程而已。其中也要用到迭代,所以,手工查表的方法是行不通的。
回复
支持
反对
使用道具
举报
显身卡
lordbyorn
lordbyorn
当前离线
积分
889
IP卡
狗仔卡
发表于 2003-10-28 20:14:40
|
显示全部楼层
Insteresing.
There are some approximations (very good approximation).
If you really want to do this, I may give you some help.
回复
支持
反对
使用道具
举报
显身卡
lordbyorn
lordbyorn
当前离线
积分
889
IP卡
狗仔卡
发表于 2003-10-28 20:47:35
|
显示全部楼层
while -1<z<1 you can use this:
y=1/2+1/sqrt(2*pi)*Sum((-1)^n*x^(2n+1)/[(2n+1)*n!*2^n]
where n is from 0 to infinite.
While z<-1 or z>1, I will work it out some day later.:p
I am sure that integral is not needed.
回复
支持
反对
使用道具
举报
显身卡
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
楼主
|
发表于 2003-10-28 21:51:11
|
显示全部楼层
对于 -1<z<1来说,用普通的复化的梯形积分就很容易算出来了,而且速度也不错,我用php编的,也可以在几分钟之内把0~1之间的(0.01为步长)算出来。
但是用这种方法当z<-3.8(7.23e-4)的时候,就不能保证3位有效数字了。最只能保证2位有效数字了,到了z<-3(8.54e-6)的时候就只能保证一位有效数字了。
我怀疑是不是当区间分的太细的时候,X+(delta)x中的(delta)x丢失了导致密度函数就计算不精确,最后就无法达到所需精度。
正在考虑改用c/c++实现,然后用任意精度数学库。
算法也改用Romberg积分,提高收敛速度。
lordbyorn:
你的那个级数中的sart这个函数,我没见过。
回复
支持
反对
使用道具
举报
显身卡
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
楼主
|
发表于 2003-10-28 21:54:36
|
显示全部楼层
呵呵
发过才发现你又改过了
我等你的结果,我数学都忘的差不多了
谢谢。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
3
/ 3 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Mandriva Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表