【问题标题】:Matlab integrationMatlab 集成
【发布时间】:2012-05-13 01:51:34
【问题描述】:

我在 matlab 中编写了一个代码来使用 Gauss-Chebyshev 正交计算积分,但它不起作用:

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

有什么建议吗?

谢谢!!

【问题讨论】:

  • 定义“不起作用”。你要求它返回一个“int”值吗?浮点数不是更好的主意吗?您是否将该函数与 exp 或余弦集成?请解释您要做什么。
  • 我正在尝试从 -1 到 1 计算定积分 -i 乘以 int e^(x+3) / \sqrt(1-x^2),即我正在尝试整合指数函数,余弦是权重函数,它不起作用,因为matlab给出了这个错误Error: File: int.m Line: 1 Column: 27 Unexpected MATLAB expression.
  • 抱歉,“i”是负一的平方根还是循环计数器?
  • 确实 i 是复数 i= √-1
  • 这就是我的假设 - 请参阅下面的一些答案。

标签: matlab integration


【解决方案1】:

以供将来参考,这将有助于我们解决您没有将指定变量显示为常量的函数:

所以显示:

function hv= someName(firstVar, secondVar)

而不是:

function hv= someName(1, 'some string')

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

编辑:所以起初我认为,您只是为了“我们的利益”而显示该函数,现在我认为您甚至没有正确定义 Matlab 函数。请read this 了解基本的 Matlab 编码。 Chebyshev-Gauss 正交是在-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)

【讨论】:

    【解决方案2】:

    在开始之前了解答案以及函数的外观会有所帮助。以下是 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

    看看是否有帮助。

    【讨论】:

    • 当然,我知道结果,我知道 wolpramalpha 退出 ;) ,但是你知道我的代码第一行有什么问题吗?,1e^-8 是解决方案
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 2011-10-14
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多