2015-06-22 29 views
2

我有以下代碼:如何正常化一個分數中的多項式係數?

syms z 
Gc=1.582*(1-0.3679*z^-1)/(1+.418*z^-1); 
Ghp=.3679*(z^-1)*(1+.718*z^-1)/((1-z^-1)*(1-.3679*z^-1)); 
T=(Gc*Ghp)/(1+Gc*Ghp); 
clipboard('copy', latex(simplifyFraction(T))); 

導致以下爲T

enter image description here

我怎樣才能恢復正常的係數?即我想要分子中的z 和分子中的z有1的係數。 在Matlab中有這樣的功能嗎?

+0

我要說的是,你需要一個歸一化係數,像'b_0'。但是,如果你決定去尋找符號,這可能不起作用。然後matlab會以小數來回答,並會盡量避免小數。如果你增加小數點,分數會更長。你有使用符號的特殊原因嗎? – patrik

回答

1

您可以用numden提取分子和分母,然後使用coeffs獲得它們的係數,對多項式進行歸一化並再次進行分割。

[n,d] = numden(T); 
cn = coeffs(n); 
cd = coeffs(d); 
T = (n/cn(end))/(d/cd(end)); 

latex(T)輸出(注:沒有simplifyFraction現在,它會毀掉的東西):

output

如果您喜歡在小數形式係數,使用vpa(T):這裏是latex(vpa(T))

vpa


當然上面的是不是等於你原來的分數,因爲我實際上由cd(end)/cn(end)倍增。根據你的目的,你可以

  • 保持不變係數cn(end)/cd(end)分別在您的計算,或
  • 使用(cn(end)/cd(end))*((n/cn(end))/(d/cd(end)));把它回。不幸的是,Matlab是太急於將兩個部分結合成一體,但你仍然可以看到歸一化的多項式。

new image

+0

很好!我不知道numden。一個小提示:在這個例子中的分子乘以2910089,我不相信你的輸出。 – dd3

+1

感謝您的指針;我擴大了我的答案。當然,在將兩個前導係數都改爲1之後,分數不能與原始分數保持相同。 – 2015-06-23 01:20:11

+0

@Idisagree謝謝。我對你的第一個符號感到高興。我怎樣才能讓matlab評估分子和分母中的所有數值分數?即我想我的分子是z + 0.658 – Bababarghi

相關問題