sym、sum妙用案例

c0f6b09063ea0224f6b265f6a6d19c2f.png

c8b13ae7c8673b833314290187b84b0c.png

b7b28943fb8c75f03b6c93a42ddd4ccb.png

这是过冷水在学习过程中遇到的一个公式,在实际做计算的时候需要用其具体展开式。很容易观察可得当N稍微大一点的时候该展开式将会变得异常复杂,如果人工展开是吃力不讨好的工作,还容易展开错,所以最后是将其程序化展开。之前过冷水有和大家讲过symsum 函数,其可以用于做级数的展开。所以过冷水就自然就想到symsum 来解决我们的问题。

symsum :
F = symsum(f,k,a,b) 返回级数f关于指数项k从a到b的和;

对于简单的案例:

fc257d6b5f60bcd12f2e5826b1877c61.png

syms x k
F(x) = symsum(k*exp(k^x),k,1,8)
F(x) =
2*exp(2^x) + 3*exp(3^x) + 4*exp(4^x) + 5*exp(5^x) + 6*exp(6^x) + 7*exp(7^x) + 8*exp(8^x) + exp(1)

45d924f40f34041b0df2f3558a2c451d.png

syms x k
F= vpa(symsum(k*exp(k^4),k,1,8))
F =
5.9331846259431911238553684029815e+1779

似乎 symsum 可以解决我们的问题。但是仔细观察会发现:

74b22a9a96c06a3130894c17e638cc79.png

这样的函数形式并不是级数项,过冷书之前想过可以做一个简单的替换比如:

F(x) =exp(1)+2*exp(2^x) + 3*exp(3^x) + 4*exp(4^x) + 5*exp(5^x) + 6*exp(6^x) + 7*exp(7^x) + 8*exp(8^x) 
变成
F(x) =k1*exp(k1)+k2*exp(k2^x) + k3*exp(k3^x) +k4*exp(k4^x) + k5*exp(k5^x) +k6*exp(k6^x) + k7*exp(k7^x) + k8*exp(k8^x)

Maybe可以行的通,实际是失之毫厘谬以千里,不信邪的可以尝试一下。最终经过思考用函数 sym 、sum 函数来解决我的问题。

yi展开的难点在于如何将:如下函数形式展开的思路是什么?

0a81a0b1150c5b03306e451f22024c47.png

由于有两个累积求和符号解决起来难度系数比较高,我们想从一个累计求和符号的展开开始。

2167a215336e890b183e93756d619886.png

过冷水之前只知道 sym 和syms 的作用很接近都用是讲变量符号化,是我们知道的太少了,sym 有如下形式应用:

syms x
K=sym('k',[1,4]);%创建符号向量
K =
[ k1, k2, k3, k4]
当ki变量生成后就基本解决我们的问题了。
F=sum(x./K)
F =
x/k1 + x/k2 + x/k3 + x/k4

这个时候我们就可以尝试解决两个级数求和的问题了。

27e255bf524303113291b3d6f3ccdf7a.png

该问题的关键其实在于怎么生成kij,使用如下形式?

K=sym('k',[N,M]);
>> K=sym('k',[4,4])
K =
[ k1_1, k1_2, k1_3, k1_4]
[ k2_1, k2_2, k2_3, k2_4]
[ k3_1, k3_2, k3_3, k3_4]
[ k4_1, k4_2, k4_3, k4_4]

大意差不多,数字间有个横杠感觉怪怪的,要想办法把横杠去掉。需要改变一下函数参数设置

K=sym('k%d',[4,4])
K =
[ k11, k12, k13, k14]
[ k21, k22, k23, k24]
[ k31, k32, k33, k34]
[ k41, k42, k43, k44]

这样一来就完美了。

F=sum(x./K)
F =
[ x/k11 + x/k21 + x/k31 + x/k41, x/k12 + x/k22 + x/k32 + x/k42, x/k13 + x/k23 + x/k33 + x/k43, x/k14 + x/k24 + x/k34 + x/k44]

核心问题已解决,自然而然就可以编出

69af267af0ce8053ac24d3793fce5bae.png

展开式:

e79d0e89ea2d042ca24b15479916fc90.png

过冷水的本期的分享就这么多,希望能够对大家有帮助。

代码如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值