我在 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
有什么建议吗?
谢谢!!
为了将来的参考,它会帮助我们解决您没有将指定变量作为常量显示的函数:
所以显示:
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)
在开始之前了解答案以及函数是什么样的会很有帮助。以下是 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
看看是否有帮助。