一元三次方程

一元三次方程组求解 luogu P1024

你说的曾经没有我的故事 提交于 2020-04-06 12:52:46
题目传送门 首先,要明确题目信息,f(x1) * f(x2) < 0, 则一定存在实数根在区间(x1, x2)。且所有的根都在[-100, 100)之间。根与根的绝对值之差 >= 1 那么,我们是否可以找到所有的x1 和 x2 呢? 当然可以。 根的取值范围这么小 (每一个区间都枚举一次的话也只有200个区间),那么我们当然就愉快的枚举啊! 在 [-100, 100)的区间里面枚举符合条件的 x1, x2。然后再对该区间进行二分查找(二分赛高!) #include <bits/stdc++.h> using namespace std; #define du double du a, b, c, d; int now; du ans; inline du cac(du x){ //x 对应的 f 的值 return a * x * x * x + b * x * x + c * x + d; } inline void search(du l, du r){ if(now == 3)return; if(r - l <= 0.001){//差这么小,已经可以说是相等了。直接输出 printf("%.2lf ", l); now++; return ; } du mid = l + (r - l) / 2; du ansl, ansr; ansl = cac(l) * cac(mid

(简易)一元三次方程拆分/求根方法

Deadly 提交于 2020-01-26 18:50:53
(简易)一元三次方程拆分/求根方法 例: x 3 + 7 x 2 + 14 x + 8 = 0 x^3+7x^2+14x+8=0 x 3 + 7 x 2 + 1 4 x + 8 = 0 式中常数8的因子有[1,2,4,8] 为了让因子之和或差等于二次项的系数.故舍弃8.故根为拆分出的因子的相反数. x 1 = − 1 , x 2 = − 2 , x 3 = − 4 x_1=-1, x_2=-2,x_3=-4 x 1 ​ = − 1 , x 2 ​ = − 2 , x 3 ​ = − 4 即拆分为 ( x + 1 ) ( x + 2 ) ( x + 4 ) = 0 (x+1)(x+2)(x+4)=0 ( x + 1 ) ( x + 2 ) ( x + 4 ) = 0 且三个根两两之间的乘积的总和等于一次项系数,即 ( − 1 ∗ 2 ) + ( − 1 ∗ − 4 ) + ( − 2 ∗ − 4 ) = 14 (-1*2)+(-1*-4)+(-2*-4)=14 ( − 1 ∗ 2 ) + ( − 1 ∗ − 4 ) + ( − 2 ∗ − 4 ) = 1 4 拆解步骤 例1: x 3 + 9 x 2 + 23 x + 15 = 0 x^3+9x^2+23x+15=0 x 3 + 9 x 2 + 2 3 x + 1 5 = 0 15的因子为[1,3,5,15]