与可变限制集成,并输入任何功能

时间:2019-08-21 11:17:07

标签: matlab

我正在尝试评估不同函数的积分。我希望代码能对我输入的任何给定函数起作用,以评估积分。积分是关于变量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)整数(tau,t,sin)

     

IDE试用版中的错误> @(tau)f_int(tau,t)

     

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

     

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

     

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

     

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

     

IDE试用版中的错误> @(t)积分(@(tau)f_int(tau,t),xmin,xmax)

     

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

我意识到我不能在不传递任何参数的情况下仅将sin放入函数中,并且可能有一种更好的方法。无论如何,有没有修复代码以使其能够完成工作?任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分: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已经是一个句柄,因此您无需添加@