有奖问答 | 这些关于数值计算的问题,你能解决吗?

[复制链接]
ilovematlab 发表于 2017-12-27 18:12:59
话题讨论:

1. 圆周率π是一个老生常谈的话题,它的计算方法也是一些数学学者毕生所追求的,试查找相关文献,并利用 MATLAB 编程计算圆周率π的近似值。

2. 在小学时候我们就知道1+2+3+...+n=n(n+1)/2,现在要求利用差分的性质计算1至n的和,进一步地,求 1^k+2
^k+3^k+...+n^k 的表达式。

3. 按揭贷款在当下是很普遍的现象,小到淘宝购物,大到买车买房,都有按揭的身影,那么在软件直接给出每月的还款额后,你是否对贷款利率怀有疑问呢?或者给定贷款利率后,直接给出月还款额,你是否想知道每月的还款额是怎么得到的呢?试分析几种常见的按揭贷款方式,并自行编写相应的程序验证以上疑问。

评选要求:
1. 用户从以上3个问题中任选1-3个问题并使用 MATLAB 解决。
2. 完成后,在本帖中回复并上传 MATLAB 代码(附件名请使用格式“题目编码-论坛用户名”,例如“1-ilovematlab”,多个问题答案请分别上传),由资深用户——《 MATLAB数值计算实战》作者,选出最佳解决方案。
3. 每个问题将会产生两位优胜用户,分别为最佳方案最佳思路。每道题目的优胜用户可以重复,因此解决的问题越多,获奖的比例就越大哟~

最佳答案的提供者将赢取论坛准备的精美礼品!

参与时间:
2018年1月1日 - 2018年1月31日

优胜用户:


所有获奖用户将免费获得机械工业出版社出版的《MATLAB数值计算实战》书籍一本~

参与活动,以 MATLAB 会友,其乐无穷!

= = = = = = = =
如果你有兴趣,在MATLAB中解决问题来提高你的编程能力,点击进入Cody里打怪升级,和全球的高手较量~
Cody 5周年挑战正在进行中,加入挑战赢取五周年纪念徽章!






17 条回复


maple1314168 发表于 2018-1-9 17:36:54
本帖最后由 maple1314168 于 2018-1-10 09:47 编辑

1.1、用拉马努金公式快速递代pi,一步可以有8位小数准确度
1.2  Chudnovsky_algorithm  一步可以有15位小数准确度(目前最长pi好像也是这个方法)

1-maple1314168.rar

541 Bytes, 下载次数: 23

拉马努金公式

1-maple1314168.rar

565 Bytes, 下载次数: 11

Chudnovsky


maple1314168 发表于 2018-1-9 17:43:14
本帖最后由 maple1314168 于 2018-1-10 14:23 编辑

2、使用牛顿的二项式定理,计算幂级数的和的公式。

matlab 的symsum

k=10;
syms x n
symsum(x^k,x,1,n)

2-maple1314168.rar

545 Bytes, 下载次数: 13


最是清风伴我眠 发表于 2018-1-9 18:49:19
1、使用Chudnovsky公式的基本形式:pi/4=8*atan(1/10)-atan(1758719/147153121),可以得到如下求计算pi的代码:
pi=vpa(4*(8*atan(1/10)-atan(1758719/147153121)),N)
其中,N为要获得的pi值的位数。
例:取N为50时,所获得pi值为3.1415926535897932384626433832795028841971693993751

maple1314168 发表于 2018-1-9 19:10:02
本帖最后由 maple1314168 于 2018-1-9 19:33 编辑
最是清风伴我眠 发表于 2018-1-9 18:49
1、使用Chudnovsky公式的基本形式:pi/4=8*atan(1/10)-atan(1758719/147153121),可以得到如下求计算pi的代 ...

可以用三角函数的话,就很多咯!三角函数本来就对照pi的。
N=100;
vpa(4*atan(1),N)
vpa(6*asin(1/2),N)
........
atan(sym(1))
ans =pi/4       等于直接用pi  vpa(pi,N)

webots 发表于 2018-1-9 19:46:39

利用正多边形计算圆周率:代码如下


function p=polyGon(n,r)
t=linspace(0,2*pi,n+1);
x=cos(t)*r;
y=sin(t)*r;
plot(x,y);
points=[x',y'];

