我正在使用 Matlab 进行恒温热线风速测量。所以我使用二阶微分方程(传导方程)。
我解析解了主方程并发现了温度分布:
f=0.09;
b=0.0044;
q=3.73E-9;
L=1;
Tw=250;
Tam=27;
T(x)= 2*C1*cosh(x*((f-b*g)/q)^0.5)+g/(f-b*g)
那么
C1
必须根据边界条件确定:
T(+L/2)=0
T(-L/2)=0
然后我发现
C1
作为 g
的函数(因为 g
隐式未知):
syms c g
solve(2*c*cosh(0.5*(0.09-0.0044*g)/3.73*10^-9)^0.5+g/(0.09-3.73*10^-9*g)==0,c)
g
可以从恒温条件确定:
1/L*int(T(x)dx,-L/2,L/2)=Tw-Tam
考虑到所有事情,我的所有代码是:
clc;
clear all;
f=0.09;
b=0.0044;
q=3.73*10^-9;
L=1;
Tw=250;
Tam=27;
syms c g
c=solve(2*c*cosh(L/2*(0.09-0.0044*g)/3.73*10^-9)^0.5+g/(0.09-0.0044*3.73*10^-9)==0,c)
syms x
z=int(2*c*cosh(x*((f-b*g)/q)^0.5)+g/(f-b*g),x,-L/2,L/2);
g=solve(z==L*(Tw-Tam),g)
此条件在执行积分后应给出
g
的代数方程。但结果 g
为零。它始终将 g
返回为零。为什么?我的 Matlab 技能对此还不够。然后我想绘制温度分布 T(x)。 x
可以分为 100 个长度 L
来绘制温度分布。
我没有得到零(假设我现在的方程是正确的)。也许你没有正确地替换你的价值观。您可以使用
subs
函数自动执行此操作:
f = 0.09;
b = 0.0044;
q = 3.73e-9;
L = 1;
Tw = 250;
Tam = 27;
syms c x g
T = 2*c*cosh(x*((f-b*g)/q)^0.5)+g/(f-b*q);
c = solve(subs(T,'x',L/2)==0,c);
z = simplify(int(subs(T,'c',c),x,-L/2,L/2));
g = solve(z==L*(Tw-Tam),g)
返回
g =
20.135660961656472105004196502187
您可以使用
double
将其转换为浮点数。您可以检查 g
的值是否确实解出了您的方程:
eval(subs(z-L*(Tw-Tam),'g',g))
返回
0
。