1

私はマキシマに関数を持っています。微分してから、これがゼロになる値を見つけようとしています。しかし、solve() を使用すると、解決策が得られません。これはなぜですか?どうすれば回避できますか?

(%i1)   f(x):=(-5*(x^4+5*x^3-3*x))/(x^2+1);
(%o1)   f(x):=((-5)*(x^4+5*x^3+(-3)*x))/(x^2+1)
(%i2)   df(x):=''(diff(f(x), x));
(%o2)   df(x):=(10*x*(x^4+5*x^3-3*x))/(x^2+1)^2-(5*(4*x^3+15*x^2-3))/(x^2+1)
(%i3)   solve(df(x), x);
(%o3)   [0=2*x^5+5*x^4+4*x^3+18*x^2-3]
4

2 に答える 2

2

機能solveは強すぎません。解決できない問題がたくさんあります。より強力なバージョンが開発中です。それまでの間、アドオン パッケージをお試しくださいto_poly_solve。ここに私が得るものがあります:

(%i1) df(x) := (10*x*(x^4+5*x^3-3*x))/(x^2+1)^2-(5*(4*x^3+15*x^2-3))/(x^2+1) $

(%i2) load (to_poly_solve) $
(%i3) to_poly_solve (df(x), x);
(%o3) %union([x = - 2.872468527640942], [x = - 0.4194144025323134], 
[x = 0.3836388367122223], [x = 0.2041221431132173 - 1.789901606296292 %i], 
[x = 1.789901606296292 %i + 0.2041221431132173])

少し驚くかもしれないことは、to_poly_solveが正確またはシンボリックではなく数値解を返したことです。トレースallrootsは、to_poly_solveが 5 次方程式を構築し、それを にパントしたことを示していallrootsます。一般的な 5 次式には根号に関する解がなく、特殊な場合でもおそらく非常に厄介なので、とにかく数値解を持つことが最も有用です。

plot2d(df(x), [x, -3, 1])上記で返された実際のルートを視覚化してみてください。

于 2020-03-04T03:00:56.553 に答える