[已解决] 急求大神!!!matlab中erf函数精度提高

[复制链接]
chenlinchong 发表于 2022-9-6 15:00:05

matlab代码如下
k=1079;  z=3^0.5  ;z1=sqrt(-i*k)*(1+z);
mfun('erf',z1)

采用mfun('erf',x),在matlab计算只有16位有效数字(和mathematica中得到的准确结果相比),那么如何才能在matlab中把计算精度提高到30位甚至更高的有效数字?现在很着急,做了很久都没成功,急求各位大神指点。
7533a031a67ea61d0a4b400edd03a0c.jpg

最佳答案


TouAkira 发表于 2022-9-15 11:53:32
chenlinchong 发表于 2022-9-14 23:07
非常感谢同仁。这个我理解,但是我的这个k它是一个任意的实数,如果不是这个1079*3^(0.5),那么这种方法 ...

方法写给你了,照葫芦画瓢,用符号工具箱计算,最后再用vpa做符号转为数值的显示。
或者直接用mathematica算,普通的读写文件以及循环之类简单功能mathematica同样能实现。

4 条回复


TouAkira 发表于 2022-9-15 04:53:38
k = sym( 1079 );
z = sqrt( sym( 3 ) );
z1 = sqrt( -1i * k ) * ( 1 + z );
Result = erf( z1 );
vpa( Result, 40 ) % 自己填精度位数
这个结果精度足够的,跟mathematica的计算结果一致。
0.9944606686251980690040456458046592572037 + 0.002973032078134021794017247086381455673694 *1i

chenlinchong 发表于 2022-9-15 11:07:15
TouAkira 发表于 2022-9-15 04:53
k = sym( 1079 );
z = sqrt( sym( 3 ) );
z1 = sqrt( -1i * k ) * ( 1 + z );

非常感谢同仁。这个我理解,但是我的这个k它是一个任意的实数,如果不是这个1079*3^(0.5),那么这种方法就无效了。您那边有没有对任意实数的k都可以提高精度的方法?

TouAkira 发表于 2022-9-15 11:53:32
chenlinchong 发表于 2022-9-14 23:07
非常感谢同仁。这个我理解,但是我的这个k它是一个任意的实数,如果不是这个1079*3^(0.5),那么这种方法 ...

方法写给你了,照葫芦画瓢,用符号工具箱计算,最后再用vpa做符号转为数值的显示。
或者直接用mathematica算,普通的读写文件以及循环之类简单功能mathematica同样能实现。
回复此楼

chenlinchong 发表于 2022-11-4 22:56:08
TouAkira 发表于 2022-9-15 11:53
方法写给你了,照葫芦画瓢,用符号工具箱计算,最后再用vpa做符号转为数值的显示。
或者直接用mathematica ...

谢谢,我用mathmatical中实现了的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表