我正在尝试编写一个带有两个输入x
和y
的简单函数,并将这些函数传递给其他三个简单函数,这些函数可以对它们进行相加,乘法和除法。然后,主要功能应将结果显示为包含x
,y
和总计的字符串。
我认为我不了解输出参数。无论如何,这是我的(可怜的)代码:
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]
如何将x
,y
,d
,e
和f
的值添加到字符串中?我尝试了不同的矩阵和类似的东西:
['the sum of' x 'and' y 'is' d]
但没有任何变量出现。
另外两个问题:
z
的长度?答案 0 :(得分:15)
以下是如何将数字转换为字符串,以及将字符串连接到其他内容(这很奇怪):
>> ['the number is ' num2str(15) '.']
ans =
the number is 15.
答案 1 :(得分:8)
您可以使用熟悉的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);
答案 2 :(得分:4)
如Peter和Amro所示,您必须先将数值转换为格式化字符串,以便显示它们或将它们与其他字符串连接起来。您可以使用FPRINTF,SPRINTF,NUM2STR和INT2STR功能执行此操作。
关于将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,DOC或HELP函数访问它HELPWIN或在您的MATLAB副本中。
答案 3 :(得分:3)
我刚刚意识到为什么我遇到这么多麻烦 - 在MATLAB中你不能使用方括号将不同长度的字符串存储为数组。使用方括号将不同长度的字符串连接成一个字符数组。
>> 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
答案 4 :(得分:0)
我正在寻找你想要的东西,但是想把它放回变量中。
所以这就是我做的事情
variable = ['hello this is x' x ', this is now y' y ', finally this is d:' d]
基本上
variable = [str1 str2 str3 str4 str5 str6]