Как поместить значения переменных в текстовую строку в MATLAB?
Я пытаюсь написать простую функцию, которая принимает два входа, 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]
но ни одна из переменных не появляется.
Две дополнительные проблемы:
- Почему функция возвращает "ans 3", хотя я не запрашивал длину
z
?
- Если кто-нибудь может порекомендовать хорошую книгу для начинающих для написания скриптов MATLAB, я бы очень признателен.
Ответы
Ответ 1
Как показано 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. Я узнал большую часть того, что знаю сам, используя его. Вы можете получить к нему доступ онлайн или в своей копии MATLAB с помощью функций DOC, HELP, или HELPWIN.
Ответ 2
Здесь вы конвертируете числа в строки и присоединяете строки к другим вещам (это странно):
>> ['the number is ' num2str(15) '.']
ans =
the number is 15.
Ответ 3
Вы можете использовать fprintf/sprintf со знакомым синтаксисом C. Может быть, что-то вроде:
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);
Ответ 4
Я только понял, почему у меня так много проблем - в 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
Ответ 5
Я искал что-то, что хотел, но хотел вернуть его в переменную.
Так вот что я сделал
variable = ['hello this is x' x ', this is now y' y ', finally this is d:' d]
в основном
variable = [str1 str2 str3 str4 str5 str6]