昨天做一道二分的題目,就是一元三次方程求三個根,然後從小到大輸出。
我發現好多大佬都是用的盛金公式或者牛頓迭代(聽說比二分快)。
所以我打算簡單的介紹一下盛金公式。
假設一元三次方程:ax3+bx2+cx+d=0
首先和一元二次方程類似,他也有重根判別式:
a=b*b-3*a*c;
b=b*c-9*a*d;
c=c*c-3*b*d;
derta=b2-4*a*c;//總判別式
盛金公式1:x1=x2=x3=-b/(3*a)=-c/b=-3d/c
盛金公式2:y1,2=a*b+3*a*(-b±sqrt(b2-4*ac))/2; i2=1
盛金公式3:
盛金公式4:t=(2*a*b-3*a*b)/(2*sqrt(a*a*a)) θ=arccos(t)//c語言中為acos(t) (a>0&&-1
然後我們就能根據不同的要求求出一元三次的三個解。
是不是覺得盛金公式法有點像一元二次方程的萬能公式法。
具體的練習: //就是一道經典的盛金公式求解題目(但是好像暴力能過,因為精度很小)
題解:
但是盛金公式求解有個問題(在計算機上),因為盛金公式可能會用到sin,cos等三角函式,就會很容易造成精度不足,所以請謹慎使用
能二分盡量二分(畢竟精度能自己控制=_=)。
一元三次方程 盛金公式求解
先說一下中間出現的問題,開三次方的時候不能直接pow x,1.0 3.0 要分x大於零小於零,pow只接受大於零的引數。另外,由於工程中只考慮實數,這裡複數沒有實現。pragma once class cubicsolute void judge double getx1 double getx2 ...
有缺陷的一元三次方程求解設計(盛金公式)
先放 include include cube sqrt.h double abs double x double cube sqrt double x return middle include include include cube sqrt.h using namespace std equ...
markdwon編輯公式入門
上標與下標 上標和下標分別使用 與 例如 x i 2 表示的是 預設情況下,上 下標符號僅僅對下乙個組起作用。乙個組即單個字元或者使用 包裹起來的內容。如果使用 10 10 表示的是,而 10 才是。同時,大括號還能消除二義性,如x56 將得到乙個錯誤,必須使用大括號來界定 的結合性,如 6 或者 ...