内存不足:解决刚性常微分方程

Three views (the last 30 days)
颯太小濱
颯太小濱 2021年8月18日
回答: Wan Ji 2021年8月18日
亲爱的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。
谢谢你的帮助。

接受的答案

Wan Ji
Wan Ji 2021年8月18日
你好!这个直接把
The options = odeset (矢量化的,“上”,“JPattern”,jpattern (N));
改写成
The options = odeset (矢量化的,“上”);
就可以了,因为你给出的颂歌方程的 Jpattern function cannot copy someone else's, so simply don't have to, this calculation can also get the desired result quickly.
1评论
颯太小濱
颯太小濱 2021年8月23日
非常感谢你。我立即试了一下,果然有效。
非常感谢。我试着它立即工作。

登录置评。

更多的答案(0)

类别

Find more on编程帮助中心The and文件交换

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

Start Hunting!