Programa en lenguaje C para resolver ecuaciones cúbicas de una variable
Puedes utilizar el método de bisección, el método de intercepción de cuerdas y el método de Newton, que escribí antes. Espero que sea útil para LZ.
①Método de intercepción de cuerdas:
Utiliza el método de intercepción de cuerdas para encontrar las raíces de la ecuación F(x)=X^3-5X^2+16X-80=0.
El método es el siguiente:
(1) Tome dos puntos diferentes x1, x2. Si f(x1) y f(x2) tienen signos opuestos, entonces el intervalo (x1. , x2) Debe haber una raíz dentro. Si f(x1) y f(x2) tienen el mismo signo, entonces x1 y x2 deben cambiarse hasta que f(x1) y f(x2) tengan signos diferentes. Tenga en cuenta que los valores de x1 y x2 no deben diferir demasiado para garantizar que solo haya uno en el intervalo (x1, x2).
(2) Conecte los dos puntos (x1, f(x1)) y (x2, f(x2)). Esta línea intersecta el eje x en x. La coordenada de x se puede calcular usando. la siguiente fórmula: x =(x1*f(x2)-x2*f(x1))/f(x2)-f(x1),
Encontrar f(x) a partir de x;
(3) Si f(x) y f(x1) tienen el mismo signo, entonces la raíz debe estar en (x,x2), y x se considerará como el nuevo x1 si f(x) y f(x2) tiene el mismo signo, lo que significa que la raíz está en (x1,x) y x se considera como el nuevo x2 en este momento.
(4) Repita los pasos (2) y (3) hasta que |f(x)| El programa es el siguiente: #include #include float f(float x) { flotar y; y=((x-5.0)*x+16.0)*x-80.0; devolver y; p> } float xpoint(float x1,float x2) {//Encuentra la conexión entre (x1, f(x1) y (x2, f (x2)) La intersección de la línea y el eje x float y; y=(x1*f(x2)-x2*f(x1))/( f(x2)-f(x1 )); return y; }//función xpoint raíz flotante(flotante x1,flotante x2) { flotar x,y,y1; y1=f(x1); hacer { x=xpunto(x1,x2); y=f(x); if(y*y1>0) { y1=y; x1=x; } si no x2=x; } while (fabs( y)>=0.00001); return x; }//función raíz void main() p> { p> flotador x1,x2,f1,f2,x; hacer { printf(" entrada x1,x2:\n" ); scanf("%f%f",&x1,&x2); f1=f(x1); f2=f(x2) ; } mientras(f1*f2>=0); x=raíz(x1,x2); printf("una raíz de la ecuación es %8.4f\n",x); getch(); } ②: Método de iteración de Newton: Método de iteración de Newton El método de iteración de Newton también se llama método tangente de Newton. Utiliza el siguiente método para encontrar la raíz: primero establezca arbitrariamente un valor x0 que esté cerca de la raíz real. como la primera raíz aproximada, y encuentre f desde x0 (x0), dibuje la recta tangente de f(x) a través del punto (x0, f(x0)), interseque el eje x en x1, utilícelo como la segunda raíz aproximada raíz, y luego use x1 para encontrar f(x1), y luego pase (haga una línea tangente a f(x) en el punto x1, f(x1)), interseque el eje x en x2, luego encuentre f(x2) , y luego dibuja una línea tangente... y continúa de esta manera hasta que esté lo suficientemente cerca de la x real. Donde f'(X0) es la pendiente de la función en X0, que es la derivada en X0. El código es el siguiente: #include #include float f (flotar a, flotar b, flotar c, flotar d, flotar x) { flotar f; f=((a*x+b )*x +c)*x+d; regresar f; } flotar f1(flotar a,flotar b,flotar c,flotar x ) p> { flotador f; f=(x*3*a+2*b)*x+c; return f ; } raíz flotante(flotador a,flotador b,flotador c,flotador d) { flotador x0,x1 =1; hacer { x0=x1; x1=x0-f(a,b, c,d ,x0)/f1(a,b,c,x0); }mientras(fabs(x1-x0)>=1e-6); devuelve x0 ; } void main() { flotador a,b,c,d,x; p> printf("ingrese cuatro números flotantes:\n"); scanf("%f%f%f%f",&a,&b,&c,&d); x =root(a,b,c,d); printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 su raíz cerca x=1.5 es: %.4f\n",a,b,c,d,x); getch(); }