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

4 views (last 30 days)
kazuma kaneda
kazuma kaneda on 25 Jan 2022
Commented: kazuma kaneda on 4 Feb 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);

Answers (1)

Hernia Baby
Hernia Baby on 25 Jan 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 Comment
kazuma kaneda
kazuma kaneda on 4 Feb 2022
回答,ありがとうございます.処理時間が大変速くなりました.

Sign in to comment.

Tags

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!