【问题标题】:How do I put variable values into a text string in MATLAB?如何将变量值放入 M​​ATLAB 中的文本字符串中?
【发布时间】:2011-01-13 08:36:01
【问题描述】:

我正在尝试编写一个简单的函数,它接受两个输入,xy,并将它们传递给其他三个简单的函数,它们可以相加、相乘和相除。然后主函数应将结果显示为包含xy 和总数的字符串。

我认为我对输出参数有些不理解。无论如何,这是我的(可怜的)代码:

function a=addxy(x,y)
a=x+y;

function b=mxy(x,y)
b=x*y;

function c=dxy(x,y)
c=x/y;

主要功能是:

function [d e f]=answer(x,y)
d=addxy(x,y);
e=mxy(x,y);
f=dxy(x,y);
z=[d e f]

如何将xydef 的值放入字符串中?我尝试了不同的矩阵和类似的东西:

['the sum of' x 'and' y 'is' d]

但没有显示任何变量。

另外两个问题:

  • 即使我没有询问z 的长度,为什么函数返回“ans 3”?
  • 如果有人可以为 MATLAB 脚本初学者推荐一本好书,我将不胜感激。

【问题讨论】:

  • 使用 sprintf: str='DEF'; var=sprint('abc%sghi',str); => abcDEFghi

标签: string matlab text variables


【解决方案1】:

以下是如何将数字转换为字符串,并将字符串连接到其他事物(这很奇怪):

>> ['the number is ' num2str(15) '.']
ans =
the number is 15.

【讨论】:

  • 这很有帮助,但它仍然没有按照我想要的方式工作。当我在 (1,2) 上运行该函数时,我得到 ans=3 ,这意味着其他两个函数 mxy 和 dxy 没有看到 x 和 y 的值。此外,所有输出参数的值都是空的。我认为有一些非常简单的事情我没有在这里用变量做,但我不知道它是什么。
【解决方案2】:

您可以使用熟悉的 C 语法来使用 fprintf/sprintf。可能是这样的:

fprintf('x = %d, y = %d \n x+y=%d \n x*y=%d \n x/y=%f\n', x,y,d,e,f)

阅读您的评论,这是您在主程序中使用函数的方式:

x = 2;
y = 2;
[d e f] = answer(x,y);
fprintf('%d + %d = %d\n', x,y,d)
fprintf('%d * %d = %d\n', x,y,e)
fprintf('%d / %d = %f\n', x,y,f)

对于 answer() 函数,您可以将输出值分配给一个向量,而不是三个不同的变量:

function result=answer(x,y)
result(1)=addxy(x,y);
result(2)=mxy(x,y);
result(3)=dxy(x,y);

并将其简单地称为:

out = answer(x,y);

【讨论】:

  • 谢谢,这肯定更简单,但练习特别要求您构建函数并让它们来回传递变量。
  • 这太好了,非常感谢。您不必事先指定“结果”的大小,这很酷。
【解决方案3】:

正如PeterAmro 所示,您必须先将数值转换为格式化字符串才能显示它们或将它们与其他字符串连接。您可以使用函数FPRINTFSPRINTFNUM2STRINT2STR 来执行此操作。


关于将ans = 3 作为输出,这可能是因为您没有将answer 的输出分配给变量。如果要获取所有输出值,则必须通过以下方式调用answer

[out1,out2,out3] = answer(1,2);

这会将值d 放入out1,将值e 放入out2,并将值f 放入out3。当您执行以下操作时:

answer(1,2)

MATLAB 会自动将第一个输出 d(在本例中的值为 3)分配给默认工作区变量 ans


关于推荐学习 MATLAB 的好资源,您不应低估 MATLAB 文档的价值。我已经学会了我自己使用它所知道的大部分内容。您可以通过 online 访问它,或者在您的 MATLAB 副本中使用函数 DOCHELPHELPWIN

【讨论】:

  • 谢谢,这很有用。还有一个简单的问题——如果我在一个函数中创建一个输出变量——例如:function a=simple(x); a=x^2;如何从其他函数访问“a”的值?例如:函数 b=simple2(x); b=a*x; %从“简单”调用一个
  • @jefflovejapan:在这种情况下,您的第二个函数将是function b = simple2(x) b = simple(x)*x;。换句话说,您将在simple2 中调用simple,其输出将用于b 的等式中。
【解决方案4】:

我刚刚意识到为什么我遇到了这么多麻烦 - 在 MATLAB 中,您不能使用方括号将不同长度的字符串存储为数组。使用方括号将不同长度的字符串连接到单个 character 数组中。

    >> a=['matlab','is','fun']

a =

matlabisfun

>> size(a)

ans =

     1    11

在字符数组中,字符串中的每个字符都算作一个元素,这就解释了为什么 a 的大小是 1X11。

要将不同长度的字符串存储为数组的元素,您需要使用花括号将其保存为元胞数组。在元胞数组中,每个字符串都被视为一个单独的元素,无论长度如何。

>> a={'matlab','is','fun'}

a = 

    'matlab'    'is'    'fun'

>> size(a)

ans =

     1     3

【讨论】:

    【解决方案5】:

    我一直在寻找你想要的东西,但想把它放回一个变量中。

    这就是我所做的

    variable = ['hello this is x' x ', this is now y' y ', finally this is d:' d]

    基本上

    variable = [str1 str2 str3 str4 str5 str6]

    【讨论】:

      猜你喜欢
      • 2022-07-25
      • 2019-08-14
      • 1970-01-01
      • 2011-12-09
      • 2012-09-20
      • 2017-10-28
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多