化学反应式配平(整数规划的应用)
【北太天元软件上做化学反应式的配平】 https://www.bilibili.com/video/BV1cv4y1o7Xi/?share_source=copy_web&vd_source=2adc5aa7a702b808eb8b31dbd210f954
北太天元数值计算通用软件的脚本如下:
%化学反应
% 4K4Fe(CN)6 + 30KMnO4 + 82H2SO4 → 46KHSO4 + 2Fe2(SO4)3 + 30MnSO4 +24HNO3 + 24CO2 + 47H2
% 假设我们不知道上面的化学反应式的系数,该如何求呢?
% 这是一个化学反应式配平的问题。
% 如何配平上面的化学反应式,需要求的正整数解,而且整数解是不唯一的,
% 要求最小的那个正整数解
% 北太天元数值计算通用软件上的脚本
load_plugin("optimization");
opts = struct();
opts.Display = 'off';
% K4Fe(CN)6+KMnO4+H2SO4 → KHSO4+Fe2(SO4)3+MnSO4+HNO3+CO2+H2
%系数总共有 9 , 我们的目标函数设定为这个9个系数之和,
f = ones(1,9);
% 化学元素包括
% K F C N M H S O
X1 = [4 1 6 6 0 0 0 0]
X2 = [1 0 0 0 1 0 0 4]
X3 = [0 0 0 0 0 2 1 4]
Y1 = [1 0 0 0 0 1 1 4]
Y2 = [0 2 0 0 0 0 3 12]
Y3 = [0 0 0 0 1 0 1 4]
Y4 = [0 0 0 1 0 1 0 3]
Y5 = [0 0 1 0 0 0 0 2]
Y6 = [0 0 0 0 0 2 0 0]
A = [X1',X2',X3'] % 左边
b = [-Y1',-Y2',-Y3',-Y4',-Y5',-Y6'] %右边
AA = sparse([A,b]);
rl = 0;
ru = 0;
cl = 1;
cu = [];
intcon = [1:9]
% intcon表示这9个决策变量均取整数
%整数规划
[x,fval] = intlinprog_hgs(f,intcon,AA,rl,ru,cl,cu,opts)