建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
CANN 主题:1153帖子:4762

问题处理中

【问题求助】

如何从数学公式的角度优化算子精度

fulltower 2020/2/4 1991

对于一些数学算子,常常采用泰勒级数用无限项连加式来拟合,这些相加的项由函数在某一点的导数求得,通过函数在自变量零点的导数求得的泰勒级数又叫做麦克劳林级数。在数学上,对于一个在实数或复数0.png邻域上,以实数作为变量或以复数作为变量、无穷可微的函数f(x),它的泰勒级数是以下这种形式的幂级数:

1.jpg

这里,1.png表示n的阶乘,而3.png表示函数在点4.png处的n阶导数。

对于函数f(x),虽然它们的展开式会收敛,但函数与其泰勒级数也可能不相等。实际应用中,泰勒级数需要截断,只取有限项,可以用根据误差的上限选取泰勒展开的阶数。函数f(x)在进行泰勒展开的时候,在展开点附近拟合误差比较小,一般定义域离展开点越远,收敛越慢,误差越大。为了简化级数表达式,一般函数往往采用在5.png处进行泰勒展开(即麦克劳林展开)来拟合,例如:

6.jpg

6.png

它们分别采用6阶麦克劳林展开和7阶麦克劳林展开即可达到精度要求。

而有些函数在某些区间的收敛十分缓慢,如下图所示为arcsin函数的拟合曲线,当x接近1的时候拟合误差很大,无法直接采用麦克劳林展开来近似表示(由于收敛过慢即使提高展开阶数也达不到精度要求),因此需要针对这类函数进行分区间拟合。因此针对这种情况,为了达到精度的要求,可以采用分区间在不同的展开点进行泰勒展开,或者将精度达标的展开区间的拟合结果通过数学公式映射到其他区间。

7.png

接下来以arcsin函数为例,介绍了三种解决拟合精度问题的方法。

关于arcsin x:                                                                        

反正弦函数arcsin x是正弦函数sin x将值域限制在[-π/2, π/2]的反函数,定义域区间为 [-1, 1],关于原点对称,为奇函数。其麦克劳林展开的无穷级数表示为:

8.jpg

除此之外,它还满足:

9.png

  10.png

方法1:区间映射

由于 y = arcsin x 在零点附近收敛很快,拟合精度很高,因此可以考虑利用公式将零点附近的区间映射到x=1附近的区间。经过分析arcsin x的相关公式,11.png可用于进行区间映射过程。将区间分界点选在12.png 的时候,正好可以利用上述公式将区间14.png的麦克劳林展开的拟合结果映射到区间15.png。如下图所示为拟合的结果:

16.jpg

但当区间17.png麦克劳林展开阶数小于等于13阶(7个系数)时,x0.680.73左右有精度问题(即不满足万分之一的要求),如下图所示:

18.jpg

这时候我们首先可以考虑直接提高麦克劳林展开阶数从而降低误差。

方法2:提高泰勒展开阶数

一般情况下,我们可以直接先通过MATLAB或者OCTAVE等工具先仿真最少需要用多少阶展开可以达到精度要求,虽然展开阶数越多精度越高,但也会带来更多的乘加操作使得运行性能下降,因此需要选择满足精度要求的条件下更小的展开阶数。

在进行OCTAVE仿真的时候,如下图所示,可以看到当麦克劳林展开15阶(8个系数)时,误差全都小于万分之一的要求。

19.jpg

但针对有些函数在某些区间难以收敛,即使提高泰勒展开阶数也无法满足精度要求,可以再次通过区间映射方法将精度较高区间的计算结果映射到精度不达标区间(比如可以通过公式20.png 将区间[0, 0.5]的麦克劳林展开结果映射到区间21.png),或者在不同的展开点进行泰勒展开。接下来就介绍分区间泰勒展开的方法。

 

方法3:分区间泰勒展开

当对arcsin x22.png处进行泰勒展开时,其泰勒展开的无穷级数可以表示为:

23.png    

     我们可以考虑在区间[0, 0.5]继续采用麦克劳林展开来拟合,针对直接采用麦克劳林展开拟合精度较差的区间24.png25.png处的泰勒展开来近似,区间26.png的结果依旧采用将区间27.png的麦克劳林展开结果映射得到。如下图所示红线是泰勒展开的曲线,可以看到其在0.6邻域的拟合效果很好。

28.png

通过octave分析这种方法的最大相对误差,可以得到最大误差为0.000070770,因此该方法的拟合结果均满足双万分之一的要求。

# yarcsin x的真实值,z为拟合值

>> max(abs(y-z)./z)

ans =  0.000070770

或者我们也可以通过octave画图来看相应的误差曲线,具体代码如下:

# x是区间[0,1]上的自变量,yarcsin x的真实值,z为拟合值,m是值全为0.0001的向量

figure

plot(x,abs(y-z)./z)

hold on

plot(x,m)


回复1

caorp
0 0
2021/2/3 12:26

膜拜

上划加载中
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

fulltower

发帖: 11粉丝: 7

级别 : 版主,版块专家

发消息 + 关注

