2017-03-22 33 views
1

即時通訊工作八度不知道它是否會在matlab中運行,即時通訊試圖做一個簡單的拉格朗日多項式,繪製點,函數和lagrange aproximation,所以我做了以下,非一致性參數拉格朗日多項式(倍頻程)

clear all 
clc 

function [y] = lagrange(x, x0, y0) 

    n = size(x0,1); 
    y = 0; 

    for i=1:n 
     p = 1; 
     for j=1:n 

      if j == i % avoiding division by 0 
       continue; 
      endif; 

      p *= (x-x0(j))/(x0(i)-x0(j)); 

     endfor; 

     y += y0(i) * p; 
    endfor; 
endfunction; 

x=[0:0.1:5]; 

x0=[2;2.75;4]; 
y0=[1/2;1/2.75;1/4]; 

y=lagrange(x,x0,y0); 

我有以下問題,「運算符*:不符合標準參數(OP1是1x41,OP2是1x41)」 x中使用載體時,如果我嘗試和評估例如拉格朗日僅出現(3 ,x0,y0),該功能正常工作,並且沒有問題,問題在於當您使用較大的x向量時,

S我的問題是,有沒有辦法可以修改函數,以便能夠使用更大的向量x,或者有一種方法可以直接在函數中使用較大的向量來繪製函數?

+0

如果你能告訴我們錯誤發生在哪一行,它會有所幫助。我相信錯誤信息應該告訴你。我的猜測是發生在'p * ='行。對於不一致的參數在兩個事物的大小相同的情況下有問題,它必須是一個矩陣乘法,它需要m乘n n n乘p。 –

+0

哦,是的,我很抱歉,是的,錯誤是在'p * ='行 – Zigisfredo

回答

1

p *= (x-x0(j))/(x0(i)-x0(j)); 

裝置

p = p * (x-x0(j))/(x0(i)-x0(j)); 

這*表示矩陣乘法,和一個不能乘兩個矩陣(1,41)和(1,41):內部尺寸做不匹配。

你需要什麼就有什麼的elementwise乘法,

p = p .* (x-x0(j))/(x0(i)-x0(j)); 

(爲區別的解釋見docs)。

它可以寫成

p .*= (x-x0(j))/(x0(i)-x0(j)); 

但我建議避免這種收縮;在Matlab/Octave中,它的用處不如其他一些語言,可能是因爲將兩個操作數並排放置會使二進制操作選擇中的錯誤更加明顯。

+0

我看,謝謝你的回答,真的有幫助。 – Zigisfredo

+0

有趣。據我所知,元素賦值操作符在八度中沒有記錄。至少我沒有在操作員文檔頁面上看到這一點,但快速測試顯示它按照您所描述的方式工作。我相當肯定Matlab不支持算術/賦值運算符。 –