• 締切済み

プログラム

以下のプログラムを作る際、どうすれば良いでしょうか? 途中までは作ってみたのですが、そこから後がわかりません。 2行2列の2つの行列A,Bの積を求めるSubroutine, seki( A, B, C ) を作成。(註:Cには、AとBの積を計算した結果が入っているものとする)    real*8 A(2,2), B(2,2), C(2,2)    write(6,*) “A(1,1)=“    read(5,*) A(1,1)    write(6,*) “A(1,2)=“    read(5,*) A(1,2)    write(6,*) “A(2,1)=“    read(5,*) A(2,1)    write(6,*) “A(2,2)=“    read(5,*) A(2,2)    write(6,*) “B(1,1)=“    read(5,*) B(1,1)    write(6,*) “B(1,2)=“    read(5,*) B(1,2)    write(6,*) “B(2,1)=“    read(5,*) B(2,1)    write(6,*) “B(2,2)=“    read(5,*) B(2,2)     call seki( A, B, C)    write(6,*) “C=“    do 10 i=1, 2    write(6,100) C(1,1), C(1,2) 10  continue 100 format( “|”,e15.7, e15.7, “|”)    stop    end    subroutine seki( A, B, C ) ↓ ↓以下がわかりません。どなたか分かる方ぜひ、教えてください。 よろしくお願いします。 使ってるエディタはxemacsです。

みんなの回答

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

xemacs をエディタとして使っているって言われても, 全然情報にならないんだけどなぁ. さておき, 本当にそれだけの問題だったら C = MATMUL(A, B) で終わりだねぇ. もちろん, 本当にこれで出して大目玉もらっても責任とれんけど.

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

>↓以下がわかりません。どなたか分かる方ぜひ、教えてください。 ・・・って、行列の積を求める部分まるごとじゃないですか。 駄目ですよ。 こういう場合、メイン部分は大抵設問として与えられているはずだから、 結局何も作っていない・考えていない って事だと思うんですが。 行列計算の方法は以下の通り。 http://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97 |a11 a12|×|b11 b12|=|a11*b11+a12*b21 a11*b12+a12*b22| |a21 a22| |b21 b22| |a21*b11+a22*b21 a21*b12+a22*b22| なので、がんばって。