distance=zeros(n,1);
if n>=2
    for i=2:size(points,1)
        P=points(i,-points(i-1,;
        distance(i-1)=sqrt(sum(P.^2));


    end
end

Distance=sum(distance);
p=Distance/(2*r);


end





悟得 发表于 2018-1-9 23:48:28
1-悟得.zip (263 Bytes, 下载次数: 1)

悟得 发表于 2018-1-10 10:29:10
悟得 发表于 2018-1-9 23:48
已准备争夺最烂编程奖。

使用方法:蒙特卡罗,原始人方法。

1-悟得.zip (289 Bytes, 下载次数: 1)

悟得 发表于 2018-1-10 20:57:01
之前回答了一个问题,感觉改一下就用得到……
www.ilovematlab.cn/forum.php?mod=viewthread&tid=534878

2-悟得.zip (669 Bytes, 下载次数: 2)

悟得 发表于 2018-1-10 21:27:56
对于高精度pi……
见:h啊ttp://ww啊w.numberworld.org/digits/Pi/

计算方法,据说y-cruncher使用的是Chudnovsky Formula和Ramanujan's Formula
Chudnovsky定义及算法实现:ht啊tps://ww啊w.craig-wood.com/nick/articles/pi-chudnovsky/
Ramanujan自行wiki

还可以利用Bailey–Borwein–Plouffe formula求出pi的第n位而不求前n-1位。自行wiki。

有兴趣的学习一下吧,对自己不会脱发有信心的可以做深入研究…………

悟得 发表于 2018-1-12 22:36:10
本帖最后由 悟得 于 2018-1-13 14:04 编辑

高精度的pi。 1-悟得.zip (1.06 KB, 下载次数: 6)

Aiyouw_odet_Ian 发表于 2018-1-16 16:55:17
现在各种白条各种分期付都是每月还一样的钱。满足这种条件的是等额本息还款法。(等额本金还款法本金部分等额,利息每月还款递减,不满足。)
  1. function aiya=DEBX_lixi(benjin,huankuane,mon)
  2. syms X b m A
  3. f=@(A,X,b,m) X*((1+b)^m-1)-A*b*(1+b)^m;
  4. a=f(benjin,huankuane,b,mon);
  5. d=solve(a,b);
  6. c=double(d);
  7. aiya=c(intersect(find(imag(c)==0),find(real(c)>0)));
  8. end
复制代码
3-Aiyouw_odet_Ian.zip (319 Bytes, 下载次数: 1)

悟得 发表于 2018-1-18 21:20:56
本帖最后由 悟得 于 2018-1-19 11:34 编辑

第二题好像是要求和公式是吧……开始搞错了。求和的话直接sum((1:n).^k)就OK了……(这个方法可以用来检验。)
但是这个速度会很慢,时空复杂度跟n有关,在实际运算中,n往往远远大于k。
例如:1+2+3+...+100。此时n=100,k=1。满足n>>k。

所以,希望能将时空复杂度降为k相关。于是有了:
2-悟得.zip (672 Bytes, 下载次数: 1)

悟得 发表于 2018-1-19 22:55:23
悟得 发表于 2018-1-18 21:20
第二题好像是要求和公式是吧……开始搞错了。求和的话直接sum((1:n).^k)就OK了……(这个方法可以用来检验。 ...

w ww.doc88.com/p-2425380585068.html
这里一个三种,还有两种呢。咋没人写……

树上的熊猫 发表于 2018-1-21 14:14:48

RE: 有奖问答 | 这些关于数值计算的问题,你能解决吗?

本帖最后由 树上的熊猫 于 2018-1-21 14:16 编辑

给出了常见的两种按揭还贷方式月还款数的算法

3-树上的熊猫.zip

819 Bytes, 下载次数: 2


rlq 发表于 2018-1-25 22:55:50
Fabrice和Bellard基于BBP公式推导出来的

1-rlq.rar

268 Bytes, 下载次数: 2


stoneless 发表于 2018-1-31 21:45:52
1-stoneless.m (289 Bytes, 下载次数: 2)

时天天 发表于 2018-2-1 00:01:14
本帖最后由 时天天 于 2018-2-1 00:05 编辑

利用Taylor展式和圆周率公式pi=4*(arctan(1/2)+arctan(1/3))进行计算

1-时天天.rar

368 Bytes, 下载次数: 2

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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