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

共回答了17个问题采纳率:82.4%

提供两种解法供参考. 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代替.

1年前

追问

4

868505151

用第二种方法求:

3ed02404040d1285d4db85a8c6cc6a43.png

出现了问题。

我用的是 MATLAB R2010b,能否帮助解决一下,谢谢!

868505151

我现在有点疑惑,积分上下限(0,0.25)究竟是指x,还是指x^2?

之前我理解为x,但现在觉得,也许之前理解错了。

868505151

嗯,是x^2

868505151

数值积分的函数在被积函数为常数时的确会出问题。原因是,在计算数值积分时,如果输入参数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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值