info@matlabiran.ir

خانه » محاسبات عددی » کد آماده الگوریتم بیرستو

کد آماده الگوریتم بیرستو

الگوریتم بیرستو (Bairstow) یک الگوریتم مبتنی بر تکرار برای پیدا کردن ریشه های یک چند جمله ای است. این الگوریتم نسبت به الگوریتم نیوتن رافسون سرعت همگرایی بیشتر و محاسبات نسبتا کمتری دارد.

در مورد روش کار الگوریتم بیرستو را می توانید اینجا ببینید.

همچنین مثال های مختلف از حل مسائل با الگوریتم بیرستو اینجا موجود است.

 

 

دریافت محصول

 

clear
clc
close all

%% Input
a=[1 0 -1 -1 0 0 -1]; % Input Polynominal

r=0.1; % Initial Value for “r”
s=0.1; % Initial Value for “s”
epsilon=0.001; % Convergence Criteria
MaxIt=100; % Maximun Number of Iterations

n=length(a);
b=zeros(1,length(a));
c=zeros(1,length(a));

while n>3
a=a;
n=length(a);
b=zeros(1,length(a));
c=zeros(1,length(a));
for it=1:MaxIt
n=length(a);
b=zeros(1,length(a));
c=zeros(1,length(a));
for i=3:n
b(1)=a(1);
b(2)=a(2)-r*b(1);
b(i)=a(i)-r*b(i-1)-s*b(i-2);
end
for i=3:n-1
c(1)=b(1);
c(2)=b(2)-r*c(1);
c(i)=b(i)-r*c(i-1)-s*c(i-2);
end

R_up=[b(n) b(n-1); c(n-2) c(n-3)];
R_down=[c(n-2) c(n-3); c(n-1)-b(n-1) c(n-2)];
S_up=[b(n-1) b(n); c(n-2) c(n-1)-b(n-1)];
S_down=R_down;

deltaR=-det(R_up)/det(R_down);
deltaS=-det(S_up)/det(S_down);

if abs(deltaS/s)<=epsilon && abs(deltaR/r)<=epsilon
root1=(-r+sqrt(r^2-4*s))/2;
root2=(-r-sqrt(r^2-4*s))/2;

a=deconv(a,[1 -root1]);
a=deconv(a,[1 -root2]);

out(it,3)=root1;
out(it,4)=root2;
break
end

s=s+deltaS;
r=r+deltaR;
out(it,1)=s;
out(it,2)=r;
end
out
a
disp(‘———————————-‘)
n=length(a);
end

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.