|
▼ichinose さん:
>▼おやじ さん:
>こんばんは。遅くなりました。
>
>>おはようございます。すいません。初心者のもので、「0〜100までを(例えば0.001刻みで)ループさせて上記式の答えが0に近い数(これも基準を決めて)の個数を数えればよい」をどのようにプログラムしたらいいのか分かりません。何かヒント的なものでもいいので教えていただけないでしょうか?
>
>もし、ニュートン法を使用しないで解の個数を求めるとなると・・・、
>'===============================================================
>Sub main()
>Dim a(4) As Double
>Dim ans
>Dim cnt As Long
>a(0) = 10
>a(1) = 25
>a(2) = 35
>a(3) = 45
>a(4) = 100
>'この時は、x^5 - 10x^4 + 25x^3 - 35x^2 + 45x - 100となります
>ans = Func_Slt_cnt(a(), CDec(0.001))
>MsgBox ans
>End Sub
>'=========================================================
>Function Func_Slt_cnt(Coefficient() As Double, _
> Interval As Variant _
> ) As Long
>'機 能: 関数f(x) = x^5 - ax^4 + bx^3 - cx^2 + dx - eにおいて、
>' xが0〜100のとき、f(x)=0の解の個数を求める
>'入力データ : Coefficient() ---- 係数a、b、c、d、eに相当する値が入った配列
>' Ineterval ----- 調査間隔値
>'出力データ : Func_Slt_cnt ----- 解の数
> Dim x As Variant
> Dim wk As Double
> Dim ans() As Double
> Dim a_mark As Long 'f(x)の符号 -1---負 0---0 1---正
> Dim f_mark As Long '一つ前のf(x)の符号 -1---負 0---0 1---正
> Func_Slt_cnt = 0
> For x = CDec(0) To CDec(100) Step Interval
> 'wk = x ^ 2 + Coefficient(0) * x + Coefficient(1)
> wk = x ^ 5 - Coefficient(0) * x ^ 4 + Coefficient(1) * x ^ 3 - Coefficient(2) * x ^ 2 + Coefficient(3) * x - Coefficient(4)
> If x = 0 Then
> If wk = 0 Then
> f_mark = 0
> ElseIf wk > 0 Then
> f_mark = 1
> Else
> f_mark = -1
> End If
> End If
> If wk = 0 Then
> a_mark = 0
> ElseIf wk > 0 Then
> a_mark = 1
> Else
> a_mark = -1
> End If
> If a_mark = 0 Or (a_mark <> f_mark And f_mark <> 0) Then
> Func_Slt_cnt = Func_Slt_cnt + 1
> End If
> f_mark = a_mark
> Next x
>End Function
>
>なんてコードで上の場合は、「1」が求められます。
>
>試しに「Func_Slt_cnt」の
>
>wk = x ^ 5 - Coefficient(0) * x ^ 4 + Coefficient(1) * x ^ 3 - Coefficient(2) * x ^ 2 + Coefficient(3) * x - Coefficient(4)
>
>の箇所を簡単な2次関数に変えて、
>
>wk = x ^ 2 + Coefficient(0) * x + Coefficient(1)
>
>こんな式にして、
>
>mainも
>
>'===========================================================
>Sub main()
>Dim a(1) As Double
>Dim ans
>Dim cnt As Long
>a(0) = -61
>a(1) = 550
>'この時は、x^2 - 61x^4 + 550 となります
>ans = Func_Slt_cnt(a(), CDec(0.001))
>MsgBox ans
>End Sub
>
>で実行すると、「2」が得られます。
>
>何かのヒントぐらいにはなりますか?
こんばんはm(__)m
ありがとうございます。何度も申し訳ないんですが一番初めのプログラムを入力して実行すると、「Func_Slt_cnt」のところが反転して、SubまたはFunctionが定義されていませんと表示されてしまうのですが・・・どうしたらよいのでしょう?
|
|