Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


61825 / 76738 ←次へ | 前へ→

【19526】Re:教えてください
発言  ichinose  - 04/11/6(土) 20:50 -

引用なし
パスワード
   ▼おやじ さん:
こんばんは。遅くなりました。

>おはようございます。すいません。初心者のもので、「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」が得られます。

何かのヒントぐらいにはなりますか?

0 hits

【19513】教えてください おやじ 04/11/5(金) 22:44 質問
【19519】Re:教えてください ichinose 04/11/6(土) 10:14 発言
【19521】Re:教えてください おやじ 04/11/6(土) 11:59 質問
【19526】Re:教えてください ichinose 04/11/6(土) 20:50 発言
【19527】Re:教えてください おやじ 04/11/6(土) 21:11 質問
【19528】Re:教えてください ichinose 04/11/6(土) 21:33 発言
【19529】Re:教えてください おやじ 04/11/6(土) 23:20 質問
【19538】Re:教えてください ichinose 04/11/7(日) 17:16 発言
【19541】Re:教えてください おやじ 04/11/7(日) 17:59 回答

61825 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free