2012-05-12 39 views
0

我写在MATLAB代码来计算的整体使用高斯 - 切比雪夫正交,但它不工作: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 

有什么建议?

谢谢!

+1

定义“不起作用”。你是否要求它返回一个“int”值?浮点数不是一个更好的主意吗?你将函数与exp或余弦整合了吗?请解释你正在尝试做什么。 – duffymo

+0

我正在试图计算从-1到1的定积分-i次int e ^(x + 3)/ \ sqrt(1-x^2),也就是说我正在试图积分指数函数,余弦是重量函数,它不工作,因为matlab给这个错误错误:文件:int.m行:1列:27 意外的MATLAB表达式。 – Monique

+0

对不起,是“我”等于负数的平方根还是循环计数器? – duffymo

回答

2

以供将来参考,这将帮助我们,你没有使用指定的变量作为常量显示你的函数:

这样显示:

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,因此并不需要在功能代码,下面是修改后的代码:

intV = chebquad('-1i*exp(x+3)', 1e-8) 

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 

在命令提示符下,你把这个

+0

+1 - 尼斯答案。做得好。 – duffymo

+0

谢谢拉斯曼;) – Monique

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

看看是否有帮助。

+0

当然,我知道结果,我知道wolpramalpha退出;),但是你知道我的代码的第一行有什么错吗?,1e^-8是解决方案的准确性 – Monique