【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18595

配列の定式化
投稿者---かぶ(2004/12/08 19:19:19)


以前こちらの過去ログから複素数の逆行列を求めてみました。しかし成分が対角行列と上1、下1対角行列以外はゼロをいれるので、もっとすっきりさせたいと思っています。以下のようなプログラムをいれることは考えているのですが、「定式化されていない項はゼロ」という命令はどのようにすればよいのでしょうか。

int i, j, m;
j=i-1, m=i+1;
const int A[j][i]=std::complex<double>(1.0,0);
const int A[i][i]=std::complex<double> (-2.0,2.0);
const int A[i][m]=std::complex<double>(1.0,0);

ここからは逆行列を求めるプログラムです。

#include <iostream>
#include <complex>

typedef std::complex<double> Csd;

void inv_complex(Csd a[3][3], int n);


int main()
{
Csd A[3][3], invA[3][3], res[3][3];
int i, j;
A[0][0]=Csd(-2,2) ;A[0][1]=Csd(1,0); A[0][2]=Csd(0,0);
A[1][0]=Csd(1,0); A[1][1]=Csd(-2,2);A[1][2]=Csd(1,0);
A[2][0]=Csd(0,0); A[2][1]=Csd(1,0); A[2][2]=Csd(-2,2);

for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
invA[i][j] = A[i][j];

inv_complex(invA, 3);

for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
std::cout << invA[i][j] << " ";
std::cout << std::endl;
}
}

void inv_complex(Csd a[3][3], int n)
{
Csd p, q;
int i, j, k;

for (k = 0; k < n; k++) {
p = a[k][k];
a[k][k] = Csd(1, 0);
for (j = 0; j < n; j++) a[k][j] /= p;
for (i = 0; i < n; i++)
if (i != k) {
q = a[i][k];
a[i][k] = Csd(0, 0);
for (j = 0; j < n; j++) a[i][j] -= q * a[k][j];
}
}
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列の定式化 18604 江戸門電鉄 2004/12/08 23:25:20
<子記事> Re:配列の定式化 18624 かぶ 2004/12/10 15:00:38


No.18604

Re:配列の定式化
投稿者---江戸門電鉄(2004/12/08 23:25:20)


プログラムの中味は見てませんが、
行数と列数は3固定ですか。
でしたら、クラーメルの公式を使うだけだと思うけど。

あと、配列の定式化と言う言葉の意味が良くわかんないけど。
用語は正確に使いましょう。


この投稿にコメントする

削除パスワード

No.18624

Re:配列の定式化
投稿者---かぶ(2004/12/10 15:00:38)


>行数と列数は3固定ですか。
これは100×100くらいを考えています。

>あと、配列の定式化と言う言葉の意味が良くわかんないけど。
>用語は正確に使いましょう。
ご指摘ありがとうございます。初心者なものですいません・・・。
「行列項の定数化」と言えばよいでしょうか?
もう一度改めてレスを立てたいと思います。
返信ありがとうございました。


この投稿にコメントする

削除パスワード

No.18625

Re:配列の定式化
投稿者---REE(2004/12/10 15:14:15)


定数配列の初期化で、簡単に書ける方法はありません。
std::complexの場合は配列で宣言すれば、初期値は0になりますので必要なところだけ変更すればよいです。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