如何解决Matlab方程组

时间:2015-03-16 14:16:38

标签: matlab

我有一套定义系统的方程式。我不知道如何在Matlab中执行此操作,除了可能的事实,并且需要迭代。

我有三个具有三个未知数的方程(QT_a_outT_b_out)。

系统分为几个子部分。必须使用有关第一个和最后一个子部件中温度的信息来查找中间子部件的温度。我需要为每个子部分QT_a_outT_b_out

System description

用于描述系统的公式如下:

Q=U*((T_a_out-T_b_in)+(T_a_in-T_b_out))/2
Q=m_a*(cp_a_in*T_a_in-cp_a_out*T_a_out)
Q=m_b*cp_b*(T_b_out-T_b_in)

这些参数是已知的:

Initial T_a_in (110)
Initial T_b_in (5)
U
m_a
m_b
n (number of sub-parts)
cp_b

cp值是它所属温度的函数:

cp_a_in is a function of the temperature: cp_a_in=function_a(T_a_in)
cp_a_out is a function of the temperature: cp_a_out=function_a(T_a_out)

初始a值(110)的值高于最后一个子部分中的最终b_out温度。初始b_in值(5)的值低于最终a_out值。

如何在Matlab中计算每个子部件的out温度?

1 个答案:

答案 0 :(得分:0)

根据您的评论我已经整理了一个快速的脚本,可以让您从正确的方向开始 - 除了一些注释。

首先,你要解决的问题并不重要,特别是考虑到Cp(T)是高度非线性的,并且最重要的是在临界点附近偏离。

此外,认识到H = CpdT,并且您正在使用REFPROP,更精确的计算将是H(T_out) - H(T_in),其将包含温度效应。

话虽如此,通过写出你的质量平衡,你可以制定一个非线性方程组来解决,如下所示。由于我无法解决您对UA的使用问题,我只是在“有效因素”中进行了替换。随意使用您选择的约定(例如,NTU)来填补它。

我提醒您,我在下面发布的内容不完整。这是一个起点,需要考虑几个问题:

我正在指定n-2温度变量,同时提供n方程式,这意味着可能会满足边界Ta_end = Tb_end(如果运行它并绘制图形,您将看到我的意思)。这也可能导致温度不连续作为阶段的函数。

根据您的压力和流体,如果您正在进行一阶相变,您可能会遇到一些奇怪的数值问题。

如果你可以假设恒定的热容量,你可以将下面的矩阵重新形成一个更容易和可解决的系统。我提供了这个更复杂的例子作为起点。

function Tf = gen_mat
n = 10; % Number of stages 
A = zeros(n,2*n+2); % Coefficients matrix.

ma = 10; % Mass flow of A.
mb = 5;  % Mass flow of B.
eff = 1.0; % Effectiveness factor.
Te(1) = 383.15; % Inlet T of A.
Te(2) = 278.15; % Inlet T of B.
P = 15000; % P (kPa)

% Generate guesses 
Ti = linspace(Te(1),Te(2),n+1)';
Tg = zeros(2*n+1,1);
for i=1:n+1
    Tg(2*i-1) = Ti(i);
    Tg(2*i) = Ti(i);
end
Tg([1,2*n+1]) = []; % We are only interested in the middle sections.

% construct coefficient matrix.
for i=1:n
    A(i,2*i-1) = -ma;
    A(i,2*i) = eff*mb;
    A(i,2*i+1) = ma;
    A(i,2*i+2) = -eff*mb;
end

% solve system of nonlinear equations
Tf = fsolve(@(T)obj_fxn(T,A,P,Te), Tg, optimset('Display', 'iter'));
Tf = [Te(1);Tf;Te(2)]; % Append temperatures.
end

function b = obj_fxn(T,A,P,Te)
T = [Te(1); T; Te(2)];
for i=1:2:length(T)-1
    x(i) = refpropm('H','T',T(i),'P',P,'CO2');
    x(i+1) = refpropm('H','T',T(i+1),'P',P,'water');
end
b = A*x';
end

您可以像以下一样运行上面的原始图表:plot(0:10,Tf(1:2:end)-273,10:-1:0,Tf(2:2:end)-273)

很抱歉这不是更有条理,但我希望它有所帮助。