首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab集成

Matlab集成
EN

Stack Overflow用户
提问于 2012-05-12 23:21:05
回答 2查看 1.7K关注 0票数 0

我用matlab编写了一段代码,使用高斯-切比雪夫求积来计算积分,但它不起作用:

代码语言:javascript
复制
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

有什么建议吗?

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-13 01:22:02

为了便于将来参考,它将帮助我们了解您没有将指定变量的函数显示为常量:

所以,展示一下:

代码语言:javascript
复制
function hv= someName(firstVar, secondVar)

而不是:

代码语言:javascript
复制
function hv= someName(1, 'some string')

我不知道为什么同时有-1和1,但我假设tol = 1e-8。也就是说,您使用int_old而不是old_int.在代码中犯了一个小错误

编辑:所以一开始我认为,你只是为了“我们的利益”而显示函数,现在我认为你甚至没有正确地定义Matlab函数。请使用read this并学习基本的Matlab编码。切比雪夫-高斯求积是在-1 to 1上定义的,因此不需要在函数代码中,以下是修改后的代码:

代码语言:javascript
复制
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

在命令提示符下,可以使用以下命令调用此命令:

代码语言:javascript
复制
intV = chebquad('-1i*exp(x+3)', 1e-8)
票数 2
EN

Stack Overflow用户

发布于 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

看看能不能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10564968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档