level 2
公式:
rtp = (0.1*2/3) + 2;
ltp = (75*2/3)*10^-3;
ctp = ((6*15)/244)*10^-3;
idc = NDSolve[{500000 - 1/ctp \!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(t\)]\(i[
t] \[DifferentialD]t\)\) == (0.3 + ltp) i'[t] + rtp i[t],
i[0] == 3000}, i[t], {t, 0, 0.02}]
idcjx = NDSolve[{-(i[t]/ctp) == (0.3 + ltp) i''[t] + rtp i'[t],
i[0] == 3000, 500000 == (0.3 + ltp) i'[0] + rtp i[0]},
i[t], {t, 0, 0.02}]
2024年02月16日 10点02分
2
吧务
level 10
NDSolve不解积分方程。它本不该返回任何结果,这里之所以返回了错误的结果,是因为i[t]中的t被代入了数值。比如对于t=0.01时,方程中的积分实际上是Integrate[i[0.01], {t, 0, 0.01}]。也就是说这个积分相当于被换成了t i[t]。
你可以自己写一个更简单的积分方程来验证我的解释。
这来源于数学记号上的一种陋习:因为我们能够分辨积分变量的作用域,所以我们可以在积分变量和积分限上用不同含义的同一字母。而MMA语言的设计者并未刻意照顾这种陋习(当然他们照顾了一些别的陋习)。
2024年02月17日 19点02分
4
根据MSE 217201,问题应该上出在预处理环节,而非数值计算环节。
2024年02月18日 10点02分
稍微补充几句。层主所说的大部分都是对的,但是“Integrate[i[0.01], {t, 0, 0.01}]”这里不对。NDSolve内部被积的其实是“Integrate[i, {t, 0, 0.01}]”,没错,自变量部分被拿掉了,这个跟NDSolve的预处理机制有关系,具体内容比较复杂,所以,还请参考(层主已经提到的)MSE 217201。
2024年03月02日 03点03分
再多说一句。因为与此完全相同的理由,目前NDSolve是完全无法处理分数阶微分方程的,因为形如CaputoD[y[x], {x, 1/2}]的式子会被预处理成CaputoD[y, {x, 1/2}],然后计算为0。
2024年03月02日 03点03分