【问题标题】:Integrating with variable limits with any functions being the input与可变限制集成,任何函数为输入
【发布时间】:2019-12-26 15:52:55
【问题描述】:

我正在尝试评估不同函数的积分。我希望代码能够工作,以便对于我输入的任何给定函数,它都会评估积分。积分是关于变量 tau 的,并且在被积函数中还有另一个参数 t。

我尝试先定义被积函数,然后将其传递给积分函数。

integrand = @(tau,t,f0) double(t./(1.+tau).*double(f0(tau))); %tau is the independent variable, t is a parameter, and f0 is the function to be integrated
f_int = @(tau,t) integrand(tau,t,sin) %substitute f0 with sin 
integrate = @(t) integral(@(tau) f_int(tau,t),xmin,xmax)  %this part does the integration depending on t 

integrate(1) %integrate with t=1

它显示以下错误。

错误使用 sin 没有足够的输入参数。

IDE试用报错>@(tau,t)integrand(tau,t,sin)

IDE试用报错>@(tau)f_int(tau,t)

integralCalc/iterateScalarValued 中的错误(第 314 行) fx = FUN(t);

integralCalc/vadapt 中的错误(第 132 行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

integralCalc 中的错误(第 75 行) [q,errbnd] = vadapt(@AtoBInvTransform,interval);

积分错误(第 88 行)Q = integralCalc(fun,a,b,opstruct);

IDE试用报错>@(t)integral(@(tau)f_int(tau,t),xmin,xmax)

IDE 试用中的错误(第 29 行)集成(1)

我意识到我不能在不传递任何参数的情况下将sin 放入函数中,并且可能有更好的方法来执行此操作。无论如何要修复代码以便它可以完成这项工作?任何帮助都会很棒。谢谢!

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以使用@sin 或任何其他函数作为函数句柄传递:

    integrand = @(tau,t,f0) double(t./(1.+tau).*double(f0(tau))); 
    f_int = @(tau,t) integrand(tau,t,@sin) %substitute f0 with sin
    

    或者先创建一个匿名函数,然后直接传它的句柄:

    fun = @(t) exp(t)*sin(t); % some combination of functions 
    
    integrand = @(tau,t,f0) double(t./(1.+tau).*double(f0(tau))); 
    f_int = @(tau,t) integrand(tau,t,fun) %substitute f0 with fun
    

    由于fun 已经是句柄,您无需添加@

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2018-10-07
      • 2020-07-14
      • 1970-01-01
      • 2021-08-29
      • 2021-01-21
      • 2020-12-25
      相关资源
      最近更新 更多