我正在这个社区询问这个问题。如果这不正确,请告诉我以及我应该使用哪个社区。
我正在尝试使用以下方法在 Matlab 中评估积分:
int(x^(2)*sin(n*x),x)
它将返回:
(2*x*sin(n*x))/n^2 - cos(n*x)*(x^2/n - 2/n^3)
然后我想在特定值处评估该积分的结果(类似于定积分,但如果我需要插入许多不同的点,我不希望一遍又一遍地重新计算积分)。有没有办法将积分的结果存储为函数?我试过:
f = @(x) int(x^(2)*sin(n*x), x)
但是如果我想f
在 0 处求值,f(0)
尝试执行:int((0)^(2)*sin(n*0), x)
,而我希望它执行:(2*(0)*sin(n*(0)))/n^2 - cos(n*(0))*((0)^2/n - 2/n^3)
。本质上,我希望 Matlab 进行积分,然后在某个值处求值,而不必将int()
命令的结果复制并粘贴到下一行?我会将其与管道在 Linux 中,我想将int()
调用的输出通过管道传输到下一行,并将其结果评估为特定值。有办法做到这一点吗?
答案1
我使用以下方法解决了我的问题:
f = symfun(int(x^(2)*sin(n*x),x),x);
现在我可以f(0)
随心所欲地使用了。如果我想切换到数值计算,我还发现了以下内容:
fn = matlabFunction(f)
答案2
您可以通过保存已解方程的符号版本来实现这一点。
sums n x
f = sym('int(x^(2)*sin(n*x),x)')
f 现在是
(2*x*sin(n*x))/n^2 - cos(n*x)*(x^2/n - 2/n^3)
使用命令 pretty(f) 可以干净地查看。
要使用此等式获得数字答案,请使用 subs() 命令:
subs( f, [x n], [1,5])
我没有可用的 matlab 来检查我的语法,但如果这是您正在寻找的功能,它应该足以帮助您入门。