作业帮 > 综合 > 作业

MATLAB中计算定积分时可否将一个函数作为积分变量?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 07:21:43
MATLAB中计算定积分时可否将一个函数作为积分变量?
比如说我想计算:

其定积分确实可用图像求得,但是可否用MATLAB代码实现计算,
提供两种解法供参考. 1、解析解法作变量置换t=1/x,则积分上限为1,下限为inf:>> syms x t
>> f=(1+1/x)^x/x;
>> f_t=subs(f,x,1/t);
>> int(f_t,inf,1)
ans =
-Inf代码在2007b和2013a上实测通过. 2、数值解法直接对关于x的函数1/x求微分,但得到的函数表达式用解析方法无法得到显式解,所以,使用数值方法积分:>> syms x
>> f=(1+1/x)^x/x;
>> f_x=eval(['@(x)' vectorize(f*diff(1/x))]);
>> integral(f_x,0,1)
ans =
  -Inf其中integral是2012a版之后才引入的函数,早期的版本可以使用quadgk代替.
再问: 用第二种方法求:出现了问题。我用的是 MATLAB R2010b,能否帮助解决一下,谢谢!
再答: 我现在有点疑惑,积分上下限(0,0.25)究竟是指x,还是指x^2?之前我理解为x,但现在觉得,也许之前理解错了。
再问: 嗯,是x^2
再答: 数值积分的函数在被积函数为常数时的确会出问题。原因是,在计算数值积分时,如果输入参数x是向量,被积函数一般是x的点运算形式,其返回的函数值应该也是向量,但如果函数的形式是标量常数,则返回的函数值只是一个标量,所以会导致错误。 避免这个错误的方法是,对于常数形式的函数,给额外加上一项与x有关的项,使之能够返回和输入相同维数的向量:>> syms x
>> f=1/(2*x);
>> f_x=eval(['@(x)x*0+' vectorize(f*diff(x^2))]);
>> quadgk(f_x,0,sqrt(0.25))
ans =
    0.5000