在matlab/mathematica中对不定积分进行数值计算,但不能用符号表示
我试图在Matlab和Mathematica中计算一个函数的积分,而这个软件不能象征性地完成 这是到目前为止我的MatLab代码,但我知道它可能没有多大帮助在matlab/mathematica中对不定积分进行数值计算,但不能用符号表示,matlab,wolfram-mathematica,Matlab,Wolfram Mathematica,我试图在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
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
后的积分
在数学堆栈交换中,我发现了一个类似于有限差分的方法,可以在某一点上导出积分。然而,当我在Matlab中进行计算时,它输出了一个缩小版的f
,这在绘图后很明显(我所说的缩小的意思见上文)。我认为这是因为对于较小的区间,积分基本上以不同的精度近似函数(再次参见上文)
我试图得到一个积分的符号方程,或者函数在每个位置的积分的近似值
所以我的问题是,如果我有一个函数f,MatLab和Mathematica很难对它进行积分
int
,integral
,trapz
)你的代码很好只是
for i=1:N
F(i) = integral(f,0,i*dt);
end
你也可以这样做
F(1)=integral(f,0,dt)
for i=2:N
F(i) = F(i-1)+integral(f,(i-1)*dt,i*dt);
end
第二种选择肯定更有效
因为原语实际上是F(x)=int(F(x),0,x)(0定义了一个常数),对于足够小的dx,你已经证明了F(x)=int(F(x),x,x+dx)/dx i。您已经证明了MATLAB intégral函数的作用
例如,让我们假设=如果您希望计算,上面的函数将进行计算,只需将上面的0替换为您喜欢的常量a
现在你应该得到包含离散化的
F
,一般来说,公认的答案是目前为止最好的方法,我会说,但是如果函数的某些限制是允许的,那么还有第二种方法
有关两个功能f
和g
的信息,请参见下文
T = 1; % Period
NT = 1; % Number of periods
dt = 0.01; % time interval
time = 0:dt:NT*T; % time
syms t
x = K*sin(2*pi*t+B); % edit as appropriate
% f = A/tanh(K)*tanh(K*sin(2*pi*t+p))
% g = A/asin(K)*asin(K*sin(2*pi*t+p))
找到的公式
MATLAB可以计算n为整数时的sin^n(t)
F = int(f,t);
phi = double(subs(F,t,time));
G = int(g,t);
psi = double(subs(G,t,time));
“除了默认解算器”是什么意思?您将什么划分为默认解算器?为什么您认为它们不起作用?最简单的数值积分器是Matlab中的trapz,为什么不能工作?如果你的极限是不确定的(在这种情况下你不能用数字计算任何东西),你的预期输出是什么?我解释了为什么它们不起作用,积分间隔太小,除了你输入计算器的函数外,不能输出任何东西。请包括一个。我们无法运行您当前的代码来生成您得到的任何非结果,您也没有建议预期的输出可能是什么。你能举一个被积函数可以进行代数积分的例子,这样我们就可以验证结果了吗?我不知道你为什么不能按照提供的那样运行代码,这并不困难。但我做了一些编辑,这应该会让你更容易。我知道
int
“做得很好”。也许我的方法是错误的,但是如果我积分f(x),积分应该像一个变换。函数不是指数函数,因此f(x)不等于int(f,x)。您是否尝试过修复我的问题(将(i-1)dt替换为0)?我只是说f(x)=int(f(x),x,x+dx)/dx,当dx到zéro时,这就是你在没有固定点的情况下观察到的。不,我没有,但原因是我想移动积分的区间。从0:dt
,到T-dt:T
。有道理吗?我等会再试试,谢谢。我暂时不能回答。谢谢你最终接受了这个答案。明天我将删除我的评论。
N = 60;
for k=2:N
a1 = (2^(2*k)-1)*2^(2*k)*bernoulli(2*k)/factorial(2*k);
f = f + A1/tanh(K1)*a1*x^(2*k-1);
a2 = factorial(2*k)/(2^(2*k)*factorial(k)^2*(2*k+1));
g = g + A2/asin(K2)*a*x^(2*k+1);
end
F = int(f,t);
phi = double(subs(F,t,time));
G = int(g,t);
psi = double(subs(G,t,time));