【发布时间】:2018-09-19 03:28:43
【问题描述】:
我正在尝试在 Matlab 和 Mathematica 中计算软件无法以符号方式执行的函数的积分。
到目前为止,这是我的 MatLab 代码,但我知道它可能不是很有帮助。
f = @(t) asin(0.5*sin(t));
a = @(t) sin(t);
F = int(f,t) % Matlab can't do this
F =
int(asin(sin(t)/2), t)
A = int(a,t) % This works
A =
-cos(t)
dt = 1/(N-1); % some small number
for i=1:N
F(i) = integral(f,(i-1)*dt,i*dt);
A(i) = integral(a,(i-1)*dt,i*dt);
end
for 循环中的两个计算都给出了f 或a 的粗略近似值,而不是它们乘以dt 后的积分。
在数学堆栈交换中,我发现了一个question,它为一点积分推导了一个有限差分之类的方法。但是,当我在 Matlab 中进行计算时,它会输出一个缩小版本的f,这在绘制后很明显(见上文,我所说的缩小是什么意思)。我认为这是因为对于较小的间隔,积分基本上以不同程度的准确度近似函数(再次参见上文)。
我正在尝试获得积分的符号方程,或者每个位置的函数积分的近似值。
所以我的问题是如果我有一个函数 f ,MatLab 和 Mathematica 不能轻易地取积分
-
除了默认的积分计算器,我可以直接用积分计算器近似积分吗? (
int,integral,trapz)
或
- 我可以先用有限差分逼近函数,然后符号地求积分吗?
【问题讨论】:
-
你是什么意思“除了默认的” - 你将什么归类为默认求解器,为什么你认为它们不起作用?最简单的数值积分器是 Matlab 中的
trapz,为什么这不起作用?如果您的限制是不确定的(在这种情况下您不能用数字评估任何东西),您的预期输出是什么? -
我解释了为什么它们不起作用,积分间隔太小,除了您输入计算器的函数之外,无法输出任何东西。
-
请附上minimal reproducible example。我们无法运行您当前的代码来产生您得到的任何非结果,并且您没有建议预期的输出可能是什么。你能举一个例子,其中被积函数可以代数积分,所以我们可以验证任何结果?
-
我不知道为什么你不能运行提供的代码,这并不难。但我做了一些修改,应该会让你更容易。
标签: matlab wolfram-mathematica