这取决于你的意思是"解决".
如果你的意思是"找到满足该机器浮点精度极限的方程式的双x值",那么Luiscencio的方法就可以了.
如果通过求解你的意思是"找到形式'x ='的等式,使得x满足给定的等式"(AKA"代数求解"),那么C和C++都没有可以提供帮助的库.正如卡尔所说,你要么必须手工完成,要么使用Mathematica或类似的符号数学包来做到这一点.
如果您的意思不同于其中任何一种,请再次询问更多细节.
对于更复杂的多项式,您需要更强大的解决方案,但这可能足以完成您的作业.
该算法使用牛顿方法,并用Ruby编写.您可以使用wolfram | alpha验证派生和答案是否正确.
def f(x,a,b,c)
return x*(x+a)**b-c
end
def df(x,a,b,c)
return (x+a)**b+b*x*(x+a)**(b-1)
end
def newton(a,b,c)
xn=0 #initial seed for Newton's method
while true
xn2=xn-f(xn,a,b,c)/df(xn,a,b,c) #Newton's method
print "f(%.5f)=%.5f\n"%[xn,f(xn,a,b,c)]
break if (xn2*10000).to_i==(xn*10000).to_i #set desired precision here
xn=xn2
end
print "root is %.5f"%[xn2]
end
newton(1,4,34.5)
Run Code Online (Sandbox Code Playgroud)
这会产生:
f(0.00000)=-34.50000
f(34.50000)=54793902.65625
f(27.44093)=17954483.09402
f(21.79391)=5883122.74717
f(17.27661)=1927672.51373
f(13.66318)=631598.66717
f(10.77301)=206926.07160
f(8.46171)=67782.26596
f(6.61400)=22194.34671
f(5.13819)=7259.61867
f(3.96214)=2367.67791
f(3.03097)=765.73665
f(2.30728)=241.54928
f(1.77466)=70.68568
f(1.43951)=16.48341
f(1.30101)=1.97186
f(1.27945)=0.04145
f(1.27897)=0.00002
root is 1.27897
Run Code Online (Sandbox Code Playgroud)