Excel VBA質問箱 IV

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

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


61824 / 76738 ←次へ | 前へ→

【19527】Re:教えてください
質問  おやじ  - 04/11/6(土) 21:11 -

引用なし
パスワード
   ▼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が定義されていませんと表示されてしまうのですが・・・どうしたらよいのでしょう?

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 回答

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