0

一个简单的问题,我想做的就是让 Solve[] 工作的方式不是求解单个变量(例如 Vo),而是求解表达式 Vo/Vi。在所有情况下,这都相当于将两边除以 Vi,因为无论如何它都会在 RHS 上抵消,但好奇是否有一种快速的方法可以做到这一点。

谢谢

编辑:这是代码

vd = 0 - V1;
VL = Solve[(V1 - Vi)/R1 + (V1 - Vo)/R2 == 0, V1][[All, 1, 2]][[1]];
VR = Solve[(Vo - V1)/R2 + (Vo - (AO*vd))/RO == 0, V1][[All, 1, 2]][[1]];
Av = Solve[VL == VR, Vo][[All, 1, 2]][[1]];
Av = Av/Vi //I add this to remove the Vi

基本上我希望它解决 Vo/Vi 问题,自动从 RHS 中删除 Vi ......

4

1 回答 1

1

您似乎正在使用V1占位符Solve来获取VLVR. V1让我们通过将VLVR直接放入这些方程来摆脱。这意味着我们还需要定义vd0 - VR

另外,让我们定义AvVo/Vi

我们可以将所有方程塞入Eliminate中,要求它消除VoViVLVRvd

In[72]:= Eliminate[
 vd == 0 - VR
  && (VL - Vi)/R1 + (VL - Vo)/R2 == 0
  && (Vo - VR)/R2 + (Vo - (AO*vd))/RO == 0
  && VL == VR
  && Av == Vo/Vi,
 {Vo, Vi, vd, VL, VR}]

Out[72]= Av (1 + AO + R2/R1 + RO/R1) == (-AO R2 + RO)/R1 && R1 != 0 &&
  R2 != 0 && RO != 0

这与我们想要的非常接近,但还没有完全解决Av,所以我们也这样做:

In[73]:= Solve[
 Eliminate[
  vd == 0 - VR
   && (VL - Vi)/R1 + (VL - Vo)/R2 == 0
   && (Vo - VR)/R2 + (Vo - (AO*vd))/RO == 0
   && VL == VR
   && Av == Vo/Vi,
  {Vo, Vi, vd, VL, VR}],
 Av]

Out[73]= {{Av -> (-AO R2 + RO)/(R1 + AO R1 + R2 + RO)}}

如果您想实际定义符号Av,我们可以使用/.( ReplaceAll) 来实现:

In[80]:= Av =.; Av = Av /. Solve[
    Eliminate[
     vd == 0 - VR
      && (VL - Vi)/R1 + (VL - Vo)/R2 == 0
      && (Vo - VR)/R2 + (Vo - (AO*vd))/RO == 0
      && VL == VR
      && Av == Vo/Vi,
     {Vo, Vi, vd, VL, VR}],
    Av][[1]];

In[81]:= Av

Out[81]= (-AO R2 + RO)/(R1 + AO R1 + R2 + RO)
于 2013-04-26T04:16:13.397 回答