2012-05-12 81 views
0

我寫在MATLAB代碼來計算的整體使用高斯 - 切比雪夫正交,但它不工作:Matlab的集成

function int = chebquad('-1i*exp(x+3)',1e-8,-1,1); 
f=inline('-1i*exp(x+3)','x') 
old_int = inf; 
for n=1:1000  
    x = cos(((2*(1:n) - 1)/(2*n))*pi);  
    w = pi/n;  
    fx = f(x);  
    int = sum(w.*fx);  
    if abs(int_old-int) < tol 
     break  
    end  
    old_int = int; 
end 

有什麼建議?

謝謝!

+1

定義「不起作用」。你是否要求它返回一個「int」值?浮點數不是一個更好的主意嗎?你將函數與exp或餘弦整合了嗎?請解釋你正在嘗試做什麼。 – duffymo

+0

我正在試圖計算從-1到1的定積分-i次int e ^(x + 3)/ \ sqrt(1-x^2),也就是說我正在試圖積分指數函數,餘弦是重量函數,它不工作,因爲matlab給這個錯誤錯誤:文件:int.m行:1列:27 意外的MATLAB表達式。 – Monique

+0

對不起,是「我」等於負數的平方根還是循環計數器? – duffymo

回答

2

以供將來參考,這將幫助我們,你沒有使用指定的變量作爲常量顯示你的函數:

這樣顯示:

function hv= someName(firstVar, secondVar) 

,而不是:

function hv= someName(1, 'some string') 

我不知道你爲什麼有-1和1,但我假設tol = 1e-8。話雖這麼說,你在你的代碼犯了個小錯誤使用int_old代替old_int.

編輯:所以起初我以爲,你只顯示功能「我們的利益」,現在我想你甚至沒有定義Matlab函數正確。請致電read this,瞭解基本的Matlab編碼。切比雪夫高斯積分定義了-1 to 1,因此並不需要在功能代碼,下面是修改後的代碼:

intV = chebquad('-1i*exp(x+3)', 1e-8) 

function intV = chebquad(funC,tol) 

f=inline(funC,'x'); 
old_int = inf; 
for n=1:1000  
    x = cos(((2*(1:n) - 1)/(2*n))*pi);  
    w = pi/n;  
    fx = f(x);  
    intV = sum(w.*fx);  
    if abs(old_int - intV) < tol 
     break  
    end  
    old_int = intV ; 
end 

在命令提示符下,你把這個

+0

+1 - 尼斯答案。做得好。 – duffymo

+0

謝謝拉斯曼;) – Monique

0

它有助於瞭解答案以及開始前的功能。下面是Wolfram Alpha的說,關於你的函數:

http://www.wolframalpha.com/input/?i=+-i+*exp%28x%2B3%29%2Fsqrt%281-x%5E2%29

而這裏的答案應該是什麼:

http://www.wolframalpha.com/input/?i=int++-i+*exp%28x%2B3%29%2Fsqrt%281-x%5E2%29%2C+x%3D-1..1

看看是否有幫助。

+0

當然,我知道結果,我知道wolpramalpha退出;),但是你知道我的代碼的第一行有什麼錯嗎?,1e^-8是解決方案的準確性 – Monique