经验贴:论文中的数学公式都是怎么靠代码实现的?MATLAB运算时间长怎么解决?包含不增序列卷积,复杂公式等

本文详细展示了如何使用MATLAB处理复杂的卷积公式和导热分析问题,包括通过转化到z域利用filter函数求解,以及采用三次样条离散化方法。在遇到计算效率低下的问题时,提出了减少for循环使用以提高运算速度的建议,并给出了具体的代码示例。此外,还讨论了迭代法在求解方程组中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经验贴:论文中的数学公式都是怎么靠代码实现的?MATLAB运算时间长怎么解决?包含不增序列卷积,复杂公式等

卷积公式

在这里插入图片描述
最简单的方法是将其转化到z域,依靠MATLAB工具箱filter,fftfilt函数进行求解 [1]。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

复杂公式

先引入正问题一个半无限大导热分析解(表面温度阶跃+杜哈梅变化)。
在这里插入图片描述
可惜的是时域往往不能求解,需要先用三次样条离散化。
在这里插入图片描述
其中在这里插入图片描述
得到离散形式:
在这里插入图片描述
其中在这里插入图片描述
在这里插入图片描述
怎么样,这个够复杂了吧,下面贴出代码:

t=csvread('t.csv');
T=csvread('T1.csv');
tt=t(1):0.00001:t(end)
T=interp1(t,T,tt,'spline')
t=tt
pp=csape(t,T)   %默认的边界条件,Lagrange边界条件,求取三次样条结构(断点,系数等) 
format long g
coefs=pp.coefs   %显示每个区间上三次多项式的系数
q=zeros(size(t))
M=1
i=1
Z=0
O=0
C1=5708.74 %常数求取规则不纠结了哈 
for M=1:7000
O=(coefs(M,3)+coefs(M,2)*2*(t(M+1)-t(M))+coefs(M,1)/3*(t(M+1)-t(M))^2)*(t(M+1)-t(M))^0.5-(coefs(M,2)*2+coefs(M,1)*6*(t(M+1)-t(M)))/3*(t(M+1)-t(M))^1.5+coefs(M,1)*6/10*(t(M+1)-t(M))^2.5
for i=1:M-1
Z=Z+(coefs(i,3)+coefs(i,2)*2*(t(M+1)-t(i))+coefs(i,1)*3*(t(M+1)-t(i))^2)*((t(M+1)-t(i))^0.5-(t(M+1)-t(i+1))^0.5)-(coefs(i,2)*2+coefs(i,1)*6*(t(M+1)-t(i)))/3*((t(M+1)-t(i))^1.5-(t(M+1)-t(i+1))^1.5)+coefs(i,1)*6/10*((t(M+1)-t(i))^2.5-(t(M+1)-t(i+1))^2.5)
end
q(M+1)=2*C1*Z+2*C1*O
O=0
Z=0
end

再引入一个反问题,这个主要是求解表面热流或者温度的6 [2]。在这里插入图片描述在这里插入图片描述
贴代码了哈:

%控制容积法逆问题求热流 
a=1.194E-4  %注意是铜膜 
k=400 %注意是铜膜
C1=zeros(size(t))
C2=zeros(size(t))
E=0.00001  %深度
qs=zeros(size(t))
DTF1=zeros(size(t))
DTF2=zeros(size(t))
DTF3=zeros(size(t))
DTF4=zeros(size(t))
DQF1=zeros(size(t))
DQF2=zeros(size(t))
DQF3=zeros(size(t))

dtf1=(diff(T,1)*10000)   %701步即0.0001s为步长 
dtf1=dtf1'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf1)
    DTF1(j)=dtf1(j)
end

dtf2=(diff(T,2)*10000)   %701步即0.0001s为步长 
dtf2=dtf2'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf2)
    DTF2(j)=dtf2(j)
end

dtf3=(diff(T,3)*10000)   %701步即0.0001s为步长 
dtf3=dtf3'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf3)
    DTF3(j)=dtf3(j)
end

dtf4=(diff(T,4)*10000)   %701步即0.0001s为步长 
dtf4=dtf4'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf4)
    DTF4(j)=dtf4(j)
end

dqf1=(diff(q,1)*10000)   %701步即0.0001s为步长 
dqf1=dqf1'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dqf1)
    DQF1(j)=dqf1(j)
end

dqf2=(diff(q,2)*10000)   %701步即0.0001s为步长 
dqf2=dqf2'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dqf2)
    DQF2(j)=dqf2(j)
end

dqf3=(diff(q,3)*10000)   %701步即0.0001s为步长 
dqf3=dqf3'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dqf3)
    DQF3(j)=dqf3(j)
end

qs=q+k*((E/a*DTF1)+(19/108*E^3/a^2*DTF2)+(2/243*E^5/a^3*DTF3)+(1/8748*E^7/a^4*DTF4))
   +0.5*E^2/a*DQF1+1/27*E^4/a^2*DQF2+1/1458*E^6/a^3*DQF3
   


%控制容积法逆问题求温度 
a=1.194E-4  %注意是铜膜 
k=400 %注意是铜膜
E=0.00001  %深度
Ts=zeros(size(t))
DTF1=zeros(size(t))
DTF2=zeros(size(t))
DTF3=zeros(size(t))
DQF1=zeros(size(t))
DQF2=zeros(size(t))

dtf1=(diff(T,1)*10000)   %701步即0.0001s为步长 
dtf1=dtf1'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf1)
    DTF1(j)=dtf1(j)
end

dtf2=(diff(T,2)*10000)   %701步即0.0001s为步长 
dtf2=dtf2'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf2)
    DTF2(j)=dtf2(j)
end

dtf3=(diff(T,3)*10000)   %701步即0.0001s为步长 
dtf3=dtf3'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dtf3)
    DTF3(j)=dtf3(j)
end

dqf1=(diff(q,1)*10000)   %701步即0.0001s为步长 
dqf1=dqf1'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dqf1)
    DQF1(j)=dqf1(j)
end

dqf2=(diff(q,2)*10000)   %701步即0.0001s为步长 
dqf2=dqf2'  %只限于第一次运行,因为df是行需要化成列
for j=1:length(dqf2)
    DQF2(j)=dqf2(j)
end

Ts=T+0.5*E^2/a*DTF1+1/27*E^4/a^2*DTF2+1/1458*E^6/a^3*DTF3+q*E/k
   +4/27*E^3/a/k*DQF1+1/243*E^5/a^2/k*DQF2

迭代

迭代真的蛮有意思,其实就是只要我们获取两个关于同一个变量的方程组,就可以把这个变量一直逼近于同时满足这两个方程组的一个值,尽管初值可能离收敛值相差较大。迭代收敛规则一般是迭代次数达到要求或者残差小于预设误差值。

比如如下两个公式:
在这里插入图片描述
就可以得到变量q的迭代方程组:

for i=1:100 
    q=csvread('q.csv')
	T0=fftfilt(q,DT0i) %上文已经提到,卷积过程
	T0=T0./1000000 %注意卷积过程和实际需要的值带来的倍率 
	q=ag*(Tg-q*h)
	plot(T0)
	max(T0)
end

MATLAB运算速度慢怎么办

个人体会,请尽可能减少for语句的使用吧!成效不是十倍这么简单!

参考文献

[1]: Taler J. Theory of transient experimental techniques for surface heat transfer[J]. International Journal of Heat and Mass Transfer, 1996, 39(17): 3733-3748.
[2]: Sahoo N, Peetala R K. Transient surface heating rates from a nickel film sensor using inverse analysis[J]. International Journal of Heat and Mass Transfer, 2011, 54(5-6): 1297-1302.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值