Сортировка формулы в Mathematica по уровню производной или экспоненциальной - PullRequest
3 голосов
/ 22 февраля 2011

У меня есть уравнение импеданса, которое я передал Mathematica в надежде упростить его. Он является представителем схемы схемы, и полное сопротивление цепи (Z, от V = iZ) составляет большую часть нескольких членов в s-плоскости.

В качестве сокращенного примера это может выглядеть так:

 L0s + (R1/(1 + R1 C1 s) + R3b + L3s + V3/s)/(R2a L2a s/(R2a + L2a s))

Я хотел бы изменить данные как:

k1*s^-1 + k2*s^0 + k3*s^1 ...  

со всеми значениями k, представляющими избыточные данные (доли различных R-, L- и C-значений).

Какую формулу манипуляции лучше всего использовать для создания таких конструкций?
.
.
.
Я полагаю, что функция Collect не способна обрабатывать разделение вещей в соответствии с показателем s, даже если уравнение упрощено, а затем ExpandAll-ed из-за уровня делений между терминами - существует несколько слоев неразрешенных дробей.

Задаваясь вопросом об этом, мне также было любопытно, что, если я преобразовал все во временную область, можно ли отсортировать по простым числам (число производных / интегрированных раз)?

S c0 + c1 + d/dt*c2 + d^2/dt^2*c3 ...

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Ваша функция не является полиномом в s и s^(-1). Самое близкое, что я мог бы придумать, чтобы разобраться в вашем вопросе, это развить ваше выражение в ряды около s==0, а затем определить коэффициенты серии. Это можно сделать с помощью SeriesCoefficient:

In[80]:= SeriesCoefficient[
 L0*s + (R1/(1 + R1*C1*s) + R3b + L3s + V3/s)/(R2a*
     L2a*(s/(R2a + L2a*s))), {s, 0, n}]

Out[80]= Piecewise[{
          {(R1*((-C1)*R1)^n*(L2a - C1*R1*R2a))/(L2a*R2a), n > 1}, 
          {L0 + (C1*R1^2*(-L2a + C1*R1*R2a))/(L2a*R2a), n == 1}, 
          {((-C1)*R1^2*R2a + L2a*(L3s + R1 + R3b))/(L2a*R2a), n == 0}, 
          {V3/L2a, n == -2}, 
          {(L3s*R2a + R1*R2a + R2a*R3b + L2a*V3)/(L2a*R2a), n == -1}
         }, 0]

Надеюсь, это полезно.

1 голос
/ 22 февраля 2011

Я ничего не мог сделать с вашим исходным уравнением, и чтобы проиллюстрировать возможный полезный подход, я буду использовать следующую значительно упрощенную версию. Возможно, это совсем не то, что вам нужно.

myeqn = Expand[L0 s + (R3b + L3 s + V3/s)/(R2a L2a s/(R2a + L2a s))]

дает:

enter image description here

Select, FreeQ и MemberQ теперь могут использоваться для определения k0, k1 ... следующим образом:

k0 = Select[myeqn, FreeQ[#, s] &]

enter image description here

Аналогично:

k1 = Expand[Select[myeqn, MemberQ[#, s] &] 1/s];

km1 = Expand[Select[myeqn, MemberQ[#, 1/s] &] s];

km2 = Expand[Select[myeqn, MemberQ[#, 1/s^2] &] s^2];

Следующее теперь оценивается как True (я предполагаю, что в конечном итоге вам понадобится что-то подобное)

Expand[k0 + k1 s + km1/s + km2/s^2] == myeqn

Однако подход, данный Сашей выше , кажется намного лучше:

scoeff = SeriesCoefficient[myeqn, {s, 0, n}];

где, например,

k0alt = First@scoeff[[1, 2]] 
...