如何从符号表达式中提取所有数值到矩阵?

时间:2018-02-12 12:36:40

标签: 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 - 1.7i
     0 + 0.57i     -1 + 1.1559i

另请注意,A应包含数字,而不是poly所包含的符号表达式。

我读过coeffs - 函数,但它要求输入是多项式。 使用children - 函数,我能够将符号表达式中的求和项除以符号表达式的向量,如下所示:

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)]

1 个答案:

答案 0 :(得分:7)

让我先说一下,我真的不知道你想用它做什么。但是,只要您的表达式遵循此严格形式(即public function scopeFilterLanguage($query, $language_id) { if (!$language_id || intval($language_id) != LanguageConstants::ARABIC_LANGUAGE_ID) { return $query; } return $query->join('translator_translations', function($join) { $join->selectSub(function($q) { $q->where('t.locale' => 'ar') $q->where('t.namespace', '*') $q->where('t.item', 'like', $this->ref . '%') }, 't'); })->on('t.item', '=', substr($this->ref_translation, 14, 26)) ->select('t.text', 'ref'); } 形式的分数之和),您就可以解决问题的解决方案。

我将使用您的示例输入(重命名为A/(x+B),以便不影响名为pol的函数):

poly

首先,使用children将其分成两部分:

x = sym('x');
pol = -2i/(x - 1.0 - 1.7i) + 0.57i/(x - 1.0 + 1.1559i);

现在,使用numden分解一个分数:

fractions = children(pol);
frac1 = fractions(1);

现在,我们的格式为[n,d] = numden(frac1); A = n; 的一小部分,其中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
相关问题