本实验取材于mooc中南大学的《科学计算与MATLAB语言》。
- 级数求和
- 泰勒级数
级数求和
求无穷级数的和需要符号表达式求和函数symsum(),其调用格式为:
symsum(s,v,n,m)
其中,s表示一个级数的通项,是一个符号表达式。v是符号变量,v省略时使用系统的默认变量。n和m是求和变量v的初值和末值。
例题级数求和
分析:第一项有限和,找到通项1/n^2,第二题和第三题都已经给出通项,因此直接可以按照symsum函数进行求结果。
>> syms n;
>> s1=symsum(n^2,1,100)
s1 =
338350
>> s2=symsum((-1)^(n-1)/n,1,inf)
s2 =
log(2)
>> s3=symsum((-1)^(n-1)/(2*n-1),n,1,inf)
s3 =
1/4*pi
>> eval(s3)*4
ans =
3.1416
>>
第一题代码,我不做介绍了,第二题代码是个符号表达式,所以没舍入小数,第三题是个pi/4,学过数学分析的同学应该清楚了解,在做泰勒展开的时候,接触过这个无穷级数,所以再对符号表达式的时候,我再把它转换为pi的值,matlab计算3.1416
银行利率计算问题
接触到题目,需要慌张一下。先把变量设出来。
假设存款(初始总金额)为p,年利率为r,计息期数为k。
第一期后总金额为p(1+r/k).
第二期后总金额为p*(1+r/k)^2.
第三期后总金额为p*(1+r/k)^3.
依次类推,第k期后总金额为p*(1+r/k)^k.
虽然是无穷级数的公式,大家也知道,有穷是无穷的一种特殊情况,所以本题中,确立出有限的情况,把n和m改成相同的值。
symsum(s,v,n,m)
代码完整应该是:
>> syms k r;
>> p2 = symsum(50000*(1+0.045/k)^k,k,2,2);
>> eval(p2)
ans =
5.2275e+004
>> p4 = symsum(50000*(1+0.045/k)^k,k,4,4);
>> eval(p4)
ans =
5.2288e+004
>> p12 = symsum(50000*(1+0.045/k)^k,k,12,12);
>> eval(p12)
ans =
5.2297e+004
>> limit((1+r/k)^k,k,inf)
ans =
exp(r)
>> 50000*exp(0.045)
ans =
5.2301e+004
在级数的计算中,因为小数都表示为有理分数的形式,容易导致分子或分母出现极大整数从而无法计算的情况。比如下面的例子
计算1/n^2,分别测试有限项和无限项。
>> syms n;
>> s=symsum(1/n^2,n,1,inf)
s =
1/6*pi^2
>> s1=symsum(1/n^2,n,1,500)
s1 =
40989667509417020364501093692502176755794024501985947368498081469230342364939347555775843536098002493121731261331858135756475744199062009423381225462568225215022718381129005000153848871666523784518165560401243113429779402097946238148872369449334015612850425653111305343965419490889763150366838155123100493039642129524497054560780313022903733433651913622499306932093491632638005625140236671330899848602520081053712248084984597965892703/24949033848478399732316621994367635898375217667514634128765175039823065702657515118886782955481397685044789502582244491488082811734990406142410714839994352240346799672671096653373050370003043766917200446990341656932050870930805694029352425457933927448095391600589858411116463642340462127248532668094699055899615372607856782889973726927714049952209285000598428267546847008420299147556794800616080865314955961842908939704768451993600000
>> eval(s1)
ans =
NaN
想想也是头的事情,想到这里,就需要引用泰勒级数这个概念了。
泰勒级数
MATLAB提供了taylor()函数将函数展开为幂级数。
其调用格式为:
taylor(f,v,a,Name,Value)
该函数将函数f按变量v在a点展开为泰勒级数,v省略时按默认规则确定变量,a的默认值是0,Name和Value为选项设置,经常成对使用,前者为选项名,后者为该选项的值。
Name有3个取值:
- ExpansionPoint:指定展开点,对应值可以是标量或者是向量。未设置时,展开点为0.
- Order指定截断参数,对应值为一个正整数。未设置时,横断参数为6,即展开式的最高阶为5.
- OrderMode:指定展开式采用绝对阶或相对阶,对应值为’Absolute’或’Relative’,未设置时取’Absolute’
泰勒级数例子
按照taylor函数调用方式可以得到下面代码:
>> syms x;
>> f=(1+x+x^2)/(1-x+x^2);
>> taylor(f,x,1,'Order',6)
总结:在无穷级数的时候symssum,因为过大或者可能趋于0,我们学习了泰勒级数,因此掌握这两种,应对级数环节,应该是药到病除。
>> syms x;
>> f=taylor(cos(x),x,pi)
f =
-1+1/2*(x-pi)^2-1/24*(x-pi)^4
>> x=3;
>> eval(f)
ans =
-0.9900
>> cos(3)
ans =
-0.9900
>>
运用泰勒级数,也可以像数字加减乘除一样,得出某点的函数值!