0

我在 matlab 中编写了一个代码来使用 Gauss-Chebyshev 正交计算积分,但它不起作用:

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 编码。Chebyshev–Gauss 正交定义在 上-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

在开始之前了解答案以及函数的外观会有所帮助。以下是 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

看看是否有帮助。

于 2012-05-12T15:41:58.103 回答