Matlab 如何将符号表达式中的所有数值提取到矩阵中?
我在MATLAB中对符号多项式进行了部分分式分解,这给了我一个符号表达式,例如:Matlab 如何将符号表达式中的所有数值提取到矩阵中?,matlab,symbolic-math,polynomials,Matlab,Symbolic Math,Polynomials,我在MATLAB中对符号多项式进行了部分分式分解,这给了我一个符号表达式,例如: poly = -2i/(x - 1.0 - 1.7i) + 0.57i/(x - 1.0 + 1.1559i) 如您所见,此符号表达式包含x变量和常量复数。如何在MATLAB中从该表达式中提取所有数值?不得丢失数字是真实的还是复杂的信息 对于给定的表达式poly,如何得到以下矩阵A: A = [-2i, -1-1.7i; .57i, -1+1.1559i] A = 0 - 2i -1
poly = -2i/(x - 1.0 - 1.7i) + 0.57i/(x - 1.0 + 1.1559i)
如您所见,此符号表达式包含x变量和常量复数。如何在MATLAB中从该表达式中提取所有数值?不得丢失数字是真实的还是复杂的信息
对于给定的表达式poly
,如何得到以下矩阵A
:
A = [-2i, -1-1.7i; .57i, -1+1.1559i]
A =
0 - 2i -1 - 1.7i
0 + 0.57i -1 + 1.1559i
还请注意,A
应该包含数字,而不是像poly
那样包含符号表达式
我读过
coefs
-函数,但它要求输入是多项式。
使用子函数
-我可以将符号表达式中的求和项除以符号表达式的向量,如下所示:
p = - 0.57735026918962576450914878050196i/(x - 1.0 - 1.7320508075688772935274463415059i) + 0.57735026918962576450914878050196i/(x - 1.0 + 1.7320508075688772935274463415059i);
terms = children(p)
terms =
[ -0.57735026918962576450914878050196i/(x - 1.0 - 1.7320508075688772935274463415059i), 0.57735026918962576450914878050196i/(x - 1.0 + 1.7320508075688772935274463415059i)]
首先,我不知道你想用这个做什么。但是,只要表达式遵循这种严格形式(即
A/(x+B)
形式的分数之和),就可以找到问题的解决方案
我将使用您的示例输入(重命名为pol
,以避免对名为poly
的函数产生阴影):
首先,用以下方法将其分成两部分:
现在,使用以下方法分解一个分数:
现在我们有了形式a/(B*x+C)
的一小部分的术语,其中n==a
和d==B*x+C
。您可以通过多种方式提取后两个参数,我更喜欢微积分:
B = diff(d,x);
C = subs(d,x,0);
现在你知道你的第一个分数是A/(B*x+C)
,或者如果你愿意,你可以用A
和C
除以B
得到分数的“标准”形式。对pol
的第二个子项(如果有)执行相同的操作
检查:
>> simplify(frac1 == A/(B*x+C))
ans =
TRUE
首先,我不知道你想用这个做什么。但是,只要表达式遵循这种严格形式(即
A/(x+B)
形式的分数之和),就可以找到问题的解决方案
我将使用您的示例输入(重命名为pol
,以避免对名为poly
的函数产生阴影):
首先,用以下方法将其分成两部分:
现在,使用以下方法分解一个分数:
现在我们有了形式a/(B*x+C)
的一小部分的术语,其中n==a
和d==B*x+C
。您可以通过多种方式提取后两个参数,我更喜欢微积分:
B = diff(d,x);
C = subs(d,x,0);
现在你知道你的第一个分数是A/(B*x+C)
,或者如果你愿意,你可以用A
和C
除以B
得到分数的“标准”形式。对pol
的第二个子项(如果有)执行相同的操作
检查:
>> simplify(frac1 == A/(B*x+C))
ans =
TRUE
@JJEPSUMI没问题。你能用几句话阐明你为什么要这样做吗?很有可能有更好的方法来完成你想做的事情:)当然我可以:)我使用了级数展开和部分分数分解来集成一个毛茸茸的函数。我在这篇文章的早些时候得到了帮助。在方程中,我对a_k和b_k数感兴趣,这正是这段代码给我的。这里有很多步骤要解释,但所有这些工作的目的是,使用正弦二元分类器和广义线性模型来测试交叉验证和Akaike信息准则的渐近等价性。没问题,我很抱歉有一点简短的总结,但很难在这里很快解释。如果我把所有的东西都做好了,我会试着把所有的东西都写进手稿,也许会出版。这不是什么大的结果。只是在一个不平凡的非教科书的好案例中测试这个理论。@jjepsuomi哦,不,没关系,你不必详细解释,你的问题是独立的。我只是想知道这是否是XY问题,这就是为什么我问:)@AndrasDeak哦,是的,我道歉,我读最后一部分太匆忙了。我不确定canonical在这种情况下是什么意思。太好了,现在我明白了。它工作100%非常好。谢谢=)@jjepsoumi没问题。你能用几句话阐明你为什么要这样做吗?很有可能有更好的方法来完成你想做的事情:)当然我可以:)我使用了级数展开和部分分数分解来集成一个毛茸茸的函数。我在这篇文章的早些时候得到了帮助。在方程中,我对a_k和b_k数感兴趣,这正是这段代码给我的。这里有很多步骤要解释,但所有这些工作的目的是,使用正弦二元分类器和广义线性模型来测试交叉验证和Akaike信息准则的渐近等价性。没问题,我很抱歉有一点简短的总结,但很难在这里很快解释。如果我把所有的东西都做好了,我会试着把所有的东西都写进手稿,也许会出版。这不是什么大结果,只是在一个非教科书的非教科书的好案例中测试这个理论。@jjepsomi哦,不,没关系,你没有必要详细解释,你的问题是自足的。我只是想知道这是否是XY问题,这就是为什么我问:)@AndrasDeak哦,是的,我道歉,我读最后一部分太匆忙了。我不确定canonical在这种情况下是什么意思。太好了,现在我明白了。它工作100%非常好。谢谢=)
>> simplify(frac1 == A/(B*x+C))
ans =
TRUE