-1

私は、連続分数を含む方程式を持っています。私は方程式のパラメータであるすべてのRに​​ついてこの方程式の特定の根を見つけたいと思っています。この私のためにコードを最適化するにはどうすればよいですか?

  • 入力多項式として、この連分数MATLAB
  • 計算に表現
  • のすべての根をこのpolynomiumを簡素化し、最終的に私は「ルートを検索します興味があります。

私が問題にしているのは、高いRは高い精度を必要とするためです私のコンピュータはそれほど計算できません(私は第3世代の12GBラムラップトップ2コアを持っています)。

並列計算またはGPU計算を使用してこの式を計算する機会はありますか?コードを最適化できますか?または、これらのルーツを計算するために他のコンピューティングプログラムを使用します。

%% 
clear; close all; clc; 
%% 
syms R; 
Z=1; E=1; P1=sqrt(2*E); 
m=0; 
c=m+1; d=c; a=-1i*Z/P1+m+1; t=-2*1i*P1*R; 
n=20; 
%A, B, C koeficientebis gansazgvra 
for k=0:n 
    A(k+1)=(k+1)*(k+c); 
    B(k+1)=-k*(k-1+t+c+d); 
    C(k+1)=t*(k-1+a); 
end 
syms x; 
for i=1:n 
    P(i)=x; 
    Q(i)=x; 
end 
% gantolebis chawera 
for k=1:n-2 
    if k==1 
     P(k)=(-C(k+1)); 
     Q(k)=(B(k+1)-x); 
    elseif k==2 
     P(k)=-C(k)*(B(k+1)-x); 
     Q(k)=(B(k)-x)*(B(k+1)-x)+(-A(k)*C(k+1)); 
    else 
    P(k)=(B(k+1)-x)*P(k-1)+(-A(k)*C(k+1))*P(k-2); 
    Q(k)=(B(k+1)-x)*Q(k-1)+(-A(k)*C(k+1))*Q(k-2); 
    end 
end 
    eqn(x)=-x*Q(n-2)+P(n-2); 
    eqn=simplify(eqn); 
    eqn(R)=eqn; 
    R=0.1:0.1:9; 
    R=double(R); 
    eqn=eqn(R); 
    ros(:,1)=R; 
    for i=1:length(R) 
     coef(i,:)=flip(double(coeffs(eqn(i)))); 
     ros(i,2:n)=roots(coef(i,:)); 
    end 
for i=0:n-1 
    plot(R,real(ros(:,n-i)),R,imag(ros(:,n-i)));hold on; 
end 

私のコンピュータは、n = 35のときに計算が可能で、時間が少し必要です。しかし、私は50-60になるためにはnのようにする必要があります。

EDIT:可能な場合は、ループを回避することにより、コードを最適化してみ

eqn=simplify(eqn); 
+0

ここで象徴的な数学のポイントは何ですか? – Bernhard

+0

関数 'roots()'は根を計算するために多項式の係数を取ります。私の方程式はそれを単純化する必要があり、そのため記号表現を使用しました。私は 'solve()'を試みましたが、それは私に何かの根を与え、私は数が必要です。 –

答えて

0

:問題は、中にラムの使用状況のようです。

k=0:n; 
A(k+1)=(k+1).*(k+c); 
B(k+1)=-k.*(k-1+t+c+d); 
C(k+1)=t.*(k-1+a); 

私は乗算でドットを追加したノートに(*):このようにあなたのようにそれを書くことができ

%A, B, C koeficientebis gansazgvra 
for k=0:n 
    A(k+1)=(k+1)*(k+c); 
    B(k+1)=-k*(k-1+t+c+d); 
    C(k+1)=t*(k-1+a); 
end 

:インスタンスA、BおよびCの場合 は、互いに依存しません行列乗算を避ける。

+0

応答してくれてありがとうが、私の主な問題は、 'n'が大きければ時間がかかり、RAMが十分でないときの方程式を単純化することです。 –

+0

だから "eqn = simplify(eqn);"問題ですか?その後、コードの初期段階で単純化し、最後にもう一度単純化してみてください。 – Solstad

関連する問題