Нужна помощь в решении уравнения, которое имеет комплексные корни
Здравствуйте,уважаемые программисты! С такой проблемой к вам. Передо мной стоит задача в решении уравнения, которое имеет комплексные корни. программа которую сюда присылаю, имеет два уравнения, одно уравнение находит корни в выбранной области,методом пол_дела, второе уравнение зависит от решения первого,метод тот же используется. для первого уравнения решения выходят "хорошие", а вот для второго будут комплексные, так как нужно находить корени из отрицательных чисел. и вот тут я не знаю как быть,если есть мысли могли бы вы мне помочь,в решении моей задачи. Сразу говорю сам я толком ничего не умею программировать. Поэтому фраза сделай так-то так-то просто бесполезна,понять я понимаю,а как сделать не знаю.Огромное спасибо за внимание!
program pr;
uses crt;
var t1:text;
const a0=1E-5; ro1= 1000; ro2= 0.590; Cp1= 4216; //Cp2= 2034; lyam1= 0.680; gam= 1.3; l= 2257200; pi=3.14; p0= 1e5; T111=4967; p111=6.0716e+10; sigma= 0.05891; v= 279e-9; Rv=454; Rg=287; E=1e-8; var mg0,mg00,rov,Cp2,Z,A,value1,vT,a00,pg0,lam_TT,Lam, Lam_R,Lam_VV,Lam_T,lam_RR,lam_MM,pv0,max,Ya,betta, Ts,Ts1,Nu,laym,laym1,value:real; i:integer;
function f(a01,mg01:real):real;
begin f:= (4*pi/3)*((pv0-p0)*a01*a01*a01-2*sigma*a01*a01)+mg01*Rg*Ts1;
end;
function Y(lam,a002:real):real;
begin Y:= sqrt((lam*a002*a002*ro1*Cp1)/lyam1);
end;
function pg00(mg02,a002:real):real;
begin
pg00:=(3*mg0*Rg*Ts1)/(4*pi*a002*a002*a002);
end;
function
FF(lam,a02,mg02:real):real;
begin
FF:= ro1*a02*a02*lam*lam+4*v*ro1*lam+(3*gam*pv0*Y(lam,a 02)*Y(lam,a02)*(1+pg00(mg02,a02)/(ro2*l)))/ (gam*Y(lam,a02)*Y(lam,a02)+betta*(1+Y(lam,a02)))+3 *pg00(mg02,a02)-2*sigma/a02; end; function
pol_del1(mg_01:real):real;
var a,b,c: real;
begin a:= 0; b:= 6.6e-6; c:= (a+b)/2;
while (abs(b-a)>E) do
begin
if f(a,mg_01)*f(c,mg_01) < 0 then b:= c
else a:= c;
c:= (a+b)/2;
end;
value1:= (a+b)/2;
result:=value1;
end;
function pol_del2(res,mg_02:real):real;
var a,b,c: real;
begin a:= -1e6; b:= 1e6;
c:= (a+b)/2;
while (abs(b-a)>E) do begin
if FF(a,res,mg_02)*FF(c,res,mg_02) < 0 then b:= c
else a:= c; c:= (a+b)/2;
end;
Lam:= (a+b)/2;
result:=Lam;
end;
begin
pv0:=p0+2*sigma/a0;
vT:=lyam1/(ro1*Cp1);
Ts1:=T111/ln(p111/pv0);
mg00:=(128*sigma*sigma*sigma*pi)/(81*Rg*Ts1*(2*sigma/a0)*(2*sigma/a0));
Cp2:=gam*Rv/(gam-1);
betta:=3*(gam-1)*sqr(Cp2*Ts1/l)*((ro1*Cp1)/(ro2*Cp2));
assign(t1,'D:\данные\10 мая для устойчивого.txt');
rewrite(t1);
writeln(t1,' mg0 value1 Lam');
begin for i:=0 to 1000
do begin mg0:=i*mg00/1000;
value1:=pol_del1(mg0);
Lam:=pol_del2(value1,mg0);
writeln(t1,mg0,' ',value1,' ',Lam);
end;
close(t1);
end;
end.
Здравствуйте,уважаемые программисты! С такой проблемой к вам. Передо мной стоит задача в решении уравнения, которое имеет комплексные корни. программа которую сюда присылаю, имеет два уравнения, одно уравнение находит корни в выбранной области,методом пол_дела, второе уравнение зависит от решения первого,метод тот же используется. для первого уравнения решения выходят "хорошие", а вот для второго будут комплексные, так как нужно находить корени из отрицательных чисел. и вот тут я не знаю как быть,если есть мысли могли бы вы мне помочь,в решении моей задачи. Сразу говорю сам я толком ничего не умею программировать. Поэтому фраза сделай так-то так-то просто бесполезна,понять я понимаю,а как сделать не знаю.Огромное спасибо за внимание!
program pr;
uses crt;
var t1:text;
const a0=1E-5; ro1= 1000; ro2= 0.590; Cp1= 4216; //Cp2= 2034; lyam1= 0.680; gam= 1.3; l= 2257200; pi=3.14; p0= 1e5; T111=4967; p111=6.0716e+10; sigma= 0.05891; v= 279e-9; Rv=454; Rg=287; E=1e-8; var mg0,mg00,rov,Cp2,Z,A,value1,vT,a00,pg0,lam_TT,Lam, Lam_R,Lam_VV,Lam_T,lam_RR,lam_MM,pv0,max,Ya,betta, Ts,Ts1,Nu,laym,laym1,value:real; i:integer;
function f(a01,mg01:real):real;
begin f:= (4*pi/3)*((pv0-p0)*a01*a01*a01-2*sigma*a01*a01)+mg01*Rg*Ts1;
end;
function Y(lam,a002:real):real;
begin Y:= sqrt((lam*a002*a002*ro1*Cp1)/lyam1);
end;
function pg00(mg02,a002:real):real;
begin
pg00:=(3*mg0*Rg*Ts1)/(4*pi*a002*a002*a002);
end;
function
FF(lam,a02,mg02:real):real;
begin
FF:= ro1*a02*a02*lam*lam+4*v*ro1*lam+(3*gam*pv0*Y(lam,a 02)*Y(lam,a02)*(1+pg00(mg02,a02)/(ro2*l)))/ (gam*Y(lam,a02)*Y(lam,a02)+betta*(1+Y(lam,a02)))+3 *pg00(mg02,a02)-2*sigma/a02; end; function
pol_del1(mg_01:real):real;
var a,b,c: real;
begin a:= 0; b:= 6.6e-6; c:= (a+b)/2;
while (abs(b-a)>E) do
begin
if f(a,mg_01)*f(c,mg_01) < 0 then b:= c
else a:= c;
c:= (a+b)/2;
end;
value1:= (a+b)/2;
result:=value1;
end;
function pol_del2(res,mg_02:real):real;
var a,b,c: real;
begin a:= -1e6; b:= 1e6;
c:= (a+b)/2;
while (abs(b-a)>E) do begin
if FF(a,res,mg_02)*FF(c,res,mg_02) < 0 then b:= c
else a:= c; c:= (a+b)/2;
end;
Lam:= (a+b)/2;
result:=Lam;
end;
begin
pv0:=p0+2*sigma/a0;
vT:=lyam1/(ro1*Cp1);
Ts1:=T111/ln(p111/pv0);
mg00:=(128*sigma*sigma*sigma*pi)/(81*Rg*Ts1*(2*sigma/a0)*(2*sigma/a0));
Cp2:=gam*Rv/(gam-1);
betta:=3*(gam-1)*sqr(Cp2*Ts1/l)*((ro1*Cp1)/(ro2*Cp2));
assign(t1,'D:\данные\10 мая для устойчивого.txt');
rewrite(t1);
writeln(t1,' mg0 value1 Lam');
begin for i:=0 to 1000
do begin mg0:=i*mg00/1000;
value1:=pol_del1(mg0);
Lam:=pol_del2(value1,mg0);
writeln(t1,mg0,' ',value1,' ',Lam);
end;
close(t1);
end;
end.