関連するQ&A

  • 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

  • プログラムの勉強をしているのですが・・・・・・

    以下のプログラムを組もうとしているのですが、ある所から分からなくなりました。ぜひ、教えてください。 配列x(1)=3, x(2)=10, x(3)=4, x(4)=4, x(5)= 1 の最大値と最小値平均値を計算する関数副プログラムmaxmin( x, N, xmax, xmin, xave)を作る。  integer x(5) N=5 x(1)=3 …   ←省略 call maxmin( x, N, xmax, xmin, xave) write(6,*) “max=", xmax write(6,*) “min=“, xmin write(6,*) “xave=“, xave end subroutine maxxmin(x,N,xmax,xmin,xave) ここから先が分かりません。どうしたら良いのでしょうか? 分かる方、ぜひ教えてください。 よろしくお願いします。 ちなみに使ってるエディタはxemacsです。

  • 行列式のプログラム

    適当な形式にて初期化された2つの2次元配列により、3×4行列Aと4×3行列Bの要素を表現し、積ABを求めて表示させるプログラムなんです。 ここまでならなんとかなるかもと思ったんですが、行列はAはプログラム中で以下の数値で初期化して、行列Bの要素はキーボードから入力させるようにしないといけないんです。。   2.0 3.0 4.0 5.0 A= 3.0 4.0 5.0 6.0   1.0 2.0 3.0 4.0 なんですけれども、教えていただけたらうれしいです。。 お願いします!!

  • このC言語プログラムでどこをいじればいいのか教えて下さい。

    このC言語プログラムでどこをいじればいいのか教えて下さい。 //2 つの整数を入力し、和、差、積、商を計算し表示する。 #include<stdio.h> int main(void) { int a,b,wa,sa,seki,syou; scanf("%d %d",&a,&b); wa=a+b; sa=a-b; seki=a*b; syou=a/b; printf("%d+%d=%d\n",a,b,wa); printf("%d-%d=%d\n",a,b,sa); printf("%d*%d=%d\n",a,b,seki); printf("%d/%d=%d\n",a,b,syou); return (0); } これを繰り返し実行する形にしたいです。できれば今勉強中のwhileでお願いします。 また間違っている部分、指摘などありましたら宜しくお願いします。 大きな値をいれると足し算がダメになったり、割り算がおかしくなります。 また実数の時はどうなのかなど教えて下さい。

  • 楕円のプログラム(一般→標準形)について

    こんばんわ、質問させて頂きます。 この掲示板の「楕円のプログラム」を参照して楕円のプログラムを組みました。(EXCELを用いて近いうちにCで組む予定です。) ある計測点12点より 楕円の一般方程式に当てはめ、 Ax^2+By^2+Cx+Dy+E=1 として各値A,B,C,D,Eを転置、逆行列、積を用いて解きました。 そして、この値は A=1/a^2=-3.16665e-7 B=1/b^2=1.4901e-8 C=-2c/a^2=0 D=-2d/b^2=-2.32831e-10 E=c^2/a^2+d^2/b^2=1 となりました。ここで、小文字a,b,c,d,eは楕円の方程式の標準形 (x-c)^2/a^2+(y-d)^2/b^2=1 となりますが、 Aの値は負となります。つまりa^2は虚数解を持ちます。 これはどういう意味を持っているのでしょうか? ご教授よろしくお願いします。 用いた計測座標(x,y) 0.004343      0.013968823 0.00314534 0.01454172 0.005537      0.016603472 0.00640595 0.019503824 0.00554108 0.022148798 0.00296192 0.024042826 0.000376075 0.024724047 -0.002755  0.024067637 -0.0051356 0.022425276 -0.0061896 0.019473675 -0.0051498 0.016384854 -0.0028986 0.014560819

  • 次のプログラムがわかりません。

    次のプログラムがわかりません。 Tiny Basicでのプログラミングです。 (m,n)型行列Aと(n,r)行列Bに対して、その積Cを返すサブプログラム Sub MatMul(A(),B(),C(),m,n,r) とそれぞれを動作させるプログラム。(MatRead,MatPrintに対応する2次元版のMatRead(A(),n,m),MatPrint(A(),n,m)も書いてください。) よろしくお願いします。

  • fortran subroutineについて

    fortran subroutineについて c c c kk.f c c integer a,b a=0 do 10 b=1,9,2 a=a+1 print * ,a 10 continue write(*,*) ,'No.1' call sub(a,b) stop end c subroutine sub(a,b) write(*,*) ,'No.2' return end  簡単に上記のようにつくってg77でコンパイルしたのですが、call文とsubroutine文の部分で警告が出ました。  実行ファイルは問題なく動作をするのですが、このままでもいいのでしょうか?ちなみに、警告文を読んでも僕には理解できませんでした。  以下、警告文です。 kk.f: In subroutine `sub': kk.f:13: warning: call sub(a,b) 1 kk.f:17: (continued): subroutine sub(a,b) 2 Argument #1 (named `a') of `sub' is one type at (2) but is some other type at (1) [info -f g77 M GLOBALS] kk.f:13: warning: call sub(a,b) 1 kk.f:17: (continued): subroutine sub(a,b) 2 Argument #2 (named `b') of `sub' is one type at (2) but is some other type at (1) [info -f g77 M GLOBALS]

  • c言語 行列の積に関して

    <問>  4行3列の行列aと3行4列の行列bの積を、4行4列の行列cに格納する関数を作成せよ。  void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) 入門レベルのスキルしかありません。 上手く行列の積のプログラムが組めません。 行列の積の計算結果が何も出てきません。 どの様にしたら良いかご指導の程、宜しくお願いします。 <プログラム>  void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) { int i, j, k; for (i = 0; i < 4; k++) { for (j = 0; j < 4; i++) for (k = 0; k < 3; j++) c[i][j] = c[i][j] + (a[i][k] * b[k][j]); } } void mat_print(const int m[4][4]) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) printf("%4d", m[i][j]); putchar('\n'); } } int main(void) { int i, j ,k; int tensu1[4][3]; int tensu2[3][4]; int seki[4][4]; for(i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { scanf("%d", &tensu1[i][j]); } putchar('\n'); } for(i = 0; i < 3; i++) { for(j = 0; j < 4; j++){ scanf("%d", &tensu2[i][j]); } putchar('\n'); } putchar('\n'); mat_mul(tensu1, tensu2, seki); puts("行列の積"); mat_print(seki); return 0; }  

  • プログラミング Fortran

    以下のプログラムの空白部分が分かる方、是非力を貸して下さい!!(> <) 次の数列ai=1,…,N(1≦N≦100)                  ai=1, ai+1=2ai-3 に対して               S=Σai(※Σの上はN、下はi=1) を計算・表示するプログラムは以下のようになる。ここでは整数Nは端末から入力する。 common num,a(100),sum read(5,*) num call [ ] call pqrstu write(6,*) ‘a=’,(a(i),i=1,num) write(6,*) ‘sum=’,sum end * subroutine abcdef common num,a(100) a(1)=[ ] do 20 i=1,num a(i+1)=a(i)*2.0-3.0 20 continue end * subroutine pqrstu common [ ] sum=[ ] do 20 i=1,num sum=[ ] 20 continue end よろしくお願いします!!

  • 線形代数?。

    <行列の積>  A、B、Cは互いに積が出来るとして、 (AB)C=A(BC)を証明する。 当り前すぎて、わかりません; Σ~を使えばいいのでしょうか? よろしくお願いします。