我用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有什么建议吗?
谢谢!!
发布于 2012-05-13 01:22:02
为了便于将来参考,它将帮助我们了解您没有将指定变量的函数显示为常量:
所以,展示一下:
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上定义的,因此不需要在函数代码中,以下是修改后的代码:
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-12 23:41:58
在你开始之前知道答案和函数的样子是很有帮助的。下面是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
看看能不能帮上忙。
https://stackoverflow.com/questions/10564968
复制相似问题