0

Gauss-Chebyshev quadrature を使用して積分を計算するコードを 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

助言がありますか?

ありがとう!!

4

2 に答える 2

2

今後の参考のために、指定された変数を定数として関数を表示しなかったことがわかります。

だからショー:

function hv= someName(firstVar, secondVar)

ではない:

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

-1 と 1 の両方がある理由はわかりませんが、tol = 1e-8 と仮定しています。そうは言っても、int_old代わりに使用してコードに小さな間違いを犯しましたold_int.

編集:最初は「私たちの利益」のために関数を表示しただけだと思っていましたが、今ではMatlab関数を適切に定義していなかったと思います。これを読んで、基本的な Matlab コーディングについて学んでください。チェビシェフ・ガウス求積は で定義されて-1 to 1いるため、関数コードに含める必要はありません。以下は改訂されたコードです。

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

コマンド プロンプトで、これを次のように呼び出します。

intV = chebquad('-1i*exp(x+3)', 1e-8)
于 2012-05-12T17:22:01.737 に答える
0

始める前に、答えと関数がどのように見えるかを知るのに役立ちます。WolframAlphaがあなたの関数について言っていることは次のとおりです。

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

それが役立つかどうかを確認してください。

于 2012-05-12T15:41:58.103 に答える