シンボリック代入(subs)の速さについて

8 visualizaciones (últimos 30 días)
kazuma kaneda
kazuma kaneda el 25 de En. de 2022
Comentada: kazuma kaneda el 4 de Feb. de 2022
以下のように、関数S1(t)をω積分で求めるために被積分関数の分母を因数分解し、部分分数分解をするプログラムを書きました。
S1(t)を求めたあと、subsを用いて新たにTを代入し、S2とするのですが代入の家庭で非常に時間がかかります。
時間を短縮する代入やり方や、因数分解・部分分数分解で短縮できるプロセスがあれば教えていただきたいです。
syms e w t
A=5;m=1;s=1;wA=1;c=10^-10;
%分母の関数を因数分解
eqn=w.^2+(-m-wA+(sqrt(2).*s+c)*1i).*w+(m-(sqrt(2).*s+c).*1i).*wA-sqrt(2).*A.*s==0;
sols=simplify(solve(eqn,w));
%部分分数分解
F=partfrac((w-m+(sqrt(2)+c)*1i)./((w-sols(1)).*(w-sols(2))),w,"FactorMode","full");
S1(t)=(1i./2*pi).*int(F*exp(-1i.*w.*t),w,-100,100);
T=0:0.10:10;
S2=subs(S1,t,T);

Respuestas (1)

Hernia Baby
Hernia Baby el 25 de En. de 2022
matlabFunction をご使用ください
syms e w t
A=5;m=1;s=1;wA=1;c=10^-10;
%分母の関数を因数分解
eqn=w.^2+(-m-wA+(sqrt(2).*s+c)*1i).*w+(m-(sqrt(2).*s+c).*1i).*wA-sqrt(2).*A.*s==0;
sols=simplify(solve(eqn,w));
%部分分数分解
F=partfrac((w-m+(sqrt(2)+c)*1i)./((w-sols(1)).*(w-sols(2))),w,"FactorMode","full");
S1(t)=(1i./2*pi).*int(F*exp(-1i.*w.*t),w,-100,100);
T=0:0.10:1;
% tic
% S2=subs(S1,t,T);
% toc
F = matlabFunction(S1)
F = function_handle with value:
@(t)pi.*integral(@(w)-exp(t.*w.*-1i).*((1.0./sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*(sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*4.503599627370496e+15+6.369051672976133e+15i))./(w.*-9.007199254740992e+15+sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*4.503599627370496e+15+9.007199254740992e+15-6.369051672976133e+15i)-(1.0./sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*(sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*4.503599627370496e+15-6.369051672976133e+15i))./(w.*9.007199254740992e+15+sqrt(sqrt(2.0).*2.0e+1-2.000000000282843).*4.503599627370496e+15+-9.007199254740992e+15+6.369051672976133e+15i)),-1.0e+2,1.0e+2).*5.0e-1i
S3=zeros(length(T),1);
tic
for ii = 1:length(T)
S3(ii)= F(T(ii));
end
toc
Elapsed time is 0.117461 seconds.
S3
S3 =
4.9348 - 0.0314i 9.7661 - 0.9534i 8.3829 - 1.7123i 6.9307 - 2.1489i 5.2207 - 2.1851i 3.2816 - 1.8259i 1.6940 - 1.1247i 0.1885 - 0.1828i -0.8428 + 0.8724i -1.5013 + 1.9115i -1.8325 + 2.8118i
  1 comentario
kazuma kaneda
kazuma kaneda el 4 de Feb. de 2022
回答,ありがとうございます.処理時間が大変速くなりました.

Iniciar sesión para comentar.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!