• ベストアンサー

Vb.netで式の解を求めるにはどのようにすればい

可能かどうかも良く分かりませんが、Vb.netを使って下記の式の解(r)を求めたいのですが、全くどう考えればよいか分かりません。 (9600÷(1+r)) + (9600÷(1+r)×(1+r)) + (9600÷(1+r)×(1+r)×(1+r)) + (9600÷(1+r)×(1+r)×(1+r)×(1+r)) + (9600÷(1+r)×(1+r)×(1+r)×(1+r)×(1+r)) = 42000 2乗、3乗・・・の表現が出来ないのでこのように記入させて頂きました。 この式のrをVb.netで求めるにはどのように考えれば良いのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8536/18275)
回答No.3

9600÷(1+r)×(1+r)は普通の人にとっては9600に等しいのですが、分子が9600で、分母が(1+r)の2乗と言いたいのでしょうか?まあ、そういうつもりだとして 解くべき式はR=1+rとして f(R)=42000*R^5-9600*R^4-9600*R^3-9600*R^2-9600*R-9600=0 です。このときRを求めるのならfを微分したf'は計算できますから R[n+1]=R[n]-f(R[n])/f'(R[n]) を使って反復的に求めます。たとえばR[1]=1.05とかにしてRを次々に求めればRは一定値に収束します。それが求める答えです。 R=1.0462276 つまり r=0.0462276 ですね。

その他の回答 (3)

回答No.4

こんばんは 電卓で計算するとrは1より小さいことは明白です。 rが0から1までループすると結果が出ます。 Public Class Form1 Private Sub f() Handles MyBase.Shown For r As Double = 0.00000000001 To 1 Step 0.0000000001 If Math.Round((9600 / (1 + r)) + (9600 / ((1 + r) * (1 + r))) + (9600 / ((1 + r) * (1 + r) * (1 + r))) + (9600 / ((1 + r) * (1 + r) * (1 + r) * (1 + r))) + (9600 / ((1 + r) * (1 + r) * (1 + r) * (1 + r) * (1 + r))), 10, MidpointRounding.AwayFromZero) <= 42000 Then MsgBox(r) Return End If Next End Sub End Class

  • skp026
  • ベストアンサー率45% (1010/2238)
回答No.2

私は数学が堪能ではないので、 特別な数式の有無などわかりませんが、 プログラミングでやるなら、 どろ臭くrに仮の数値を当てはめ計算し、 42000と等しくないならrを+1などし、 等しいか越えるまでループする、 そんなやり方なら思い付きます。 他にもあるかもしれないですが、 とりあえずこんな考えでやってみてはいかがでしょうか。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

この回答に対する、お礼などは不要です(何のお役にも立っていませんので)。 この式を、直接、プログラムで解を求めるのは、ムリではないでしょうか? ちなみに「(1 + r)×(1 + r)」は「(1 + r)^2」と書きます。 従って、 (9600÷(1+r))+(9600÷(1+r)^2)+(9600÷(1+r)^3)+(9600÷(1+r)^4)+(9600÷(1+r)^5)=42000 と書き表しますし、プログラムでも、「2^3」すれば「8」が返ってきます。 「(1 + r)」を「x」と置いて、分母を揃えて、 (9600x^4+9600x^3+9600x^2+9600x+9600)/x^5=42000 などと、手作業で、「x=」の形まで持って行ってからでないと、出来るのかな?

関連するQ&A

専門家に質問してみよう