나는 계속 분수를 포함하는 방정식을 가지고 있습니다. 방정식의 매개 변수 인 모든 R에 대해이 방정식의 특정 근원을 찾고 싶습니다. MATLAB로 다항식으로이 계속 분수 코드를 어떻게 최적화 할 수 있습니까?
- 입력 :이 내가 들어 관심이있는 사람
내가 가진 문제는 높은 R은 더 높은 정확도를 요구하므로 더 많은 레벨이 필요하다는 것입니다. 계속 분수의, 그러나 나의 컴퓨터는 다량을 계산할 수 없다 (나는 i7 제 3 세대 12 기가 바이트 램 노트북 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 세가 필요합니다.
편집 :
eqn=simplify(eqn);
여기서 상징적 인 수학의 요점은 무엇입니까? – Bernhard
'roots()'함수는 근원을 계산하기 위해 다항식 계수를 취합니다. 내 식은 단순화가 필요했기 때문에 상징적 인 표현을 사용했습니다. 나는'solve()'를 시도했지만, 그것은 나에게 무언가의 뿌리를주고 나는 숫자가 필요하다. –