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)integrand(tau,t,sin)
IDE 试用错误>@(tau)f_int(tau,t)
积分计算/迭代标量值错误(第 314 行)fx = FUN(t);
积分计算/vadapt 中的错误(第 132 行)[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
积分计算错误(第 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
输入函数而不传递任何参数,并且可能有更好的方法来做到这一点。无论如何要修复代码以便它可以完成这项工作?任何帮助都会很棒。谢谢!
解决方案
您可以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
已经是句柄,因此您无需添加@
.
推荐阅读
- javascript - How to scroll to bottom of page using JavaScript when accordion control is used in asp.net?
- amazon-web-services - AWS Cognito 用户池强制注销
- ubuntu - Display a window through docker container
- python - Python decrypted text is different every time I decrypt
- html - 网页上的内部链接在 Chrome 中不起作用
- r - How to create a file path in R
- automated-tests - 401 - Unauthorized in cypress io auto testing
- python - 将记录数组的元素转换为空列表的变量名
- html - Angular 6 is setting my element to display: none
- react-native - Change header color on overview screen. (React Native)