首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何得到一个方程作为字符串?

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

Stack Overflow用户
提问于 2017-12-16 16:40:32
回答 1查看 173关注 0票数 0

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

代码语言:javascript
复制
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的表达式是生成文件的等式(与代码中的相同)。无效字符必须在文件名字符串中删除或替换。

没有任何在线资源似乎提到打印一个等式;只有打印数字或求解方程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-16 22:11:32

您可以这样做的一种方法是使用func2str()

func2str (fcn_handle) 返回包含函数句柄fcn_handle引用的函数名称的字符串。

您必须为您的方程创建一个匿名函数。例如,

代码语言:javascript
复制
> f = @(x,y,z) cos(x) .* sin(y) + cos(y) .* sin(z) + cos(z) .* sin(x);
> eqn = func2str(f);
> fprintf(stdout, '%s\n', eqn)
@(x, y, z) cos (x) .* sin (y) + cos (y) .* sin (z) + cos (z) .* sin (x)

如您所见,上面的代码创建了包含函数eqn表达式的字符串f。然后,您可以操纵字符串以获得更合理的文件名。下面是一个简单的例子:

代码语言:javascript
复制
> fname = regexprep(strjoin(strsplit(eqn(11:end)), ''), '[().*+]', '_')
fname = cos_x___sin_y__cos_y___sin_z__cos_z___sin_x_

在这里,strjoin(strsplit(str), '')删除字符串str中的所有空格。函数regexprep()使用regex替换来用下划线替换“不想要的”字符。当然,您可以进行更精细的操作,例如将*更改为_TIMES_或任何您喜欢的操作。有关操纵字符串这里的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47847840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档