• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fortran 乱数を用いてcosθをベクトリから求めるプログラム)

fortran 乱数を用いてcosθをベクトルから求めるプログラム

このQ&Aのポイント
  • fortranで乱数を使ってベクトルからcosθを求めるプログラムのコンパイルエラーについて
  • 乱数を配列に格納し、ベクトルからcosθを求めるプログラムをfortranで書きました。しかし、コンパイルしてみるとrandom_numberの設定がおかしいようでエラーが発生します。問題の原因がわからず困っています。
  • fortranのプログラムで乱数を用いてベクトルからcosθを求める方法を教えてください。

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

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

「Undefined」といっているんだから, そんな名前の手続が見付からなかったということですよ. あなたが使っている処理系に「random_number」という手続は存在するのですか? あるなら, 標準ではリンクされないどこかのライブラリにあるはずなので, 処理系のマニュアルをひっくりかえして探してください. ないのであれば, 自分で作ってください.

528612
質問者

お礼

確かにそうですね。いろいろ試した結果、私の処理系にrandom_numberという手続きはありました。ただ、プログラム上のrandom_numberのxとyの設定が誤っていたようです。ちゃんと再度設定し直したら、うまくコンパイルできて実行結果も正しく表示されました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • fortran cosθをベクトリから求めるプログラム

    ベクトルからcosθを求めるペログラムを作ってみたのですが、実際計算した値と実行結果の値が一致しないのですが。プログラム上に問題があるのでしょうか?教えて下さい。よろしくお願いします。 module subprogs implicit none contains function vec_cos(a,b) result(vcos) real(8), intent(in) :: a(:), b(:) real(8) ab, vcos if (size(a) /= size(b)) stop ' er : size(a) /= size(b) ' ab = dot_product(a,a) * dot_product(b,b) if (ab == 0.0d0) then vcos = 0.0d0 else vcos = dot_product(a,b)/sqrt(ab) endif end function vec_cos end module subprogs program main use subprogs implicit none real(8) :: x(1:2) = (/1.2d0, 3.4d0/), y(1:2) = (/5.6d0, 7.8d0/) write(*,*) 'cos = ', vec_cos(x,y) end program main 実行結果 cos = 0.9601163787292428

  • fortran 実行結果がうまく表示されない

    グローバルモジュールを用いてプログラムを書いたのですが実行結果が表示されません、プログラム中に問題があるのでしょうか?教えて下さい。 module params implicit none integer :: n = 2 end module params module sample implicit none contains subroutine swapvec3(x,y) use params real(8), intent(inout) :: x(n), y(n) real(8) tmp(n) tmp(1:n) = x(1:n) x(1:n) = y(1:n) y(1:n) = tmp(1:n) end subroutine swapvec3 end module sample program main use sample implicit none real(8), allocatable :: a(:), b(:), tmp(:) integer n allocate(a(n),b(n),tmp(n)) call swapvec3(a,b) call random_seed call random_number(a) call random_number(b) call random_number(tmp) write(*,*) ' a = ', a(1:n) write(*,*) ' b = ', b(1:n) write(*,*) ' tmp = ', tmp(1:n) end program main 実行結果  a = b = tmp =

  • fortran グラムシュミットの直行化

    グラムシュミットの直行化を行うプログラムを書いたのですが、実行結果の答えで2列目1行目の答えがマイナスになるはずなのになっていません。自分の計算ではマイナスになったのですが、プログラムに問題があるのでしょうか?教えて下さい。よろしくお願いします。 module subprogs implicit none contains function normal_vec2(v,n) result(nv) integer, intent(in) :: n real(8), intent(in) :: v(n) real(8) nv(n), vl vl = sqrt(dot_product(v,v)) if (vl == 0.0d0) then nv(:) = 0.0d0 else nv(:) = v(:) / vl endif end function normal_vec2 end module subprogs module subprogs2 use subprogs implicit none contains function gs(a,n) result(e) integer, intent(in) :: n real(8), intent(in) :: a(n,n) real(8) e(n,n), dotp integer k, j e(1:n,1) = normal_vec2(a(1:n,1:1),n) do k = 2, n e(1:n,k) = a(1:n,k) do j = 1, k-1 dotp = dot_product(a(1:n,k),e(1:n,j)) e(1:n,k) = e(1:n,k)-dotp*e(1:n,j) enddo e(1:n,k) = normal_vec2(a(1:n,k:k),n) enddo end function gs end module subprogs2 program main use subprogs use subprogs2 implicit none real(8), allocatable :: q(:,:) integer :: n = 2 allocate(q(n,n)) q(1,1:2) = (/2.0d0,1.0d0/) q(2,1:2) = (/1.0d0,2.0d0/) write(*,*) gs(q,n) end program main 実行結果 0.8944271909999159 0.4472135954999579 0.4472135954999579 0.8944271909999159                   ↑                             実計算では-(マイナス)がつく

  • fortran 固有値を求めるプログラム

    2x2の実行列の固有値を求めるモジュール関数の中で、d > 0 のときに出てくる sign(squt(d), -b)の値が示す意味と eval(2) = cmplx(c/e,0.0d0) でなぜ c/eの値が入るのかがわかりません。教えて下さい。よろしくお願いします。 プログラム module subprogs implicit none contains function eval2x2mat(a) result(eval) real(8), intent(in) :: a(:,:) complex(8) eval(2) real(8) b, c, d, e if (size(a,1) /= size(a,2)) stop ' not square ' if (size(a,1) /= 2) stop ' not 2x2 matrix ' b = -0.5d0*(a(1,1)+a(2,2)) c = a(1,1)*a(2,2)-a(1,2)*a(2,1) d = b**2-c if ( d < 0.0d0 ) then eval(1) = cmplx(-b,sqrt(-d)) eval(2) = conjg(eval(1)) else if ( d > 0.0d0 ) then e = -b+sign(sqrt(d),-b) ←ここの部分 eval(1) = cmplx(e,0.0d0) eval(2) = cmplx(c/e,0.0d0) else          ↑ここの部分 eval(1) = cmplx(-b,0.0d0) eval(2) = eval(1) endif end function eval2x2mat end module subprogs program main use subprogs implicit none real(8), allocatable :: a(:,:) integer :: n = 2 allocate(a(n,n)) a(1,1:2) = (/-1,1/) a(2,1:2) = (/-1,-1/) write(*,*) a(:,:), eval2x2mat(a) end program main

  • fortran モンテカルロ法

    モンテカルロ法により円周率πを計算するプログラムを作ったのですが、以下のプログラムでモンテカルロ法から推定された円周率piの値が実行すると大きな数字になってしまって、うまく計算できてない見たです。式に問題があるのでしょうか?教えて下さい。 rogram list1_9 implicit none real(8) x, y, pi, pi0 integer :: n, i, im = 2**20 pi0 = 2.0d0*acos(0.0d0) n = 0 do i = i, im call random_number(x) call random_number(y) if(x ** 2 + y ** 2 <= 1.0d0) n = n + 1 enddo pi = 4.0d0*dble(n)/dble(im) write(*,*) ' pi, pi0, er = ', pi, pi0, pi-pi0 end program list1_9

  • Cos関数について

    次の式をXについて解くにはどうしたらいいでしょうか? Y=A*Cos(Π/B*X) どなたか教えてください。教えてください。

  • Sin, Cosを使った証明

    Asin(x)+Bcos(x) が k*sin(x+y)でしめすことができることを証明し、またk, cos y, and sin y をAとBを使って表せという問題があるのですが、わかりません。 最初の証明の方は、k*sin(x+y)を展開して k*sin(x+y) = ksin(x)cos(y) + kcos(x)sin(y) Aをkcos(y)、Bをksin(x)とする。 つまり、Asin(x) + Bcos(x) というやりかたでやってみたんですが、k, cos y, and sin y をAとBを使って表せというのができません。 何かいい方法ありませんか?

  • y=cos(x+7π/18)+cos(x+π/18)の最大値と最小値、

    y=cos(x+7π/18)+cos(x+π/18)の最大値と最小値、そのときのxの値を求めよ。ただし0≦x<2πとする。という問題で 和を積に直す公式、cosA+cosB=2cos(A+B)/2*cos(A-B)/2という公式を使用して解くのかと思ったのですが A=α+β、B=α-βという場合のみ適用できるものですよね?だとしたらどのようにして解くのですか?どなたか教えていただけないでしょうか?

  • FORTRAN…これってどんなプログラムになりますか??

    DO 10 I=1,47 CALL SUB1 10 CONTINUE STOP END SUBROUTINE SUB1 DIMENSION B1(3),B2(3),C(3),L(3),P(3) CHARACTER*12 A READ(5,50) A,B1,B2 50 FORMAT(A12,3F8.1,3F7.1) X=1.0 DO 11 K=1,300 Y1=(-1.0) Y2=0.0 DO 12 J=1,3 L(J)=(-NINT(B1(J)*10.0/B2(J))) Y1=Y1+X**L(J) Y2=Y2+L(J)*X**(L(J)-1) 12 CONTINUE W=X-Y1/Y2 IF(ABS(W-X).LT.1E-10) GO TO 13 X=W 11 CONTINUE 13 WO=W DO 14 J=1,3 C(J)=WO**L(J) 14 CONTINUE R1=0.0 DO 15 J=1,3 R2=R1+B2(J) R1=R2 15 CONTINUE D=0.0 DO 16 J=1,3 P(J)=B2(J)/R1 D=D+P(J)*ALOG(P(J)/C(J)) 16 CONTINUE E=0.0 DO 17 J=1,3 E=E+(B1(J)/B2(J)*P(J)) 17 CONTINUE WRITE(*,200) A,B2,P,E,D 200 FORMAT(1H,2X,A12,3X,3(F7.1,2X),4X,3(F9.6,X),4X,F9.6,2X,F9.6) RETURN END

  • cos(x/2)*cos(x/2^2)*・・・・・cos(x/2^n)

    実数x及び自然数nに対して a_n=cos(x/2)*cos(x/2^2)*・・・・・cos(x/2^n) とする。 (1)2^n*a_n*sin(x/2^n)の値はnと無関係に一定であることを証明せよ。 (2)log|a_n|をxで微分することにより、 Σ(n=2~∞)1/2^n *tan(π/2^n)=1/π であることを証明せよ この問題に取り組んでいます。 (1)で2^n*a_n*sin(x/2^n)の計算を行っていて、いろいろな三角関数の公式を利用してみたのですが全然うまくいきません。「nと無関係」ということはnが消えればいいということだと思うのですが・・・。 (2)はloga_nを微分したところ -1/2 tan(x/2) - 1/2^2 tan(x/2^2) -・・・となったのですがここから証明すべき式に変形するにはどうしたらいいのでしょうか? 回答いただければありがたいです。よろしくお願いします