- ベストアンサー
微分でグラフを求める問題で
y=-x^4+4x^3-4x+1のグラフについて問いに答えよ。という問題で、 まず、傾きを求めるために微分をしました。 y'=4x^3+12x^2-4 そして、y'=0とし、極限値を求めるようとしました。 4x^3+12x^2-4=0 しかし、[-4]が邪魔でどうしてもxの値が求められません。 簡単に解く方法があるのでしょうか。 この教科書はアメリカの教科書なので、電卓で解くことを前提にしてるのかも知れないのですが、 もしあるようでしたらお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私は数学のことは全く分からないので、もしかすると大外しかもしれません。そのときは、ご容赦下さい。 「電卓」ではなく、「プログラム電卓」もしくはExcelを使えば、比較的容易に解を求めることができます。ここでは、Excelのユーザー定義関数を用いてみます。ユーザー定義関数については、以下に分かりやすい解説がありますので、ご存じなかったらご参照下さい。 http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html また解を求める手法としてニュートン法を使います(これしか知らないもので^^); いくつか解説を付けておきます。 http://csxs.cs.knct.ac.jp/~chiharu/jikken/j3/newton.html http://www.math.kobe-u.ac.jp/~taka/asir-book-html/main/node35.html http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95 3次方程式には下記の「Newton3」を、4次方程式には「Newton4」を使用します。引数の意味を4次方程式の場合で説明しますが、3次関数の場合でも同様です。 4次関数(注) : a*X^4 + b*X^3 + c*X^2 + d*X + e = Y_slice X0 : 初期値 Xmin : 解の範囲がグラフ等から推測される場合にその最小値側を設定(多少余裕を持たせる) Xmax : 解の範囲がグラフ等から推測される場合にその最大値側を設定(多少余裕を持たせる) delta : 十分収束したと判定するための基準値 Y_limit : 計算が発散したと判定するための基準値 (注) Y_sliceは余計なパラメータと思われるかもしれませんが、「f(X) = a*X^4 + b*X^3 + c*X^2 + d*X + e」と「g(X) = Y_slice : 直線」との交点を求める計算をする必要があったときに使用したユーザー定義関数を流用させてもらったからです。そのときf(X)は、いくつかのデータからExcel関数の最小自乗法によって求めました。「f(X) = 0」の方程式として用いる場合は、「Y_slice = 0」として下さい。 ↓ 「a~d、y_slice」は約しても、もちろん計算可能です。 a = 4 b = 12 c = 0 d= -4 y_slice = 0 x0 = (*) xmin = -100 xmax = 100 delta = 1E-10 y_limit= 1E+4 (*) 初期値を変えることによって、以下の解が求められます。 x0 = 1 のとき x = 0.532088886 x0 = -1 のとき x = -0.652703645 x0 = -5 のとき x = -2.879385242 お分かり頂けたでしょうか。お役に立てれば、幸いです。 ●3次方程式 Public Function Newton3(a, b, c, d, y_slice, x0, xmin, xmax, delta, y_limit) y0 = ((a * x0 + b) * x0 + c) * x0 + d - y_slice For i = 1 To 100 f0 = (3 * a * x0 + 2 * b) * x0 + c x1 = (f0 * x0 - y0) / f0 y1 = ((a * x1 + b) * x1 + c) * x1 + d - y_slice If Abs(y1) > y_limit Then Newton3 = "y 発散": GoTo Lastline ElseIf (x1 < xmin * 0.8) Or (x1 > xmax * 1.2) Then Newton3 = "x 非収束": GoTo Lastline ElseIf Abs(y1 - y0) < delta Then Newton3 = x1: GoTo Lastline Else x0 = x1: y0 = y1 End If Next i Newton3 = "回数オーバー" Lastline: End Function ●4次方程式 Public Function Newton4(a, b, c, d, e, y_slice, x0, xmin, xmax, delta, y_limit) y0 = (((a * x0 + b) * x0 + c) * x0 + d) * x0 + e - y_slice For i = 1 To 100 f0 = ((4 * a * x0 + 3 * b) * x0 + 2 * c) * x0 + d x1 = (f0 * x0 - y0) / f0 y1 = (((a * x1 + b) * x1 + c) * x1 + d) * x1 + e - y_slice If Abs(y1) > y_limit Then Newton4 = "y 発散": GoTo Lastline ElseIf (x1 < xmin * 0.8) Or (x1 > xmax * 1.2) Then Newton4 = "x 非収束": GoTo Lastline ElseIf Abs(y1 - y0) < delta Then Newton4 = x1: GoTo Lastline Else x0 = x1: y0 = y1 End If Next i Newton4 = "回数オーバー" Lastline: End Function
その他の回答 (2)
- mirage70
- ベストアンサー率28% (32/111)
グラフだけなら、(x^2-1)で括れます。 3次方程式は、代数的に解くには、カルダーノ(だと思いますが)の解法があります。 三次方程式の解法またはカルダーノで検索してみては如何ですか。
- judas_2006
- ベストアンサー率56% (82/145)
No.1です。 スミマセン。ちょっと誤りがありました。私が使用したときは、x>0という条件があったので、少々余計なことをしていました。Newton3、Newton4を、以下のように訂正します。 ●3次方程式 Public Function Newton3(a, b, c, d, y_slice, x0, xmin, xmax, delta, y_limit) y0 = ((a * x0 + b) * x0 + c) * x0 + d - y_slice For i = 1 To 100 f0 = (3 * a * x0 + 2 * b) * x0 + c x1 = (f0 * x0 - y0) / f0 y1 = ((a * x1 + b) * x1 + c) * x1 + d - y_slice If Abs(y1) > y_limit Then Newton3 = "y 発散": GoTo Lastline ElseIf (x1 < xmin) Or (x1 > xmax) Then Newton3 = "x 非収束": GoTo Lastline ElseIf Abs(y1 - y0) < delta Then Newton3 = x1: GoTo Lastline Else x0 = x1: y0 = y1 End If Next i Newton3 = "回数オーバー" Lastline: End Function ●4次方程式 Public Function Newton4(a, b, c, d, e, y_slice, x0, xmin, xmax, delta, y_limit) y0 = (((a * x0 + b) * x0 + c) * x0 + d) * x0 + e - y_slice For i = 1 To 100 f0 = ((4 * a * x0 + 3 * b) * x0 + 2 * c) * x0 + d x1 = (f0 * x0 - y0) / f0 y1 = (((a * x1 + b) * x1 + c) * x1 + d) * x1 + e - y_slice If Abs(y1) > y_limit Then Newton4 = "y 発散": GoTo Lastline ElseIf (x1 < xmin) Or (x1 > xmax) Then Newton4 = "x 非収束": GoTo Lastline ElseIf Abs(y1 - y0) < delta Then Newton4 = x1: GoTo Lastline Else x0 = x1: y0 = y1 End If Next i Newton4 = "回数オーバー" Lastline: End Function
お礼
ありがとうございます。計算機、コンピューター等を使う以外の方法はやっぱり手間がかかって面倒なんでしょうね。 この方法を試してみようと思います。
お礼
ありがとうございます。カルダーノを検索してみようと思います。