2015-12-22 23 views
1

我有一個方程:w = (t-x0)*(t-x1)。我想用conv函數(conv((t-x0),(t-x1)))解決它,但它的參數是syms,它們是t,x0x1。我得到的錯誤是在Matlab conv中使用syms參數

未定義的函數'conv2'用於'sym'類型的輸入參數。

我該如何解決它的錯誤?我也希望結果是一個多項式,因爲我應該與polyint整合。

例如:

w = (t-x0)*(t-x1) --> w = t^2 - t*(x0+x1) + x0*x1 --> w=[ 1 -x0-x1 x0*x1 ] 

polyint(w) --> w= t^3/3 -t^2/2*(x0+x1) + t*x0*x1 --> w=[ 1/3 -1/2*(x0+x1) x0*x1 0 ] 
+0

我不明白這個問題。是什麼讓你認爲conv是適當的呢? – nkjt

+0

我雖然,它會是conv func。你認爲我可以做什麼以上解決方案。 –

+1

如果你只是在尋找't^3/3 +( - x0/2 - x1/2)* t^2 + x0 * x1 * t'作爲答案,那你爲什麼說你想'w = [ 1/3 -1/2 *(x0 + x1)x0 * x1 0]'?如果你想要的只是't^3/3 +( - x0/2 - x1/2)* t^2 + x0 * x1 * t'那麼它就是Matlab中的一行。我會更新我的答案以顯示此內容。 – Nasser

回答

2

我不認爲Matlab的還具有象徵性的卷積默認功能(雖然Moler先生提供了一個墊片here),但是這不是在這種情況下一個大問題,因爲如它是mentioned:「如果[輸入]是多項式係數的向量,則對它們進行卷積等於將兩個多項式相乘。」所以我們可以直接使用乘法。

>> syms t x0 x1 
>> w = (t-x0)*(t-x1); 
>> p = fliplr(coeffs(w,t)) 
    p = 
    [ 1, - x0 - x1, x0*x1] 
>> pint = polyint(p) 
    pint = 
    [ 1/3, - x0/2 - x1/2, x0*x1, 0] 
>> wint = poly2sym(pint,t) 
    wint = 
    t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t 

注意,我翻的順序從coeffs由於訂單是poly*家庭的功能

+0

謝謝你的回覆,它的正確。 –

2
clear 
syms t x0 x1; 
r = int((t-x0)*(t-x1),t); 
c = evalin(symengine,sprintf('coeff(%s, t)',char(r))); 
c0= evalin(symengine,sprintf('coeff(%s, t,0)',char(r))); 
if c0==0 
    c=[c 0]; 
end 

的反向給出了

[ 1/3, - x0/2 - x1/2, x0*x1, 0] 

更新:

它看起來OP只是想要:

syms t x0 x1; 
r=int((t-x0)*(t-x1),t) 

t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t