0

f(x) = x^4 -4x +1 の根を見つけるためのアルゴリズムを作成しようとしています。この関数の 2 つの実数と虚数の 4 つの根を取得することになっています。このアルゴリズムを c で書きます。しかし、それが適切に書かれていて、a と b にどのような初期推測を入力する必要があるかは、プログラムを実行するたびに異なる数値が返されるため、そうしないでください。これが私のコードです。ご協力ありがとうございます。

#include<stdio.h>
#include<math.h>
int computeroots(double, double, double, double);
int main()
{
    double a ,b, soln;
    double  epsilon = pow(10, -8);
    int MaxIter;
    printf("please enter an initial guess for a: \n");
    scanf("%ld",&a);
    printf("please enter a second guess for b: \n");
    scanf("%ld", &b);
    printf("please enter the maximum number of iteration: \n");
    scanf("%d", &MaxIter);
    soln = computeroots(a, b, epsilon, MaxIter);
    printf("Here is the solution: %d \n", soln);
    return 0;
}

int computeroots(double a, double b, double epsilon, double MaxIter)
{
    float FA = pow(a,4) - 4*a + 1;
    float FB = pow(b,4) - 4*b +1;
    float FP;
    int i =1;
    float p;
    if(FA * FB < 0)
    {
            while(i<MaxIter)
            {
                    p = a + (b-a)/2;
                    FP = pow(p,4) - 4*p +1;
                    if(FP == 0 || (b-a)/2 < epsilon)
                    {
                            return p;
                            break;
                    }
                    i++;
                    if(FA*FP > 0)
                    {
                            a = p;
                            FA = FP;
                    }
                    else
                    {
                            b = p;
                    }


            }
    }
}
4

1 に答える 1

0

1 つの推測では否定的な結果が得られ、もう 1 つの推測では肯定的な結果が得られるように、2 つの推測を見つける必要があると思います。ウィキペディアに例があります。反復回数は、精度と初期推定値によって大きく異なります。また、変数を double から float に下げないでください。精度が失われます。

于 2013-02-14T07:58:35.933 に答える