在 Matlab 中隐式求解数值积分

问题描述 投票:0回答:1

我正在使用 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
来绘制温度分布。

matlab symbolic-math numerical-integration
1个回答
0
投票

我没有得到零(假设我现在的方程是正确的)。也许你没有正确地替换你的价值观。您可以使用

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

© www.soinside.com 2019 - 2024. All rights reserved.