for文の中のfor文が理解できません。。。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イプシロン

for文の中のfor文が理解できません。。。

#1

投稿記事 by イプシロン » 10年前

以下は

couP(1)=r(1)・・・[1]
facE-couP(2)/(facE+r(1))=(facE+couP(2))/(facE+r(2))^2・・・[2]
facE-couP(3)/(facE+r(1))-couP(3)/(facE+r(2))^2=(facE+couP(3))/(facE+r(3))^2・・・[3]
・・・

というように帰納的にr(k)を定義していくプログラムです。
(例えば、式[2]は、r(2)以外は既知なので、r(2)を求めることが出来る)

b=0から始まるfor next文が理解できません。噛み砕いて教えて下さると助かります。

コード:

Sub interest()
 
	Dim NData As Integer
	Dim couP(100), PMon(100), ratE(100), facE, a(100) , DF(100) As Variant
	Dim b As Variant
	Dim C As Variant
	 
	With Worksheets("interest")
		NData = .Cells(2, 4)
		facE = .Cells(3, 4)
		 
		For k = 1 To NData
			couP(k) = .Cells(4 + k, 5)
			PMon(k) = .Cells(4 + k, 6)
		Next k
		 
		b = 0
		For k = 1 To NData
			b = facE * couP(k)
			C = 0
			For t = 1 To k - 1
				C = C + b * (1 / (1 + a(t))) ^ t
			Next t
			a(k) = PMon(k) - C
			a(k) = (facE * (1 + couP(k)) / a(k)) ^ (1 / k) - 1
		Next k
		For k = 1 To NData
			.Cells(4 + k, 8) = a(k)
			.Cells(4 + k, 9) = 1 / (1 + a(k)) ^ k
		Next k
		 
	End With
End Sub


Poco
記事: 161
登録日時: 13年前

Re: for文の中のfor文が理解できません。。。

#2

投稿記事 by Poco » 10年前

r(k)の一般式もしくは漸化式を提示しないと誰も答えようがないかと。

#ソースコード中のa(k)がr(k)であるという認識で良いですか?

アバター
ookami
記事: 214
登録日時: 13年前
住所: 東京都

Re: for文の中のfor文が理解できません。。。

#3

投稿記事 by ookami » 10年前

文意から、ソースは自分で書いたものではないが、その意味や成り立ちを理解したい、ということで合ってますか?

For k = 1 To NData
  ①
  For t = 1 To k - 1
    ②
  Next t
  ③
Next k

の部分を逐次解釈すると、

k に 1 を代入
①を実行
  t に 1 を代入
  ②を実行
  t に 2 を代入
  ②を実行
  t に 3 を代入
  ②を実行
  :
  t に k-1 を代入
  ②を実行
③を実行

k に 2 を代入
①を実行
  t に 1 を代入
  :
: 以下同じ





k に NData を代入
①を実行
  t に 1 を代入
  :
: 以下同じ

おわり

となります。
元のソースで、②の部分では C に次々加算していますので、
恐らく問題の式を一般化すると、r(k)の式の中に Σt=1k-1 という部分が出てくるのではないでしょうか?

イプシロン

Re: for文の中のfor文が理解できません。。。

#4

投稿記事 by イプシロン » 10年前

Pocoさん、回答ありがとうございます。

ソースコード中のa(k)をr(k)だと思ってください。すみません。
で、r(k)は、スレッド冒頭に書いた漸化式を満たすということです。

ookamiさん、回答ありがとうございます。

おっしゃる通りです。
大学の先生曰く、「このソースコードで大丈夫だよね!」ということなのですが
自分では、うまくのみ込めていないため、質問させていただきました。

Poco
記事: 161
登録日時: 13年前

Re: for文の中のfor文が理解できません。。。

#5

投稿記事 by Poco » 10年前

> r(k)は、スレッド冒頭に書いた漸化式を満たすということです。

