小编Nic*_*nar的帖子

在Matlab中调整绘图的大小,使图形不会被绘图窗口的边缘切断

我在Matlab中创建了一个绘图,但不幸的是,绘图窗口切断了绘图的一面.这是我用来创建绘图的代码:

% create a plot with dots and with bold sides
point = num(:, 1);
depth = num(:, 2);
hfig = plot(point, depth, '-s', 'Color', 'k', 'MarkerFaceColor', 'k', 'MarkerEdgeColor', 'k', 'MarkerSize', 10);

% make the outside of the graph bold
set(gca, 'LineWidth', axis_size);
set(gca,'FontSize', ticksize, 'FontName', fontname);
set(gca, 'Position', [0.2 0.2 0.8 0.4])
xlabel('Point Number')
ylabel('Depth (cm)')
Run Code Online (Sandbox Code Playgroud)

这是输出:

截止图像

注意情节的一面是如何切断的.或者,这是一张显示我想要实现的内容的图片:

我想要实现的目标

我只是在没有调用的情况下创建了绘图set(gca, 'Position', [0.2 0.2 0.8 0.4]),然后通过调整窗口大小来调整绘图的大小.

但是我如何在代码中执行此操作?我还想确保我可以将绘图保存为具有相同尺寸的PNG文件.我一直在玩这个set()功能的各种组合,我一直无法达到我想要的.

matlab user-interface matlab-figure

2
推荐指数
1
解决办法
3万
查看次数

在 C++ 和 Fortran 代码之间传递复数数组

我正在使用 C++ 和 Fortran 代码。C++ 代码需要调用 Fortran 子例程。Fortran 子例程的一个参数具有 Fortran 类型complex

C++ 代码位于一个文件中,Fortran 代码子例程位于另一文件中。我正在64位系统上使用gccand 。gfortranGNU/Linux

下面是显示 Fortran 子例程声明的片段(以及一些附加行):

SUBROUTINE  minp (AMP,L,L2,FMINP,PHI)
   REAL*4 AMP( L ),FMINP( L )
   COMPLEX PHI( L )
Run Code Online (Sandbox Code Playgroud)

在 C++ 文件中,我知道传递给 Fortran 代码的参数需要通过引用传递,而不是通过值传递。Fortran 子例程使用关键字在 C++ 代码(位于源代码文件的顶部)中声明为函数extern

extern "C"
{
minp_ (float *amp, int &L, int &L2, float *fminp, complex *phi);

}
Run Code Online (Sandbox Code Playgroud)

然而,该函数的最后一个参数是一个复杂的 C 数组。怎么可能:

  1. 为 C/C++ 中的复杂数组分配内存作为phi参数传入?
  2. 将数组作为参数传递给 Fortran 子例程,以便 Fortran 代码可以使用内存?

c++ fortran complex-numbers fortran-iso-c-binding

2
推荐指数
1
解决办法
1539
查看次数

在Fortran函数声明的第二行找到Star*符号

在检查一些遗留的Fortran代码时,我发现了一个子例程声明,如下所示:

       SUBROUTINE CLIP2G (fcut,TIME,NUMS,NUMG,CLIPG,CLIPGL,CLIPGR,
     * MODE,PHZ)
Run Code Online (Sandbox Code Playgroud)

*在这种情况下,这意味着什么?星号是否*意味着子程序声明跨越两行而不是一行?

fortran

2
推荐指数
1
解决办法
748
查看次数

概念性理解Fortran中的DIMENSION CLIPG(1)语句

使用一些遗留代码时,我发现了以下Fortran函数声明.下面的代码段显示了函数声明和参数声明.我相信Fortran是一种不区分大小写的语言.

 SUBROUTINE CLIP2G (fcut,TIME,NUMS,NUMG,CLIPG,CLIPGL,CLIPGR,MODE,PHZ)

      real fcut, TIME,
      integer NUMS, NUMG
      DIMENSION CLIPG(1)
      REAL clipgr(1),clipgl(1)
      INTEGER MODE
      LOGICAL PHZ
Run Code Online (Sandbox Code Playgroud)

DIMENSION CLIPG(1)声明的含义是什么?

我找到了一个链接到该声明的相当简洁的解释,但主要是作为一个C/C++程序员,我发现这个概念有点难以理解.注意如何REAL clipgr(1), clipgl(1)跟一个括号(1).这是一个长度= 1的数组REAL吗?

Stack Overflow上还有一些其他链接,但即使是在下面链接的帖子中给出的类C语法,我也不确定其含义.

Fortran功能说明

也许DIMENSION CLIPG(1)相当于REAL CLIPG声明?什么是最接近的C语言等价物?

fortran

2
推荐指数
1
解决办法
160
查看次数

在函数内部创建两个std :: vector对象,并通过引用返回它们

使用C++,我想创建一个vector对象的实例input,如main()下面的测试程序的功能所示.所述input载体中填充有数据,然后传递通过参考compute()功能.compute函数是返回两个向量对象realimag.

是否可以按照下面的代码片段中显示的方式返回这两个矢量对象?

使用编译此代码gcc会产生以下错误:

In function ‘void compute(const std::vector<double>&, std::vector<double>&, std::vector<double>&)’:
error: declaration of ‘std::vector<double> real’ shadows a parameter
error: declaration of ‘std::vector<double> imag’ shadows a parameter
Run Code Online (Sandbox Code Playgroud)

也许有更好的方法来做到这一点?这是完整的测试程序:

#include <iostream>
#include <vector>

void compute(const std::vector<double> &input,
                    std::vector<double> &real, std::vector<double> &imag)
{
        unsigned int N = input.size();
        unsigned int csize = (N / 2) + 1;

        // the error occurs here
        std::vector<double> real(csize);
        std::vector<double> imag(csize);

        for (int i …
Run Code Online (Sandbox Code Playgroud)

c++ function pass-by-reference

2
推荐指数
1
解决办法
981
查看次数

确定未在Fortran子例程顶部声明的变量类型

我正在使用传统的Fortran 77代码子例程,其中参数类型未在代码块的顶部声明.

这是一个显示子程序顶部的片段.

   SUBROUTINE BPASS(F1,F2,F3,F4,SI,N,A,IERR)
   REAL * 4 A( N ),FV( 4 )
Run Code Online (Sandbox Code Playgroud)

根据以上所述,我认为A是长度的数组N类型REAL *4,大小等于一个C float.或者,FV(4)是一个长度4与类型的数组REAL *4.

但是,F1,F2,F3,F4,SI,N,IERR如果未列出类型,有哪些类型?它似乎N应该是一个integer.

我需要知道类型,以便我可以从C++代码调用子例程.对于未声明的类型,是否存在Fortran约定?

c++ fortran types fortran77

1
推荐指数
1
解决办法
916
查看次数