Matlab 以任何函数作为输入,与可变极限进行集成

Matlab 以任何函数作为输入,与可变极限进行集成,matlab,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 = @(t

我试图计算不同函数的积分。我希望代码能够对我输入的任何给定函数计算积分。积分是关于变量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
它显示了以下错误

使用输入参数不足时出错

IDE试验中出错>@(tau,t)被积函数(tau,t,sin)

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

integralCalc/IterateScalavalue中的错误(第314行) fx=乐趣(t)

integralCalc/vadapt中的错误(第132行) [q,errbnd]= 迭代CalarValued(u、tinterval、pathlen)

积分计算错误(第75行) [q,errbnd]=vadapt(@AtoBInvTransform,interval)

积分错误(第88行)Q=积分计算(fun、a、b、opstruct)

IDE试验>@(t)积分中出错(@(tau)f_int(tau,t),xmin,xmax)

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


我意识到我不能在不传递任何参数的情况下将
sin
放在函数中,可能有更好的方法。是否有任何方法来修复代码,使其能够完成工作?任何帮助都会很好。谢谢

您可以使用
@
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
已经是一个句柄,因此不需要添加
@