Octave 我如何得到一个作为字符串的方程?

Octave 我如何得到一个作为字符串的方程?,octave,equation,Octave,Equation,我有一个方程,用来制作等值面,然后保存到一个文件中,我需要跟踪哪个方程属于哪个文件。因此,我想用生成它们的方程式来标记我的倍频程脚本生成的文件,而不用手工标记它们。 这是我现在的代码: clf; function [f, v] = doiso(dodraw) m = 3; dim = -m:0.1:m; if (dodraw > 0) dim = -m:0.6:m; endif [x,y,z] = meshgrid(dim, dim, dim); func

我有一个方程,用来制作等值面,然后保存到一个文件中,我需要跟踪哪个方程属于哪个文件。因此,我想用生成它们的方程式来标记我的倍频程脚本生成的文件,而不用手工标记它们。 这是我现在的代码:

clf;

function [f, v] = doiso(dodraw)
  m = 3;
  dim = -m:0.1:m;
  if (dodraw > 0)
    dim = -m:0.6:m;
  endif
  [x,y,z] = meshgrid(dim, dim, dim);
  func = cos(x) .* sin(y) + cos(y) .* sin(z) + cos(z) .* sin(x);
  if (dodraw > 0)
    isosurface(func, 0);
  else
    [f, v] = isosurface(func, 0);
  endif
endfunction

#draw
doiso(1);
axis equal;
title("isosurface() of the function");

#saveq
[f, v] = doiso(0);
vertface2obj(v, f, strcat("objs/", int2str(time * 1000), "out.obj"));
保存的文件应具有类似于
cos(x)的名称。sin(y)+cos(y)。sin(z)+cos(z)。sin(x)1513441860368.obj
其中长数字是时间戳,包含sin和cos的表达式是生成文件的等式(与代码中的表达式相同)。必须删除或替换文件名字符串中的无效字符


似乎没有在线资源提到打印等式;仅打印数字或求解方程式。

一种方法是使用:

func2str(fcn\u句柄)

返回一个字符串,其中包含函数句柄引用的函数名
fcn\u handle

你必须为你的方程创建一个匿名函数。比如说,

>f=@(x,y,z)cos(x)。*sin(y)+cos(y)。*sin(z)+cos(z)。*sin(x);
>方程n=func2str(f);
>fprintf(标准输出,'%s\n',eqn)
@(x,y,z)cos(x)。*sin(y)+cos(y)。*sin(z)+cos(z)。*sin(x)
如您所见,上面的代码创建了包含函数
f
表达式的字符串
eqn
。 然后,您可以操纵字符串以获得更合理的文件名。下面是一个简单的例子:

>fname=regexprep(strjoin(strsplit(eqn(11:end)),'','',[().*+],'.'
fname=cos_x_______________;u sin_z_______sinu x_
这里
strjoin(strsplit(str),“”)
删除字符串
str
中的所有空白。函数
regexprep()
使用regex替换将“不需要的”字符替换为下划线。 当然,您可以进行更精细的操作,例如将
*
更改为
\u次
或任何您喜欢的操作。
更多关于操作字符串的信息。

也许我可以替换无效字符?关键是我根本无法用八度音阶来表示方程的任何字符串。我认为将公式保存为文件名是个坏主意,我宁愿用安迪所说的公式将字符串添加到保存的文件中。或者,更好的是,如果您真正需要的是一种将函数与其方程关联的方法,只需创建一个可以通过编程方式引用的外部表即可。例如,
Equations.f1=“cos(x)”;方程式f2=“sin(x)”等。