小编Boo*_*man的帖子

如何在 C++ 中使用 Julia 特殊函数

嗨,我想在 C++ 中使用 Julia 实现的特殊函数(https://juliamath.github.io/SpecialFunctions.jl/dev/functions_list/)。

按照手册(https://docs.julialang.org/en/v1/manual/embedding/)到目前为止我无法实现。

对于像sqrt我们这样的函数

jl_function_t *func1 = jl_get_function(jl_base_module,"sqrt");
Run Code Online (Sandbox Code Playgroud)

以类似的方式module,这些特殊功能是什么?

我试着用

jl_function_t *func2 = jl_get_function(jl_specialfunctions_module,"polygamma");
Run Code Online (Sandbox Code Playgroud)

显示以下错误:

signal (11): Segmentation fault
in expression starting at none:0
jl_mutex_wait at /buildworker/worker/package_linux64/build/src/locks.h:24 [inlined]
jl_mutex_lock at /buildworker/worker/package_linux64/build/src/locks.h:94 [inlined]
jl_get_binding_ at /buildworker/worker/package_linux64/build/src/module.c:280
jl_get_global at /buildworker/worker/package_linux64/build/src/module.c:561
jl_get_function at ./test (unknown line)
main at ./test (unknown line)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
_start at ./test (unknown line)
Allocations: 2544 (Pool: 2535; Big: 9); GC: 0
Run Code Online (Sandbox Code Playgroud)

手册中并不清楚应该如何在 c++ 中使用这些特殊函数。任何线索将不胜感激! …

c++ julia

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

如何将多行合并为一行,但仅适用于由空白行分隔的行块

我正在尝试将多行合并为一条,但要附加其他条件。

我的输入文件如下所示:

Dm1*(  stuff1 + stuff2 -
stuff3 + stuff4)

+ D1*(D1stuff1 + D1sstuff2 + D1stuff3 + D1stuff4 +
  D1stuff5 - 
  D1stuff6 )

+ D2*(D2stuff)
Run Code Online (Sandbox Code Playgroud)

因此,存在多行也由空白行分隔的行。所有*stuff*包含长而复杂的表达式,也可以包含括号。

我想保留空白行,但合并其他多行。

预期的输出是

Dm1*(  stuff1 + stuff2 - stuff3 + stuff4)

+ D1*(D1stuff1 + D1sstuff2 + D1stuff3 + D1stuff4 + D1stuff5 - D1stuff6 )

+ D2*(D2stuff)
Run Code Online (Sandbox Code Playgroud)

当前所有尝试

awk '{printf("%s",$0)}' 
Run Code Online (Sandbox Code Playgroud)

将所有内容放在一行中。我应该遍历行还是有什么方法可以识别空白行之间的块并将其应用于其中?

bash awk sed sh

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

如何更改特定语言的评论风格

我是 VScode 新手。我想知道是否有任何方法可以更改line comment特定文件扩展名的快捷键的行为。特别是,我有一个名为file.frm. 现在该文件类型的行注释应该是*ie

 cat file.frm
 * This is a comment
 // This is not a comment
 // However ctrl+k ctrl+c puts line comment as // like in C
Run Code Online (Sandbox Code Playgroud)

默认情况下ctrl+k ctrl+c将行注释//类似于C. 我想把这个改成*. 当然,对于其他文件类型,此快捷方式的行为将像往常一样保持不变。我该怎么做?

有官方扩展支持此文件类型的语法突出显示,但显然不支持行注释快捷方式:

Name: FORM Syntax Highlighting
Id: benruijl0774.vscode-form
Description: Syntax highlighting for the symbolic manipulation toolkit FORM.
Version: 0.0.1
Publisher: Ben Ruijl
VS Marketplace Link: https://marketplace.visualstudio.com/items? 
itemName=benruijl0774.vscode-form
Run Code Online (Sandbox Code Playgroud)

visual-studio-code

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

是否可以初始化名称相同但数字不同的变量?

在某种情况下,我必须定义一些变量,在这些变量中我可以控制部分变量名称(如下var所示)。

float var1, var2, var3....;
Run Code Online (Sandbox Code Playgroud)

但我无法控制他们将采取的数字。(这是因为这些是var*我从其他一些代码中生成的,每次编译时,最后的这些数字都会不同)。

我的问题:有没有办法先验地定义这些变量?

喜欢(可以说var*是在var100.内生成的)

float var1,...,var100;
Run Code Online (Sandbox Code Playgroud)

无需明确键入每个var*. 将数组放在这个位置会好得多,但是有没有办法以这种方式做到这一点?

c++ c++17

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

C++ 数值导数

这个问题在不同平台上出现了一千次。但是,我仍然需要了解一些东西。这是一个完整的例子:

#include <iostream>
#include <iomanip>
#include <cmath>

// function to derivative
double f (double var, void * params){
  (void)(params); 
  return pow (var, 1.5);
}

// Naive central step derivative
double derivative1(double var, double f(double,void*), double h){ 
return (f(var+h,NULL) - f(var-h,NULL) )/2.0/h; 
}

// Richardson 5-point rule
double gderivative(double var, double f(double,void*), double h0){
 return(4.0*derivative1(var,f,h0) - derivative1(var,f,2.0*h0))/3.0;
}


int main (void){


  for (int i=10;i>0;i--){
  double h0=pow(10,-i);
  double x=2.0;
  double exact = 1.5 * sqrt(x);
  double test1=derivative1(x,f,h0);
  double gtest=gderivative(x,f,h0);
  std::cout << "h0 …
Run Code Online (Sandbox Code Playgroud)

c++ numeric numerical-methods derivative

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

将文件的内容分配给bash中的数组

我有一个文件,其中包含部分文件名作为换行符(或用空格分隔)。让我们以下面的例子为例:

cat file.txt
1
4
500
Run Code Online (Sandbox Code Playgroud)

实际的文件名是file_1.dat, file_2.dat, file_3.dat, file_4.dat file_500.dat,等等。

我只想合并那些名称(或部分名称)存储在file.txt.

为此,我正在执行以下操作:

 ## read the file and assign to an array
 array=()
 while IFS= read -r line; do
 array+=($line)
 done < file.txt

 ## combine the contents of the files
 for file in ${array[@]}
  do
  cat "file_$file.dat"
  done > output.dat
Run Code Online (Sandbox Code Playgroud)

现在在这个解决方案中,我不喜欢数组的分配,我必须为此运行一个do循环。

我试着用

 mapfile -t array < <(cat file.txt)
Run Code Online (Sandbox Code Playgroud)

我也试过,

 array=( $(cat file2.txt) )
Run Code Online (Sandbox Code Playgroud)

最后需要的数组是

array=(1 4 500) 
Run Code Online (Sandbox Code Playgroud)

在某些答案中(在此平台中),我认为以上述方式(最后一个选项)进行操作可能有害。我想澄清一下如何处理此类任务。

我的问题是:在这种情况下,将文件内容分配到数组中的最佳(安全且快速)方法是什么?

bash sh

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

如何在 bash 中编写包含按第一个数字对齐的正数和负数的列

在处理包含正数和负数列的数据文件时,我想出了使用column -t. 但是,这会将 -ve 符号视为字段来对齐列,这看起来不太好。有没有什么方法(即使在内部column)以不同的方式对待它?

编辑: 实际情况不需要具有相同数量的数字,并且许多数字包含许多列。一个玩具示例如下:

猫输入.txt

-1.5647453E-09 1.33356715E-09
1.3224229E-09 4.8350685E-09
1.7098133E-09 -2.8287697E-10
-3.3301262E-09 -1.8597501E-08
Run Code Online (Sandbox Code Playgroud)

column -t

-1.5647453E-09  1.33356715E-09
1.3224229E-09   4.8350685E-09
1.7098133E-09   -2.8287697E-10
-3.3301262E-09  -1.8597501E-08
Run Code Online (Sandbox Code Playgroud)

预期的:

-1.5647453E-09   1.33356715E-09
 1.3224229E-09   4.8350685E-09
 1.7098133E-09  -2.8287697E-10
-3.3301262E-09  -1.8597501E-08 
Run Code Online (Sandbox Code Playgroud)

基本上,我想将每列从左侧(与第一个数字)对齐,以便它看起来如上。请注意,column -t它从左侧对齐,但也带有 -ve 符号,这是不需要的。

sorting bash awk sed sh

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