我在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)]
答案 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