计算一个矩阵的指数积分
11次浏览(过去30天)
显示旧的注释
我想对一个矩阵的指数积分
(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更适合这种情况。
我附上我的代码和数据。非常感谢您的帮助
提前谢谢你
接受的答案
大卫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)];
结束
结束