3行3列の行列と3次元ベクトルの積を求めるプログラム。
途中まで作ったんですけど、oid MatPro(double(*Mat)[3], double *Vec, double *ReVec)とvoid MatPro(double(*Mat)[3], double *Vec, double *ReVec)ここの宣言の後から何を書けばいいのかよくわからなくて
教えてほしいです。
#include<stdio.h>
void MatPro(double(*Mat)[3], double *Vec, double *ReVec);
double innerp(int n, double *a, double *b);
int main(void)
{
double Mat[3][3] = { {12,34,82},{43,80,-54},{56,31,78}};
double Vec[3] = { 2,64,32 }, ReVec[3];
int i;
Vec =ReVec (Mat, Vec, ReVec);
printf("output=Mat[3][3](input)*Vec[3](input)\n");
for (i = 0;i < 3;i++)
printf("|%7.2f| |%6.2f %6.2f %6.2f| |%6.2f|\n", *(ReVec + i), *(*(Mat + i)), *(*(Mat + i) + 1), *(*(Mat + i) + 2), *(Vec + i));
return 0;
}
void MatPro(double(*Mat)[3], double *Vec, double *ReVec)
{
}
double innerp(int n, double *a, double *b)
{
}
ポインタ
Re: ポインタ
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
次に、行列とベクトルの積を求める(数学上の)方法(もしくは定義)はわかりますか?
それがわかったら、それを求める具体的な方法(アルゴリズム)はわかりますか?
試してみてエラーが出たプログラムがあるなら、それを提示していただけると修正できるかもしれません。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
まず、MatPro(とinnerp : MatProが2個あるが、innerpも欲しかったところをコピペミスした?)が何をする関数なのかを教えてほしいです。みき さんが書きました:oid MatPro(double(*Mat)[3], double *Vec, double *ReVec)とvoid MatPro(double(*Mat)[3], double *Vec, double *ReVec)ここの宣言の後から何を書けばいいのかよくわからなくて
教えてほしいです。
次に、行列とベクトルの積を求める(数学上の)方法(もしくは定義)はわかりますか?
それがわかったら、それを求める具体的な方法(アルゴリズム)はわかりますか?
試してみてエラーが出たプログラムがあるなら、それを提示していただけると修正できるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ポインタ
このプログラムがC言語だと仮定すると、ここでのReVecは関数ではなく配列なので、
という行はコンパイルエラーになります。みき さんが書きました: Vec =ReVec (Mat, Vec, ReVec);
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- purin52002
- 記事: 235
- 登録日時: 8年前
- 連絡を取る:
Re: ポインタ
ベクトルと行列の掛け算は内積を使って計算できますね。
内積は同じ次元のベクトルの各要素を掛け合わせたものの総和で、
n次元のベクトルA,Bの場合、
ΣA(i)*B(i)|i=1~n
になると思います。(あってるかな?)
これはfor文をn回回して、A,Bの同じindexの要素をかけたものを足し合わせればいいと思います。
次に、ベクトルと行列の掛け算です。
文字だけで説明するのが私ではちょっと難しいので、説明は省略します^^;
とりあえず計算方法だけ説明します。
ベクトルA,Bの内積をdot(A,B)として、ベクトルXと行列Y(i行j列)の掛け算は
[ dot( X,Y( :,1 ) ) dot( X,Y( :,2 ) ) ... dot( X,Y( :,j ) ]
ここでXの次元数とYの高さは同じ必要があります。
これはfor文をj回回して、XとYのj列目との内積を計算し、配列に格納すればいいと思います。
内積は同じ次元のベクトルの各要素を掛け合わせたものの総和で、
n次元のベクトルA,Bの場合、
ΣA(i)*B(i)|i=1~n
になると思います。(あってるかな?)
これはfor文をn回回して、A,Bの同じindexの要素をかけたものを足し合わせればいいと思います。
次に、ベクトルと行列の掛け算です。
文字だけで説明するのが私ではちょっと難しいので、説明は省略します^^;
とりあえず計算方法だけ説明します。
ベクトルA,Bの内積をdot(A,B)として、ベクトルXと行列Y(i行j列)の掛け算は
[ dot( X,Y( :,1 ) ) dot( X,Y( :,2 ) ) ... dot( X,Y( :,j ) ]
ここでXの次元数とYの高さは同じ必要があります。
これはfor文をj回回して、XとYのj列目との内積を計算し、配列に格納すればいいと思います。
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^