- 締切済み
次のプログラムがわかりません。
次のプログラムがわかりません。 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)も書いてください。) よろしくお願いします。
- その他(プログラミング・開発)
- 回答数1
- ありがとう数7
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
どこが分からないのですか?
関連するQ&A
- (汎用的に)行列の積を求めるプログラム
L*M実行列A , M*N実行列B , M*N実行列C を引数として、A*BをCに代入するプログラムを作りたいと思っています。 具体的には、エラーがでるのはわかっていますがイメージとして void multiply(int L,int M,int N,double A[L][M],double B[M][N],double C[L][N]) { for(int l=0;l<L;l++) for(int n=0;n<N;n++) C[l][n]=0; for(int l=0;l<L;l++){ for(int m=0;m<M;m++){ for(int n=0;n<N;n++) C[l][n]+=A[l][m]*B[m][n]; } } } という感じです。Cを自分なりに学習したところ、「2次元配列を渡すには行or列数が少なくとも既知でないといけない」のは知識として得ているのですが、ではこの問題を回避して所望のプログラムを書け、と言われると行き詰ってしまいました。 卒論をするにあたり、種々のサイズの行列演算が必要なので、できるだけ効率的な関数を書いておきたいのですが、どうすれば一般の行列の積の演算が可能になるのでしょうか?
- ベストアンサー
- C・C++・C#
- 行列の積の計算プログラムを教えてください。
現在、BASICの勉強を独学でしていますが、なかなか理解ができないでいて困っています。 4行4列の2つの行列A、Bの積を計算するプログラムを書きたいのですが、どのように書けばよいのか教えていただけないでしょうか? DIM文を使うことはわかるのですが、使い方がよくわからないでいます。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- つぎのプログラミングがわかりません。
つぎのプログラミングがわかりません。 Tiny Basicでのプログラミングです。 (1)点数n(1~100)を引数にしたとき、その評価を返す関数とそれの使用例のプログラム。 但し、 0点~59点:不可 60点~69点:可 70点~79点:良 80点~89点:優 90点~100点:秀 とする。 関数名と引数は、Eval$(n)とする。 (2) 自然数nと素数pを入力したとき、nがpで何回割れるかと、割った商を返すプログラム。 それの使用例のプログラム。 但し、サブプログラム名と引数は、Getpexp(n,p,ep,q)とし、nに対して、pは素数、epはnをpで割れる回数、qはnをpで割れるだけ割った時の商を返す。 たとえば、Getpexp(693,3,ep,q)を呼ぶと、ep=2,q=77と返す。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- cのプログラミングで虚数を含む行列の計算の考え方がわかりません
cのプログラミングで行列の積を計算するものまではできたのですが、その行列の中に虚数を含むものの考え方がよくわかりません。 たとえば ia b c id (a,b,c,dが実数、iが虚数) というような行列があるときこれと同じものの積を何回かするプログラムを作るとき、虚数をどのような対処をすればいいのでしょうか? よろしくお願いします。
- 締切済み
- C・C++・C#
- ダイナミックプログラミング
「3個以上の行列の積を計算する時、行列の要素に対する掛け算の回数を最小にする」問題をDP法によって解く。 入力:五つの行列A1[r0,r1]、A2[r1,r2]、A3[r2,r3]、A4[r3,r4]、A5[r4,r5]の次数を自然数r0,r1,r2,r3,r4,r5として入力。 出力:M(i,j)の値をiからjまでの幅毎に幅の小さい順に出力。 というC言語の課題が出たのですがわかりません。 行列はデータを縦横長方形に並べた物で、横の並びを行、縦の並びを列と呼ぶ。行の数h、列の数kの行列AをA[h、k]と表し、h、kを行列Aの次数という。行列A1[h、k]と行列A2[m、n]の積はk=mの時、定義されていて、行列A1[h、k]と行列A2[k、n]の積はh行、n列の行列 B[h、n]となる。 行列Bのi行目のj列目(j番目)のデータは:行列A1[h、k]のi行目と行列A2[k、n]のj列目を順に、掛けて加算したものとなる。例えば、 A1[3、2]= a b A2[2、4]= G H P Q c d R S T U e f の積行列B[3、4]= aG+bR aH+bS aP+bT aQ+bU cG+dR cH+dS cP+dT cQ+dU eG+fR eH+fS eP+fT eQ+fU となります。行列A1[3、2]と行列A2[2、4]の積行列B[3、4]を計算するのに掛け算が3×2×4(2×3×4)回要ります。一般に行列 A1[r0、r1] と行列A2[r1、r2]の積行列を計算するのにr0・r1・r2回掛け算が要ります。行列の積行列を求める演算を“×”で表すと、行列A1[r0、r1]、行列A2[r1、r2]、と行列A3[r2、r3]において、 (A1[r0,r1]×A2[r1,r2])×A3[r2,r3]=A1[r0.r1]×(A2[r1,r2]×A3[r2,r3]) =A1[r0,r1]×A2[r1,r2]×A3[r2,r3] が成り立ちます。即ち、行列の積行列を求める順番はどの順番で求めても結果は同じになる。 例えば、行列A1[10,20]、行列A2[20,50]、行列A3[50,1]、行列A4[1,100]の四つの行列の積行列を求める時、 B[10,100]=A1[10,20]×(A2[20,50]×(A3[50,1]×A4[1,100])) ・・・(1) =(A1[10,20]×(A2[20,50]×A3[50,1]))×A4[1,100] ・・・(2) が成り立ちます。ところが、(1)の順に計算すると掛け算は125,000回要ります、(2)の順だと2,200回の掛け算が要ります。このように、沢山の行列の積を求める時には、積を求める順番を工夫する事が大切です。行列Aiの積行列A1[r0,r1]×A2[r1,r2]×・・×Ai[ri-1,ri]×・・×Ak[rk-1,rk]×・・×Aj[rj-1,rj]×・・×An[rn-1,rn]を求める時、最小の掛け算の数をDP法で求める。 M(i,j)を行列の積Ai[ri-1,ri]×・・×Ak[rk-1,rk]×Ak+1[rk.rk+1]×・・×Aj[rj-1,rj]を求めるのに必要な掛け算の最小数とする。行列Aiから行列Ajまでの行列積を求める時、(Ai[ri-1,ri]×・・×Ak[rk- 1,rk])×(Ak+1[rk.rk+1]×・・×Aj[rj-1,rj])のように一番最後に実行する行列の積を求める演算をi<=k M(i,j)= 0 i=jの時 = MIN {M(i,k)+M(k+1,j)+ri-1rkrj} i<jの時 i<=k<j となる。このM(i,j)をDP法でM(1,n)まで順に求める。 という感じなのですがプログラミングにする場合どうしたらいいのでしょうか? begin for i ←1 until n do mii ←0; for l ←1 until n-1 do fori ←1 until n-l do begin j←i+l; mij←MIN(mik + mk+1,j + ri-1*rk*rj) end; write m1n end n個のアルゴリズムはたぶん上記のようになると思います。
- 締切済み
- C・C++・C#
- 次の問題がわかりません
次の問題がわかりません 線形代数の問題です A∈M(R):l*m行列 B∈M(R):m*n行列 について rank(AB)<=rankA,rankB であることを示しなさい(<=は<イコールです) 何かの定義を利用して解く気がするのですがどの定義を利用するかわかりません 丁寧に教えていただけたら幸いです
- ベストアンサー
- 数学・算数
- 行列の問題!
すみません、、、どなたか以下の問題を解いて頂けませんか。 答えがないので、正直お手上げ状態です。 ヒントでも構いません、、、、宜しくお願いします。 ------------------------------------------------------------------ すべての実数からなる集合をRと表す。 行列を要素にもつ2つの集合M, Nを M = | | a b | a, b, c, d ∈ R | . | | c d | | N = | | r -s | r, s ∈ R | .. | | s r .| .| と定める。更に、Mの要素 A = | a b | に対し、 A' = | a c | とおく。 .... | c d | .| b d | (1) A, B ∈ N ならば、AB ∈ N であることを示せ。 (2) A, B ∈ N ならば、(AB)' = A'B' となることを示せ。 また、(CD)' ≠C'D' となる M の要素 C, D の組を一つ求めよ。 (3) N のすべての要素と交換可能な M の要素は、必ず N に属することを示せ。 ただし、行列 X と Y が交換可能であるとは、 XY = YX のこととする。 ------------------------------------------------------------------
- ベストアンサー
- 数学・算数
- つぎのプログラミングがわかりません。
つぎのプログラミングがわかりません。 Basicでのプログラミングです。(Visual Basicではありません。) (1)点数n(1~100)を引数にしたとき、その評価を返す関数とそれの使用例のプログラム。 但し、 0点~59点:不可 60点~69点:可 70点~79点:良 80点~89点:優 90点~100点:秀 とする。 関数名と引数は、Eval$(n)とする。 (2) 自然数nと素数pを入力したとき、nがpで何回割れるかと、割った商を返すプログラム。 それの使用例のプログラム。 但し、サブプログラム名と引数は、Getpexp(n,p,ep,q)とし、nに対して、pは素数、epはnをpで割れる回数、qはnをpで割れるだけ割った時の商を返す。 たとえば、Getpexp(693,3,ep,q)を呼ぶと、ep=2,q=77と返す。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)