Matlab 集成

问题描述 投票:0回答:2

我在 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

有什么建议吗?

谢谢!!

matlab numerical-integration
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)

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

看看是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.