如何在Matlab中求解方程组

如何在Matlab中求解方程组,matlab,Matlab,我有一组方程来定义一个系统。我不知道如何在Matlab中做到这一点,除了这是可能的,并且需要迭代 我有三个方程,其中有三个未知数(Q,T\u a\u out和T\u b\u out) 该系统分为几个子部分。在第一和最后子部分的温度信息必须被用来找到中间部分的温度。我需要每个子零件的Q、T\u a\u out和T\u b\u out 用于描述系统的方程式如下所示: 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

我有一组方程来定义一个系统。我不知道如何在Matlab中做到这一点,除了这是可能的,并且需要迭代

我有三个方程,其中有三个未知数(
Q
T\u a\u out
T\u b\u out

该系统分为几个子部分。在第一和最后子部分的温度信息必须被用来找到中间部分的温度。我需要每个子零件的
Q
T\u a\u out
T\u b\u out

用于描述系统的方程式如下所示:

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
温度?

根据您的评论,我编写了一个快速脚本,除了一些注释之外,应该可以让您从正确的方向开始

首先,你要解决的问题是非常重要的,特别是考虑到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)


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

中的初始
T_a_和
T_b_保持不变,还是在您试图找到系统解决方案时这些会发生变化?您的
cp
函数是如何定义的?这可能很重要。除了Jubobs提出的问题外,如果您还可以提供
cp
函数(代码和所有函数)的准确定义,这将有助于理解并可能解决您的问题。@rayryeng:它们保持不变。@ROLF-太好了。这让我的生活更轻松。
cp
功能如何?