计算一个矩阵的指数积分

11次浏览(过去30天)
raha艾哈迈迪
raha艾哈迈迪 2021年7月20日
评论道: raha艾哈迈迪2021年7月22日
我想对一个矩阵的指数积分 (E= exp (Mmat.*(t0-t)))。首先 “expm” MATLAB内置函数 复杂度为N^3阶;而我的矩阵是一个循环矩阵,所以我可以用一个定理来代替,使复杂度为 NlogN;
算法为:
(在此算法中, E=exp(A) A是一个矩阵)
通过这个算法,我可以很容易地计算一个矩阵的exp,但我现在的问题是计算 这个函数的积分 我的意思是
负载filem.mat
t0 = 1的军医;
Mmatt = @ (t) Mmat。* (t0-t);
col1 = Mmatt (: 1);
FFtcol1 = fft (col1);
expFF = exp (FFtcol1);
expMt =传输线(expFF);exp的第一列(mt)
expMmat (: 1) = expMt;
x = 2:322
expMmat(:,x) = circshift(expmdelta,x-1,1);
结束
有趣= expMmat *质素;
f =积分(有趣,0,1的军医,“ArrayValued”,真正的);
我不知道怎么把它定义为一个函数。我可以用handle函数或者 函数定义在一个单独的文件代码,但我怎么能这样做。也 我可以在matlab中使用内置积分函数。
此外,我认为我有另一种选择,计算每次函数的量,并使用trapz函数进行积分,但我认为Integral更适合这种情况。 我附上我的代码和数据。非常感谢您的帮助
提前谢谢你
4评论
raha艾哈迈迪
raha艾哈迈迪 2021年7月21日
亲爱的Toresten,谢谢你的回复。我的矩阵通常是稀疏的,inv函数真的很低效。虽然我使用了其他算法,但我得到了不合适的答案。致以最诚挚的问候

登录评论。

接受的答案

大卫Goodmanson
大卫Goodmanson 2021年7月20日
编辑:大卫Goodmanson 2021年7月20日
嗨raha,
我认为你可以用下面的方法,在特征值层面上做积分,微分等等。我对它很随意,通过拼接创建了循环矩阵,当然,对于大型矩阵,这必须加以改进。
T = 4;
M1 = 2*rand(5,1)-1
M = circ(m1)
expM = expM (M*t)
%计算N = expm(M*t)
c1 = M(:,1);
Lam = fft(c1);
Lamfun = exp(lam*t);
I1 = ifft(lamfun);
N = circ(i1)
马克斯(abs (N-expM), [],“所有”%检查应该很小
%计算D = D /dt expm(M*t)
c1 = M(:,1);
Lam = fft(c1);
Lamfun = (exp(lam*t)).*lam;
I1 = ifft(lamfun);
D = circ(i1)
max(abs(D - M*expM),[],“所有”
max(abs(D - expM*M),[],“所有”
%计算I = Int expm(M*t) dt(不定积分)
c1 = M(:,1);
Lam = fft(c1);
Lamfun = (exp(lam*t))./lam;
I1 = ifft(lamfun);
I = circ(i1)
马克斯(abs(我* M -expM), [],“所有”
马克斯(abs (M *我-expM), [],“所有”
函数M = circ(m1)
通过列的圆移位创建循环矩阵
N = size(m1,1);
M = m1;
K = 1:n-1
M = [M circshift(m1,k,1)];
结束
结束
3评论
raha艾哈迈迪
raha艾哈迈迪 2021年7月22日
听你这么说我很高兴。算法的参考是这个我同意你的算法是非常有用的。我希望你一切都好,当然再次感谢你:)

登录评论。

更多答案(0)

s manbetx 845


释放

R2018b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!