Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将符号表达式中的所有数值提取到矩阵中?_Matlab_Symbolic Math_Polynomials - Fatal编程技术网

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

我在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 - 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