「GNU Octave/Octファイル」の版間の差分

削除された内容 追加された内容
M Octファイル
古いファイルをアップしていたので修正
84 行
#include <octave/oct.h>
DEFUN_DLD (MatVecProd, args, ,
"[Ynel,M,N,is_empty,ndims,Y]=MatVecProd(A,X); A is a Matrixmatrix, X and ,Y are vectors.\n")
{
octave_value_list retval;
//Matrix A = args(0).matrix_value();
//NDArray X = args(1).array_value();
Matrix A (args(0).matrix_value());
NDArray X (args(1).array_value());
const int M=A.rows;
const int N=A.colums;
Matrix Y(M,1);
 
int nargin = args.length();
if (nargin != 2) {
print_usage();
} else { return retval;
}
if ( !error_state ) {
for (int m=0; m<M; ++m) {
Matrix A for (int n=0; n<N; ++n) { = args(0).matrix_value();
Matrix X Y(m)=A args(m,n1)*X.array_value(n);
octave_idx_type nel = }A.numel();
octave_idx_type M } = A.rows(); //Rows M
octave_idx_type N = A.columns(); //Colums N
octave_idx_type is_empty = A.is_empty();
octave_idx_type ndims = A.ndims();
Matrix Y(M,1); //NDArray Y(M); It didn't work!
if ( !error_state ) {return retval;
for ( int m=0; m < M; ++m ) {
Matrix Y(M,1m)=0;
for ( int n=0; n < N; ++n ) {
Y(m) += A(m,n) * X(n);
}
retval(0)=Y;
retval(1)=M;
retval(2)=N;
}
retval(0)=nel;
retval(1)=M;
retval(2)=N;
retval(3)=is_empty;
retval(4)=ndims;
retval(05)=Y;
return retval;
}
</source>
 
GNU Octaveテストプログラム
 
<source lang="matlab">
%TEST_MatVecProd.m
function TEST_MatVecProd
clear all;
mkoctfile MatVecProd.cc
M=4
N=2
A=1:M*N;
A=reshape(A,M,N)
X=(1:N)'
[nel,M,N,is_empty,ndims,Y]=MatVecProd(A,X)
sizeY=size(Y)
AX=A*X
ERR=Y-AX
</source>
 
実行結果
 
<source lang="matlab">
 TEST_MatVecProd
M = 4
N = 2
A =
1 5
2 6
3 7
4 8
X =
1
2
 
nel = 8
M = 4
N = 2
is_empty = 0
ndims = 2
Y =
11
14
17
20
 
sizeY =
4 1
AX =
11
14
17
20
ERR =
0
0
0
0
</source>
 
=== 複素数 ===
* [http://lists.gnu.org/archive/html/help-octave/2011-06/msg00312.html Ref]