内存不足:解决刚性常微分方程
Three views (the last 30 days)
显示旧的评论
亲爱的matlab用户。
我有内存不足的问题。
函数brussode (N)
如果输入参数个数< 1
N = 100;
结束
tspan = [0;10);
y0 = [repmat (0.9, 1, N);repmat (100200 1, N)];
The options = odeset (矢量化的,“上”,“JPattern”,jpattern (N));
[t、y] = ode15s (@f tspan, y0,选项);
u = y(1:2,::结束);
X = (1, N)/(N + 1);
p = y(: 2:2:结束);
图;
The plot (x, u (end, :))
图;
情节(x, p(最终,:))
函数dydt = f (~, y)
A = 0.0002 / N;
b = 3.55 * 10 ^ 4;
C = 2.39 * 10 ^ 5;
k = 3 * 10 ^ -12;
dydt = 0 (2 * N,大小(y, 2));% preallocate dy / dt
i = 1;
:dydt(我)= 1/2 / ^ 2 / b * ((k * (y(我:)。^ 3 + y(我+ 2,:)。^ 3))。* ((y (i + 3:) - y(我+ 1,))+ + 19206 * (1.417 * (y(我+ 2,)- y(我,:))-2.12 * ((1 y(我,:))。^ 2 - (1 y(我+ 2,))^ 2)+ 1.263 * ((1 y(我,:))。^ 3 - (1 y(我+ 2,))^ 3)))。* y(我:)-1.29 * 10 ^ 9 * a * b * 2);
Dydt (I + 1, :) = 1/2 / (a ^ 2 / c * * (k ((1 - y (I, :)). ^ 3 + (1 - y (I + 2, :)). ^ 3). * (y (I + 3, :) - y (I + 1, :)))) * y (I + 3, :) + 0.1 / y (I + 1, :) * a * c * 2);
%评估函数的两部分,内部网格点。
我= 3:2:2 * n - 3;
:dydt(我)= 1/2 / ^ 2 / b * ((k * (y(我:)。^ 3 + y(我+ 2,:)。^ 3))。* ((y (i + 3:) - y(我+ 1,))+ 19206 * (1.417 * (y(我+ 2,)- y(我,:))-2.12 * ((1 y(我,:))。^ 2 - (1 y(我+ 2,))^ 2)+ 1.263 * ((1 y(我,:))。^ 3 - (1 y(我+ 2,))^ 3)))。* y(我:)——(k * (y(我2:)。^ 3 + y(我:)。^ 3))。* ((y(我+ 1,)- y(张,:))+ 19206 * (1.417 * (y(我:)- y(:我2))-2.12 * ((1 y(:我2))^ 2 - (1 y(我:))^ 2)+ 1.263 * ((1 y(我2,:))。^ 3 - (1 y(我,:))。^ 3)))。* y(:我2));
Dydt (I + 1, :) = 1/2 / (a ^ 2 / c * * (k ((1 - y (I, :)). ^ 3 + (1 - y (I + 2, :)). ^ 3). * (y (I + 3, :) - y (I + 1, :)))) * y (I + 3, :) - (k * ((1 - y (I - 2, :)). ^ 3 + (1 - y (I, :)). ^ 3)). * (y (I + 1, :) - y (I - 1, :)) * y (I + 1, :));
我= 2 * n - 1;
Dydt (I, :) = 1/2 / a ^ 2 / b * (1.29 * 10 ^ 9 * a * b * 2 - (k * (y (I - 2, :). ^ 3 + y (I, :). ^ 3)). * (((I + 1, :) - y y (I - 1, :)) + 19206 * (1.417 * (y (I, :) - y (I - 2, :)) - 2.12 * ((1 - y (I - 2, :)) ^ 2 - (1 - y (I, :))) ^ 2 + 1.263 * ((1 - y (I - 2, :)). ^ 3 - (1 - y (I, :)). ^ 3)))) * y (I - 2, :));
Dydt (I + 1, :) = 1/2 / a ^ 2 / c * (0.1 / y (I + 1, 2 - (k) * a * c * * ((1 - y (I - 2, :)). ^ 3 + (1 - y (I, :)). ^ 3)). * (y (I + 1, :) - y (I - 1, :)) * y (I + 1, :));
;
结束
结束
函数S = jpattern (N)
%雅可比矩阵稀疏模式
B = 1 (2 * N, 5);
B (2:2:2 * N, 2) = 0 (N, 1);
B (1:2:2 * N - 1, 4) = 0 (N, 1);
S = spdiags (B, 2:2, 2 * N, 2 * N);
结束
请让我知道我需要改变下计算300 gb。
谢谢你的帮助。