قسمتی از کدها رو اشتباه نوشتید، من برنامه خودتون رو با مرتب کردن و تصحیح فواصل مربوط به حلقه ها در اینجا میارم (حالا میگم اشتباه در کجاست) :
اگر به حلقه while n>=3 دقت کنید، متوجه می شوید که دو end برای آن نوشته اید (دو end در پایان حلقه). بنابراین شما باید دوباره کل فرمول ها و روند برنامه نویسی رو چک کنید.
در ضمن، میشه مقادیری که گفتید رو به صورت دستی در برنامه نوشت که مرتب مجبور به وارد کردن آنها نباشید، من این کار رو کردم و همچنین مقداری کدها رو تغییر دادم تا متوجه بشید در حلقه while چه اتفاقی میفته (این کد تصحیح شده نیست و تنها مقادیر را به صورت دستی در برنامه نوشته ایم) :
کد:
disp('Polynominal Equation: a1.X^(n)+ a2.X^(n-1)+ ….+an.X^(0)');
disp('Quadratic factor: x^2-rx-s');
n=input('Polynominal degree, n=');
for i=1:n+1
a(i)=input(['a',num2str(i),'=']);
end
r=input(' Please insert value of r=');
s=input(' Please insert value of s=');
tol=input('Tolerance for error=');
k=1;
z=1;
ite=0;
while n>=3;
e=1;
while e>tol;
ite=ite+1;
for i=1:n+1;
if i==1;
b(i)=a(i);
c(i)=b(i);
else if i==2;
b(i)=a(i)+r*b(i-1);
c(i)=b(i)-r*c(i-1);
else
b(i)=a(i)+r*b(i-1)+s*b(i-2);
c(i)=a(i)-r*c(i-1)-s*c(i-2);
end
end
end
denom=c(n-1)^2-c(n)*c(n-2);
if denom==0;
r=r+1;
s=s-1;
E=1;
else
delr=(-b(n)*c(n-1)+b(n+1)*c(n-2))/denom;
dels=(-b(n+1)*c(n-1)+b(n)*c(n))/denom;
e=abs((delr)+(dels));
r=r+delr;
s=s+dels;
end
end
disp(['Quadratic factor at ',num2str(z),' =x^2-',num2str(r),'x-',num2str(s)]);
x1=(r+(r^2+4*s)^(1/2))/2;
x2=(r-(r^2+4*s)^(1/2))/2;
disp('The result is');
disp(['x',num2str(k),'=',num2str(x1)]);
disp(['x',num2str(k+1),'=',num2str(x2)]);
z=z+1;
k=k+2;
n=n-2;
v=[1 -r -s];
m=deconv(a,v);
a=m;
end
if mod(n,2)==1;
x3=-a(2)/a(1);
disp(['x',num2str(k),'=',num2str(x3)]);
else
x4=(-a(2)+(a(2)^2-4*a(3))^(1/2))/2;
x5=(-a(2)-(a(2)^2-4*a(3))^(1/2))/2;
disp(['x',num2str(k),'=',num2str(x4)]);
disp(['x',num2str(k+1),'=',num2str(x5)]);
end
disp(['Actual tolerance for error= ', num2str(e)]);
disp(['Iteration number= ', num2str(ite)]);
اگر به حلقه while n>=3 دقت کنید، متوجه می شوید که دو end برای آن نوشته اید (دو end در پایان حلقه). بنابراین شما باید دوباره کل فرمول ها و روند برنامه نویسی رو چک کنید.
در ضمن، میشه مقادیری که گفتید رو به صورت دستی در برنامه نوشت که مرتب مجبور به وارد کردن آنها نباشید، من این کار رو کردم و همچنین مقداری کدها رو تغییر دادم تا متوجه بشید در حلقه while چه اتفاقی میفته (این کد تصحیح شده نیست و تنها مقادیر را به صورت دستی در برنامه نوشته ایم) :
کد:
clear all
close all
clc
disp('Polynominal Equation: a1.X^(n)+ a2.X^(n-1)+ ….+an.X^(0)');
disp('Quadratic factor: x^2-rx-s');
n=5; % input('Polynominal degree, n=');
a=[1 2 3.25 0.01 -0.36 1];
r=-1; % input(' Please insert value of r=');
s=-1; % input(' Please insert value of s=');
tol=0.002; % input('Tolerance for error=');
k=1;
z=1;
ite=0;
disp('-------------------------')
while n>=3;
disp('in while loop')
e=1;
while e>tol;
ite=ite+1;
for i=1:n+1;
if i==1;
b(i)=a(i);
c(i)=b(i);
else if i==2;
b(i)=a(i)+r*b(i-1);
c(i)=b(i)-r*c(i-1);
else
b(i)=a(i)+r*b(i-1)+s*b(i-2);
c(i)=a(i)-r*c(i-1)-s*c(i-2);
end
end
end
disp('-------------------------')
denom=c(n-1)^2-c(n)*c(n-2)
if denom==0;
r=r+1;
s=s-1;
E=1;
else
delr=(-b(n)*c(n-1)+b(n+1)*c(n-2))/denom
dels=(-b(n+1)*c(n-1)+b(n)*c(n))/denom
e=abs((delr)+(dels));
r=r+delr;
s=s+dels;
end
end
r
s
disp('-------------------------')
disp(['Quadratic factor at ',num2str(z),' =x^2-',num2str(r),'x-',num2str(s)]);
x1=(r+(r^2+4*s)^(1/2))/2;
x2=(r-(r^2+4*s)^(1/2))/2;
disp('The result is');
disp(['x',num2str(k),'=',num2str(x1)]);
disp(['x',num2str(k+1),'=',num2str(x2)]);
z=z+1;
k=k+2;
n=n-2;
v=[1 -r -s];
m=deconv(a,v);
a=m;
end
if mod(n,2)==1;
x3=-a(2)/a(1);
disp(['x',num2str(k),'=',num2str(x3)]);
else
x4=(-a(2)+(a(2)^2-4*a(3))^(1/2))/2;
x5=(-a(2)-(a(2)^2-4*a(3))^(1/2))/2;
disp(['x',num2str(k),'=',num2str(x4)]);
disp(['x',num2str(k+1),'=',num2str(x5)]);
end
disp(['Actual tolerance for error= ', num2str(e)]);
disp(['Iteration number= ', num2str(ite)]);
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.