📄 3053027067_钟伟坚_1002.txt
字号:
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;
double Polynomial_Root(double c[], int n, double a, double b, double eps)
{
double x,dx,NX;
double f,ff,fff;
int i,j,s,k;
int count;
double value,diff;
double fa,fb,fp,mid,inter;
fa=c[n];
fb=c[n];
if(a>b){inter=a;a=b;b=inter;}
for(i=n-1;i>=0;i--)
{
fa=fa*a+c[i];
fb=fb*b+c[i];
}
// cout << fa << endl << fb << endl;
/* if(fa==0.0){mid=a;return mid;}
if(fb==0.0){mid=b;return mid;}
if(fa>0.0) flaga=1;
else flaga=-1;
if(fb>0.0) flagb=1;
else flagb=-1;*/
if(fa*fb<0.0) {
while(1){
mid=a+(b-a)/2;
if(b-a<eps)
{
if(mid < eps && mid > -eps)
mid = 0.0;
return mid;
}
fp=c[n];
for(i=n-1;i>=0;i--)
fp=fp*mid+c[i];
// cout << mid << endl << fp << endl;
if(fp==0.0) return mid;
if(fp*fa>0) a=mid;
else b=mid;
}
}
else
{
/* s=1;
for(i=0;;i++){
s*=2;
for(j=1;j<=s;j++)
{*/
while(1)
{
value = a + (b - a) * (static_cast<double>(rand()) / RAND_MAX);
NX=1000.00;
// value=a+(b-a)*j/s;
count=100;
while(count--)
{
f=c[n];
for( k=n-1;k>=0;k--)
f=f*value+c[k];
ff=c[n]*n;
for(k=n-1;k>0;k--)
ff=ff*value+c[k]*k;
fff=c[n]*n*(n-1);
for( k=n-1;k>1;k--)
fff=fff*value+c[k]*k*(k-1);
dx=value-f*ff/(ff*ff-f*fff);
if(dx>value) diff=dx-value;
else diff=value-dx;
if(diff<0.5*eps&&dx<=b&&dx>=a){
if(abs(dx) < eps)
dx = 0.0;
return dx;
}
// if(NX>diff) NX=diff;
// else break;
value=dx;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -