Fortranプログラムの問題についての質問

このQ&Aのポイント
  • fortranプログラムについての次の問題について質問させてください。 i=1、2、・・・、50に対し(i,a500(i))(i,a2000(i))を次の演算に従い計算せよという問題です。
  • 自分は添字のnなどについてはプログラム上では無視し、一次元配列aとbを宣言して、「DOループも用いて i=1~49を回してまずa2(これがb)を求め、そのa2を元の漸化式の右辺に結果を入れ、それを500回と2000回 別々に回す」という操作を考えたのですがうまくいきません。
  • i-1やi+1をどう扱うかや、そもそもこの考え方は合っているのか、どうするほうが良いのかなどについてアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

fortranプログラムについての質問です。

fortranプログラムについての次の問題について質問させてください。 i=1、2、・・・、50に対し(i,a500(i))(i,a2000(i))を次の演算に従い計算せよという問題です。わかりにくいですが 500と2000、さらに次の式のaのあとのnやn+1,n-1などは添字です。 an+1(i)=0.5{an(i+1)+an(i-1)-2.0d0an(i)}+an(i)  (i=2,3,・・・49), (n=1,2,・・・,500,・・・,2000) ただしa1(i)=0.0(i=1,2,・・・,49), a1(50)=1.0, an(1)=0.0, an(50)=1.0 (n=1,2,3,・・・,500,・・・,2000) である。 というものです。自分は添字のnなどについてはプログラム上では無視し、一次元配列aとbを宣言して、「DOループも用いて i=1~49を回してまずa2(これがb)を求め、そのa2(すなわち)を元の漸化式にの右辺に結果を入れ、それを500回と2000回 別々に回す」という操作を考えたのですがうまくいきません。i-1やi+1をどう扱うかや、そもそもこの考え方は合っているのか、 どうするほうが良いのかなどについてアドバイスをいただきたいです。よろしくお願いします。

  • taka09
  • お礼率95% (166/174)

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「do j=1,500→enddoをiをはさんだりしてやったみました」というのが わからないんですが, どうやったんでしょうか? 単純に do j = 1, 500 a(1) = 0 a(50)=1 do i = 2, 49 b(i) = 式の右辺 enddo a=b enddo で動かない?

taka09
質問者

補足

説明不足でした。すみません。色々とdo j=1,500・・・enddoの配置を変えたりしながらやってみたということです。 Tacosanさんの書いてくださったプログラムも書いてみたのですがどうもうまくいきませんでした・・・。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

だからさぁ, ・どんなプログラムを書いたのか ・どんな結果が得られたのか ・どのような結果が期待されるのか くらいは書こうよ. 「do~enddo の配置を変えたりしながらやってみた」っていってもどのようなプログラムを使ったのか全くわからんし, 「どうもうまくいきませんでした」といっても何がどう「どうもうまくいかないのか」がわからんの. もちろん「回答をもらうつもりはなくただ単に愚痴を零しているだけ」ならいいけど, それはこんなところでしないでもらいたい.

taka09
質問者

補足

do j = 1, 500 a(1) = 0 a(50)=1 do i = 2, 49 b(i) = 式の右辺 enddo a=b enddo とか a(1) = 0 a(50)=1 do i = 2, 49 b(i) = 式の右辺 enddo do j = 1, 500 a=b enddo とか思いつく限りの組み合わせでDOループを回したということです。なんでそこまで怒るのかよく分かりませんが、お返事ありがとうございました。 自力でうまく回せました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

考え方はそれであってると思う. 「うまくいかない」とは, どのようなプログラムでどううまくいかないと言っているんでしょうか?

taka09
質問者

補足

DOループの配置(?)などがよくわかりません。自分は、初期値をプログラムで書いた後、 do i=2,49 b(i)=上記の演算の右辺 enddo としたあと、 a(i)=b(i) としてまた同じ演算を500回(またそれと別に2000回)行うことを考えているのですが、どう書けばいいのか思い つきません・・・。do j=1,500→enddoをiをはさんだりしてやったみましたがそれらしき値が得られなかったということです。

関連するQ&A

  • 完全順列の漸化式

    完全順列をウィキペディアで調べると以下のように漸化式について解説していました。 モンモール数Anを与える漸化式を考える。 n番目に置く数の選び方は1からn-1までの(n-1)通りである。ここで選んだ数をiとする。 次にi番目がnかどうかで場合分けをする。 i番目がnであれば、i番目に置かれたnとn番目に置かれたiを除く(n-2)個の数の並べ方の 総数は、(n-2)個の数による完全順列の数、すなわちA(n-2)に等しい。 i番目がnでない場合は、n番目に置かれたiを除く(n-1)個の数の並べ方の総数は、(n-1)個 の数による完全順列の数、すなわちA(n-1)となる。 以上をまとめると下の漸化式が得られる。  An=(n-1)・{A(n-1)+A(n-2)}   n>=3 これでは訳が解らないのでn=4の場合を考えます。 4番目に置く数の選び方は1から(4-1)までの3通りである。ここで選んだ数iは3である。 次に3番目(i番目)が4(n)かどうかで場合分けをする。 3番目(i番目)が4(n)であれば3(i)番目に置かれた4(n)と4(n)番目に置かれた3(i)を除く(4-2)個 の数の並べ方の総数は、(4-2)個の数による完全順列の数、すなわちA(4-2)に等しい。 3(i)番目が4(n)でない場合は4(n)番目に置かれた3(i)を除く(4-1)個の数の並べ方の総数は (4-1)個の数による完全順列の数、すなわちA(4-1)となる。  A4=(4-1)・{A(4-1)+A(4-2)}=3×(A3+A2)  両辺をそれぞれ自力で強引に調べると確かに両辺とも9になっていて  この漸化式は正しいようですが、n=4の場合に簡単化してもいまひとつ  ピンときません。  平たく云って、この漸化式はどのような考え方に基づいて成り立って  いるのでしょうか。

  • 数列の問題で質問です。現在、学校では漸化式まで習っています。数学的帰納

    数列の問題で質問です。現在、学校では漸化式まで習っています。数学的帰納法は2学期に習います。 夏休みの宿題で、どうしてもわからないものが1題あります。教えて頂けないでしょうか。 f(x)=(x+1)(x+2)(x+3)……………………(x+n)を展開したときのx^kの係数をak( kは実際は小さい添え字です)とする。 (1)an-1を求めよ。(n-1)は添え字です。 (2)an-2を求めよ。(n-2)は 添え字です。 (3)a0+a1+a2+a3+…………+anを求めよ。 (数字、nは添え字です)

  • 余りに関する漸化式 

    整数n>=0、数列{an}をa0=1,a1=2,a(n+2)=a(n+1)+anによって定める。 anを3で割った余りをbnとし、cn=b0+b1+・・・+bnとおく。 (1)b0,b1,......b9を求めよ。 これはわかりました。 なぜ、求めさせたかもわかります。 (2)c(n+8)=cn+c7を示せ。  (1)から{bn}は周期8の数列でc(n+8)-cn=b(n+1)+......+b(n+8)となり、  右辺は順番は異なるが、1+2+0+2+2+1+0+1=9=c7となる。  よって、c(n+8)-cn=c7 このように考えましたが、答案としてこれで良いのでしょうか。  また、この漸化式をなぜ問題として、示させたのか。たぶん次ぎの(3)  につながるのだろうとは思うが、よく分かりません。 (3)n+1=<cn=<3(n+1)/2 を示せ。   (2)を使うのだろうと思うのですが、どう使っていくのかとっかかりができません。   方針だけで良いので、示してもらえるとありがたいです。

  • 行列式の漸化式からの解の出し方

    n(n > 2)次正方行列式の問題です。 |a b 0 0 0 0| |c a b 0 0 0| |0 c a b 0 0| |0 0 c a b 0| |0 0 0 c a b| |0 0 0 0 c a| ※c, a, b が直線状に並んでいるn×n行列です。それ以外はすべて0。 これについての漸化式を、次のように出しました。(正誤不明) Xn = a Xn-1 - bc Xn-2 … n, n-1, n-2 は添え字 「求めた漸化式について、a = 1, b = 1, c = 5が与えられた場合、 Xの値が1111となる最小のnを求めなさい。」 解説・答えが無いために困っています。 お願いします。

  • fortranのプログラムについて

    fortranでプログラムを作成する課題が出たのですが、やり方が全くわかりません。 何を使ってどういう順番で組めばよいか教えてください。 課題は以下のとおりです。 x^2+y^2<1を満たす領域の面積を、以下の方法で近似計算するプログラムを作成せよ。 はじめは、領域を0<x<1、0<y<1と設定し、x、y方向にそれぞれn等分に分割し、多数の正方形を用意する。 分割されたそれぞれの正方形の面積は、みな等しく1/n^2である。 各正方形の重心位置(xi,yj)は、 xi=1/2n+i/n i=0~n-1 yj=1/2n+j/n j=0~n-1 であらわされる。 個々の正方形について、その重心位置(xi,yj)が求めたい領域に含まれるかどうかを判断し、この総数から近似面積を求める。最後に、この値を4倍したもの(つまりx^2+y^2<1の近似面積)を出力することとする。 なお、i,j,nはinteger(8)で、x,y,求めたい面積等はreal(8)を用い、n=100000(nはread文で入力する形でよい)で計算することとする。 よろしくお願いします。

  • Fortran90のプログラムについて

    大学で卒論のためにFortran90でランダムウォークのプログラムを作ってるんですが…2週間悩んでるんですが、できないところがあります。 「1次元のランダムウォークにおいて、ステップ数Nとxの値を与えたときのすべての可能な歩行を数え上げるプログラムを書け」というものです。 直接ステップ数を書き込んだプログラムを基にして任意のステップ数を入力するプログラムを作ってみたんですが、うまくいきません。 integer :: a(100,20), x, i1, i2, i3 x = 0 do i1 = -1, 1, 2;do i2 = -1, 1, 2;do i3 = -1, 1, 2 x = x + 1 a(x, 1) = i1;a(x, 2) = i2;a(x, 3) = i3 end do;end do;end do end が基にしたプログラムです。これはステップ数が'3'なので実行結果は「-1-1-1,-1-11,-11-1,-11-1,-111,1-1-1,11-1,111」というxの変位の仕方が出ます。 integer, allocatable :: a(:,:) integer :: i, n, x, l print *, 'ステップ数を入力:'; read *, n allocate(a(n, 2**n)) do l = 1, n do i = -1, 1, 2 x = x + 1 a(x, l) = i end do end do end という風に作ってみたんですが、'3'を入力しても同じ結果が出ません。わかりにくい文章で申し訳ないですがどなたかご教授お願いします。

  • だれか隣接3項間漸化式について教えてください。

    中年男性です。いま数列の勉強をしています。「なるほど高校数学 数列の物語」という読本を 読んでいるのですが、手に負えないので質問させてもらいました。  漸化式  A1=2, A2=3, An+2=5An+1-6An    n>=1 ・・・(1)  を満たす数列が特性方程式X^2=5X-6の解 X=2、X=3 から 2^n-1 と3^n-1に なることは実際に確かめて確認して納得したのですが、続くくだりから判らなくなって しまいました。  そのくだりとは“そこで次に問題となるのが、上記のような等比数列以外にこの  漸化式を満たす数列があるのか、ということです。  結論からいうと、特性方程式が異なる2つの解をもつときは、特性方程式の解を  公比とする等比数列の組み合わせを考えるだけで十分です。このことは次の  ようにして判ります・・・” と書いてあり特性方程式の解以外にないことの証明が始まるものと期待して読み進めたの ですが、漸化式の変形が始まり結局    An+1-2An=(A2-2A1)3^n-1    n>=1  ・・・(2)    An+1-3An=(A2-3A1)2^n-1    n>=1  ・・・(3)  という式になり、(2)式から(3)式を引くことで、    An=(A2-2A1)3^n-1-(A2-3A1)2^n-1     n>=1  となり、条件A1=2、A2=3を代入して一般項は    An=-1×3^n-1+3×2^n-1     n>=1 ・・・(4)  となりました。  これで特性方程式の解から導かれる数列以外に解がないことの  証明になるのでしょうか。また数列2^n-1や数列3^n-1が漸化式を  満たすことはすでにnに1、2、3・・・と代入して確認したのですが  一般項が(4)式であるということはどういうことなのでしょうか。  (4)式にnに1、2、3・・・と代入して確認していませんが(成立するのでしょうが)  このあたりの事情がよく判りません。  どなたか解説して戴けないでしょうか。

  • 数列 漸化式

    A(n+1)=2A(n)+n (初項A(1)=1) という数列があるとします。 この一般項の形を求めるのに、この漸化式を満たす数列{B(n)}=αn+βを設定して、 この漸化式に代入、恒等式から{B(n)=-n-1}がわかります。 この{B(n)}の式が最初の漸化式を満たすわけですから、 A(n+1)=2A(n)+n B(n+1)=2B(n)+nの両辺を引いて A(n+1)-B(n+1)=2(A(n)-B(n))という等比数列が成り立つので、 A(n)=3*(2のn-1乗)-n-1   となると思うのですが、 ここから質問です。 なぜ最初の漸化式を満たした、B(n)=-n-1 と これまた漸化式を満たしている、A(n)=3*(2のn-1乗)-n-1 が異なっているのでしょうか? 回答お願いいたします。

  • I_(n)=∫x^n/√(x^2+a^2)dxの漸化式の求め方

    I_(n)=∫x^n/√(x^2+a^2)dxの漸化式の求め方 この積分の漸化式は I_(n)=x^(n-1)√(x^2+a^2)/n - a^2(n-1)I_(n-2)/n となります この式の求め方がわかりません 誰か教えてください お願いします

  • 数列です。わからなくて困っています。教えてください。

    数列です。わからなくて困っています。教えてください。 次の問題です。 整数からなる数列{an}を漸化式 a1=1、a2=3、an+2=3an+1-7an(n=1,2,3、・・・) で定める。 an が偶数となるnを決定せよ。