【问题标题】:gsl complex matrix * complex vectorgsl 复矩阵 * 复向量
【发布时间】:2013-05-15 18:50:23
【问题描述】:

谁能帮我弄清楚如何做这个操作。我正在查看文档,但自从我不得不做任何线性代数类型的东西以来,我有点迷茫了。

我有一个名为 Y 的 14x14 复数矩阵和一个名为 I 的复数向量。我需要将它们相乘并将结果设置为一个名为 IL 的复数向量。

到目前为止,我已经弄清楚我需要使用:

gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex alpha, const 
                 gsl_matrix_complex * A, const gsl_vector_complex * x, const  
                 gsl_complex beta, gsl_vector_complex * y)

但我不知道去哪里了。不知道去哪里。像这样的东西?但是什么是 alpha 和 beta?

gsl_blas_zgemv(CblasNoTrans, ???, &Y, &I, ???, IL); 

【问题讨论】:

  • 没有CblasNOTrans 的函数是 y := alphaAx + beta*y 所以我称之为gsl_blas_zgemv(CblasNoTrans, GSL_COMPLEX_ONE, &Y, &I, GSL_COMPLEX_ZERO, IL);
  • 我不确定你的意思。
  • 哦。我懂了。但是什么是 GSL_COMPLEX_ONE 和 GSL_COMPLEX_ZERO?我需要定义这些吗?如果需要,如何定义?
  • gnu.org/software/gsl/manual/html_node/BLAS-Examples.html 有一个 double 的示例此外,如果您查看 BLAS netlib.org/blas/zgemv.f 的来源,您可以看到正在发生的事情。在你的情况下IL = yY = AI = x,你不想要IL = Y*I 吗? GSL_COMPLEX_ONE 和 ZERO 在gsl_complex_math.h 中定义。
  • 没关系,我修好了。谢谢您的帮助。你是一个救生员!

标签: c matrix gsl


【解决方案1】:

没有看到你实际在做什么,看起来你没有包含正确的标题。因为以下对我来说没有错误:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <gsl/gsl_blas.h>
#include <gsl/gsl_complex_math.h>

int
main(int argc, char **argv)
{

    int size = 14;
    gsl_matrix_complex *A = NULL;
    gsl_vector_complex *x = NULL;
    gsl_vector_complex *y = NULL;

    A = gsl_matrix_complex_alloc(size, size);
    x = gsl_vector_complex_alloc(size);
    y = gsl_vector_complex_alloc(size);

    gsl_matrix_complex_set_all(A, GSL_COMPLEX_ONE);
    gsl_vector_complex_set_all(x, GSL_COMPLEX_ONE);
    gsl_vector_complex_set_all(y, GSL_COMPLEX_ZERO);

    gsl_blas_zgemv(CblasNoTrans, GSL_COMPLEX_ONE, A, x,
            GSL_COMPLEX_ZERO, y);

    return(EXIT_SUCCESS);

}

并编译

gcc -o test -I/opt/local/include/gsl -L/opt/local/lib -lgsl -lgslcblas test.c

(是的,我在使用 MacPorts 的 Mac 上)。

【讨论】:

  • 哦,是的,我错过了 gsl/gsl_complex_math.h,所以我只是定义自己的,它有效,但现在我知道 GSL_COMPLEX_ONE 和 GSL_COMPLEX_ZERO 在那个标题中,我将使用它。谢谢
  • -I/opt/local/include/gsl -L/opt/local/lib -lgsl -lgslcblas 可以替换为 `gsl-config --cflags --libs`,包括反引号。
猜你喜欢
  • 2019-04-27
  • 2021-07-24
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2013-02-02
  • 2021-08-08
  • 2014-03-01
相关资源
最近更新 更多