これはk=1,2,3の時の一例に過ぎません。
r(k)はr(k-1)でどう表現するのかを提示してください。
#k=2とk=3の例示だけでは、漸化式が分からないです。

イプシロン

Re: for文の中のfor文が理解できません。。。

#6

投稿記事 by イプシロン » 10年前

Pocoさん

couP(1)=r(1)・・・[1]
facE-couP(2)/(facE+r(1))=(facE+couP(2))/(facE+r(2))^2・・・[2]
facE-couP(3)/(facE+r(1))-couP(3)/(facE+r(2))^2=(facE+couP(3))/(facE+r(3))^2・・・[3]
・・・

r(k)はr(k-1)でどう表現するのか分からなくて困ってます。
例えば[2]だと、r(2)以外は既知なので、必ずr(2)について解けます。
[3]も、同様にして必ずr(3)について解けます。
そして式の形から、[4]が

facE-couP(4)/(facE+r(1))-couP(4)/(facE+r(2))^2-couP(4)/(facE+r(3))^3=(facE+couP(4))/(facE+r(4))^2・・・[4]

となることも推測できます。しかし、kをk-1でうまく表せません。

Poco
記事: 161
登録日時: 13年前

Re: for文の中のfor文が理解できません。。。

#7

投稿記事 by Poco » 10年前

どう説明すればいいか、正直お手上げです。
 ・ソースを読むに、k=1の際のr(1)がcouP(1)にならない(PMon(k)に依存する)
 ・例示の漸化式に、ソースコード内のPMon(k)に相当する物がない
 ・例示された漸化式だとr(k)を求めるには最後に平方根を求める必要がありそうだが、ソースコード内ではその記述が見当たらない(なぜかk乗根を求めている)
先生にこの辺の意味不明な個所を質問してください。

アバター
ookami
記事: 214
登録日時: 13年前
住所: 東京都

Re: for文の中のfor文が理解できません。。。

#8

投稿記事 by ookami » 10年前

問題文のカッコの対応がわかりにくかったので数式エディタで書いてみましたが、
カッコの対応は以下であってますか?①
([2], [3]から[4]が推測されるのが妥当かどうかは解こうとしている問題によりますが、妥当だと仮定すると、)
k番目の式は以下のようになるかと思います。(ご確認ください②)
1.png
ここまでは問題文から寄せてきました。

次に、プログラムからも見てみましょう。
まず、

コード:

            b = facE * couP(k)
            C = 0
            For t = 1 To k - 1
                C = C + b * (1 / (1 + a(t))) ^ t
            Next t
は、数式に直すと
3.png
となり、
次の、

コード:

            a(k) = PMon(k) - C
            a(k) = (facE * (1 + couP(k)) / a(k)) ^ (1 / k) - 1
は、(わざわざ同じa(k)に代入しているのでわかりにくいですが、)
4.png
になります。
これも同様に、カッコの対応と、変形が妥当かどうかご確認ください③。

で、上記の[k]の式(問題文から寄せてきたほう)と、
今のb, C, rkの式(プログラムから寄せてきた方)が
等価かどうかを確認すればよい、ということになります。

たぶん等価でないのですが(そもそも私の変形が間違っている可能性がかなりありますが…)、
とりあえず考え方はこんな感じかなと。上記の①~③を順にご確認ください。

イプシロン

Re: for文の中のfor文が理解できません。。。

#9

投稿記事 by イプシロン » 10年前

Pocoさん、ookamiさん、返信が遅くなってしまい本当に申し訳ありません。イプシロンです。

Pocoさんが具体的にあげてくださった意味不明な点を自分なりに考え、
またookamiさんが載せてくださった数式エディタを頼りにして
何とか書きあげることができました。

お二方が、自分が理解できていない点を明確にしてくださったおかげです。
本当にありがとうございました。またお世話になるかもしれません。
そのときはよろしくお願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る