发表于2020年02月04日 19:59:15 1991 1
直达本楼层的链接
楼主
显示全部楼层
[问题求助] 如何从数学公式的角度优化算子精度

对于一些数学算子,常常采用泰勒级数用无限项连加式来拟合,这些相加的项由函数在某一点的导数求得,通过函数在自变量零点的导数求得的泰勒级数又叫做麦克劳林级数。在数学上,对于一个在实数或复数0.png邻域上,以实数作为变量或以复数作为变量、无穷可微的函数f(x),它的泰勒级数是以下这种形式的幂级数:

1.jpg

这里,1.png表示n的阶乘,而3.png表示函数在点4.png处的n阶导数。

对于函数f(x),虽然它们的展开式会收敛,但函数与其泰勒级数也可能不相等。实际应用中,泰勒级数需要截断,只取有限项,可以用根据误差的上限选取泰勒展开的阶数。函数f(x)在进行泰勒展开的时候,在展开点附近拟合误差比较小,一般定义域离展开点越远,收敛越慢,误差越大。为了简化级数表达式,一般函数往往采用在5.png处进行泰勒展开(即麦克劳林展开)来拟合,例如:

6.jpg

6.png

它们分别采用6阶麦克劳林展开和7阶麦克劳林展开即可达到精度要求。

而有些函数在某些区间的收敛十分缓慢,如下图所示为arcsin函数的拟合曲线,当x接近1的时候拟合误差很大,无法直接采用麦克劳林展开来近似表示(由于收敛过慢即使提高展开阶数也达不到精度要求),因此需要针对这类函数进行分区间拟合。因此针对这种情况,为了达到精度的要求,可以采用分区间在不同的展开点进行泰勒展开,或者将精度达标的展开区间的拟合结果通过数学公式映射到其他区间。

7.png

接下来以arcsin函数为例,介绍了三种解决拟合精度问题的方法。

关于arcsin x:                                                                        

反正弦函数arcsin x是正弦函数sin x将值域限制在[-π/2, π/2]的反函数,定义域区间为 [-1, 1],关于原点对称,为奇函数。其麦克劳林展开的无穷级数表示为:

8.jpg

除此之外,它还满足:

9.png

  10.png

方法1:区间映射

由于 y = arcsin x 在零点附近收敛很快,拟合精度很高,因此可以考虑利用公式将零点附近的区间映射到x=1附近的区间。经过分析arcsin x的相关公式,11.png可用于进行区间映射过程。将区间分界点选在12.png 的时候,正好可以利用上述公式将区间14.png的麦克劳林展开的拟合结果映射到区间15.png。如下图所示为拟合的结果:

16.jpg

但当区间17.png麦克劳林展开阶数小于等于13阶(7个系数)时,x0.680.73左右有精度问题(即不满足万分之一的要求),如下图所示:

18.jpg

这时候我们首先可以考虑直接提高麦克劳林展开阶数从而降低误差。

方法2:提高泰勒展开阶数

一般情况下,我们可以直接先通过MATLAB或者OCTAVE等工具先仿真最少需要用多少阶展开可以达到精度要求,虽然展开阶数越多精度越高,但也会带来更多的乘加操作使得运行性能下降,因此需要选择满足精度要求的条件下更小的展开阶数。

在进行OCTAVE仿真的时候,如下图所示,可以看到当麦克劳林展开15阶(8个系数)时,误差全都小于万分之一的要求。

19.jpg

但针对有些函数在某些区间难以收敛,即使提高泰勒展开阶数也无法满足精度要求,可以再次通过区间映射方法将精度较高区间的计算结果映射到精度不达标区间(比如可以通过公式20.png 将区间[0, 0.5]的麦克劳林展开结果映射到区间21.png),或者在不同的展开点进行泰勒展开。接下来就介绍分区间泰勒展开的方法。

 

方法3:分区间泰勒展开

当对arcsin x22.png处进行泰勒展开时,其泰勒展开的无穷级数可以表示为:

23.png    

     我们可以考虑在区间[0, 0.5]继续采用麦克劳林展开来拟合,针对直接采用麦克劳林展开拟合精度较差的区间24.png25.png处的泰勒展开来近似,区间26.png的结果依旧采用将区间27.png的麦克劳林展开结果映射得到。如下图所示红线是泰勒展开的曲线,可以看到其在0.6邻域的拟合效果很好。

28.png

通过octave分析这种方法的最大相对误差,可以得到最大误差为0.000070770,因此该方法的拟合结果均满足双万分之一的要求。

# yarcsin x的真实值,z为拟合值

>> max(abs(y-z)./z)

ans =  0.000070770

或者我们也可以通过octave画图来看相应的误差曲线,具体代码如下:

# x是区间[0,1]上的自变量,yarcsin x的真实值,z为拟合值,m是值全为0.0001的向量

figure

plot(x,abs(y-z)./z)

hold on

plot(x,m)


举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

caorp

发帖: 9粉丝: 9

级别 : 版主

发消息 + 关注

发表于2021年02月03日 12:26:06
直达本楼层的链接
沙发
显示全部楼层

膜拜

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

邀请回答
您可以邀请3位专家

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200