如何解决一道c语言数学计算

img

img

img


不得不说,这个问题困扰了我很久,求这个问题的具体代码,经过了实践的代码会得到悬赏

一元三次方程求解代码如下:

#include<stdio.h>
#include<math.h>
int main() {
        double a, b, p, q, x1, m, n, i, w, s1, s2, s3;
    printf("请输入一元三次方程标准形式ax^3+bx^2+px+q=0\n");
    printf("a b p q的值,用空格隔开,其中a的值为1,b的值为0\n");
    scanf("%lf%lf%lf%lf", &a, &b, &p, &q);
    m = (3 * a * p - b * b) / (3 * a * a);
    n = (27 * a * a * q - 9 * a * b * p + 2 * b * b * b) / (27 * a * a * a);
    w = -0.5;
    s1 = -b / (3 * a);
    if (-n / 2 + sqrt(n * n / 4 + m * m * m / 27) > 0) 
    {
        s2 = pow((-n / 2 + sqrt(n * n / 4 + m * m * m / 27)), 1.0 / 3);
    }
    else 
    {
        s2 = -pow(-(-n / 2 + sqrt(n * n / 4 + m * m * m / 27)), 1.0 / 3);
    }
    if (-n / 2 - sqrt(n * n / 4 + m * m * m / 27) > 0) 
    {
        s3 = pow((-n / 2 - sqrt(n * n / 4 + m * m * m / 27)), 1.0 / 3);
    }
    else 
    {
        s3 = -pow(-(-n / 2 - sqrt(n * n / 4 + m * m * m / 27)), 1.0 / 3);
    }
    x1 = s1 + s2 + s3;
    printf("x1的解为:%f\n", x1);
}

这道题应该用牛顿迭代公式来做。由于p, q的数值可以很大,如果直接套公式的话,在计算平方和三次方时就会数值溢出。

#include <stdio.h>
#include <math.h>

int p, q;

double f(double x)
{
    return x * x * x + p * x + q;
}

double f1(double x)
{
    return 3.0 * x * x + p;
}

int main()
{
    double x_n = 1, x_n1;
    scanf("%d%d", &p, &q);
    while (1)
    {
        x_n1 = x_n - f(x_n) / f1(x_n);
        if (fabs(x_n1 - x_n) < 0.0005)
            break;
        x_n = x_n1;
    }
    printf("%.3f", x_n1);
    return 0;
}

#include<stdio.h>
#include<math.h>
void main()
{
      int p,q;   //取值为integer的最值
      printf("请输入p和q\n");    scanf("%d%d",&p,&q);
      printf("公式如下:   x^3+%dx+%d=0  ",p,q); //根据题意判断式要大于零既求一个实数根和两个共轭虚根,共轭虚根可忽略
      float result;
      if((q*q/4.0+p*p*p/27.0)>0)
      {
            result=pow((-q/2.0+sqrt((q*q/4.0)+(p*p*p)/27.0)),1/3.0)+pow((-q/2.0-sqrt((q*q/4.0)+(p*p*p)/27.0)),1/3.0);
           printf("%.3f",result);
      }
}

img

其实你可以直接百度一元三次百度百科,里面有详细介绍。不懂再问