请教:函数求根效率的问题

haven_t 2009-04-27 02:31:41
现有大量数据(超过1万个浮点数),在一函数转换后绘制直方图.
该函数为y=exp(x)-a^2*exp(x/a)的反函数。a需要通过找出数据中最小值才能确定。
我的想法是这样的:由于难以写出该函数的反函数,所以牛顿法求方程的根是最直接的,把数据代入y,然后算出x,但是该方法运算量太大,所以不现实。
另外的方法是由于绘制的直方图大小不会超过500像素,计算精度不高,所以把每个像素所对应的值算出,放在数组中,数据在数组中查找就可得到其相应位置。这样运算量相对较少。由于a与数据最小值相关,所以每次更换数据都需要进行对查找数组的数据进行更新。请问各位有更好更高效的方法吗?
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2009-05-02
  • 打赏
  • 举报
回复
= = 偶认错……exp里面的/a看成-a了
牛顿其实计算量还算可以,并不大的
FancyMouse 2009-05-02
  • 打赏
  • 举报
回复
令r=a^2*exp(-a),y=exp(x)-r*exp(-x)
exp(x)=(r+sqrt(r^2+4y))/2
x=ln(exp(x))=ln(...)
既然都说是正弦双曲变形了反函数怎么不能求?
haven_t 2009-05-02
  • 打赏
  • 举报
回复
如果执行次数不多,这个牛顿法运算速度确实已经足够了,但因为数据量比较大,方程中含有指数运算,而且运算后数据是用来绘制图形的,也就是每次重绘都需要进行运算,所以运算速度会比较敏感,相对牛顿法每次求根需要十数次指数运算,查找相对会比较快。
haven_t 2009-05-01
  • 打赏
  • 举报
回复
对不起,我的公式写错了,应该是y=exp(x)-a^2*exp(-x/a),一个正弦双曲的变形。
fire_woods 2009-04-29
  • 打赏
  • 举报
回复
a=1的时候y不是等于0吗?
haven_t 2009-04-28
  • 打赏
  • 举报
回复
求导证实这是个单调递增的函数,不存在重根。
fire_woods 2009-04-28
  • 打赏
  • 举报
回复
效率能满足要求就将就了,
另外这个函数可能n个x对应同一个y,这个准备怎么处理?
haven_t 2009-04-28
  • 打赏
  • 举报
回复
没更好的方法了吗?
fire_woods 2009-04-27
  • 打赏
  • 举报
回复
用你后面的方法,应该还凑活.

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