这是过冷水在学习过程中遇到的一个公式,在实际做计算的时候需要用其具体展开式。很容易观察可得当N稍微大一点的时候该展开式将会变得异常复杂,如果人工展开是吃力不讨好的工作,还容易展开错,所以最后是将其程序化展开。之前过冷水有和大家讲过symsum 函数,其可以用于做级数的展开。所以过冷水就自然就想到symsum 来解决我们的问题。
symsum :
F = symsum(f,k,a,b) 返回级数f关于指数项k从a到b的和;
对于简单的案例:
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)
syms x k
F= vpa(symsum(k*exp(k^4),k,1,8))
F =
5.9331846259431911238553684029815e+1779
似乎 symsum 可以解决我们的问题。但是仔细观察会发现:
这样的函数形式并不是级数项,过冷书之前想过可以做一个简单的替换比如:
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展开的难点在于如何将:如下函数形式展开的思路是什么?
由于有两个累积求和符号解决起来难度系数比较高,我们想从一个累计求和符号的展开开始。
过冷水之前只知道 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
这个时候我们就可以尝试解决两个级数求和的问题了。
该问题的关键其实在于怎么生成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]
核心问题已解决,自然而然就可以编出
展开式:
过冷水的本期的分享就这么多,希望能够对大家有帮助。
代码如下: