回来再顶~Delphi没有提供开立方根的函数,但提供了对数函数,所以 var Rel:real showmessage(floatToStr(Power(Rel,1/3)));
abc都确定的情况下用二分法解该方程
参考:var m,n,s:real; function Test(x:real):real; begin result:=power(x,3)+2*power(x,2)+3*x+4 ; end; begin m:=100; n:=-100; while m-n>1E-5 do begin s:=(m+n)/2; if Test(s)*Test(m)<0 then n:=s else m:=s; end; showmessage(format('%f,%f',[s,test(s)])); end;
列举(枚举)法 枚举(enumerate)法是基于计算机运算速度快这一特性的一种使用非常普遍的思维方法。它是根据问题中的条件将可能的情况一一列举出来分析求解的方法。但有时一一列举出的情况数目很大,如果超过了我们所能忍受的范围则需要考虑如何去排除不合理的情况,尽可能减少列举的问题可能解的数目。例:求一元三次方程的解。有形如:ax3+bx2+cx+d=0一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行上输出这三个实根。这道题的解法很多,最为简洁的方法就是直接枚举可能的实根解。var a,b,c,d:real;i:integer;function f(x:real):real;begin f:=a*x*x*x+b*x*x+c*x+dend;begin readln(a,b,c,d); for i:=-10000 to 10000 do {枚举方程所有可能的解} if abs(f(i/100))<1e-4 then write(i/100:2:2,' ');end.
var
Rel:real showmessage(floatToStr(Power(Rel,1/3)));
function Test(x:real):real;
begin
result:=power(x,3)+2*power(x,2)+3*x+4 ;
end;
begin
m:=100;
n:=-100;
while m-n>1E-5 do
begin
s:=(m+n)/2;
if Test(s)*Test(m)<0 then n:=s else m:=s;
end;
showmessage(format('%f,%f',[s,test(s)]));
end;
例如本题,x^3-5x^2+8x-4,0不是根,1代入等于0是根,找到了。x^3-5x^2+8x-4除以x-1,商式是x^2-4x+4,又商式还能分解成(x-2)^2,所以结果是:
x^3-5x^2+8x-4=(x-1)(x-2)^2.
枚举(enumerate)法是基于计算机运算速度快这一特性的一种使用非常普遍的思维方法。它是根据问题中的条件将可能的情况一一列举出来分析求解的方法。但有时一一列举出的情况数目很大,如果超过了我们所能忍受的范围则需要考虑如何去排除不合理的情况,尽可能减少列举的问题可能解的数目。例:求一元三次方程的解。有形如:ax3+bx2+cx+d=0一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行上输出这三个实根。这道题的解法很多,最为简洁的方法就是直接枚举可能的实根解。var a,b,c,d:real;i:integer;function f(x:real):real;begin f:=a*x*x*x+b*x*x+c*x+dend;begin readln(a,b,c,d); for i:=-10000 to 10000 do {枚举方程所有可能的解} if abs(f(i/100))<1e-4 then write(i/100:2:2,' ');end.