web-dev-qa-db-fra.com

Comment mettre des valeurs de variable dans une chaîne de texte dans MATLAB?

J'essaie d'écrire une fonction simple qui prend deux entrées, x et y, et les transmet à trois autres fonctions simples qui les ajoutent, les multiplient et les divisent. La fonction principale doit ensuite afficher les résultats sous la forme d'une chaîne contenant x, y et les totaux.

Je pense qu'il y a quelque chose que je ne comprends pas sur les arguments de sortie. Quoi qu'il en soit, voici mon (pitoyable) code:

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

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

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

La fonction principale est:

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

Comment obtenir les valeurs de x, y, d, e et f dans une chaîne? J'ai essayé différentes matrices et des trucs comme:

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

mais aucune des variables n'apparaît.

Deux problèmes supplémentaires:

  • Pourquoi la fonction retourne "ans 3" alors que je n'ai pas demandé la longueur de z?
  • Si quelqu'un pouvait recommander un bon livre pour les débutants aux scripts MATLAB, je l'apprécierais vraiment.
12
jefflovejapan

Comme l'illustrent Peter et Amro , vous devez d'abord convertir les valeurs numériques en chaînes formatées afin de les afficher ou de les concaténer avec d'autres chaînes de caractères. Vous pouvez le faire en utilisant les fonctions FPRINTF , SPRINTF , NUM2STR et INT2STR .


En ce qui concerne l'obtention ans = 3 en sortie, c'est probablement parce que vous n'affectez pas la sortie de answer à une variable. Si vous souhaitez obtenir toutes les valeurs de sortie, vous devrez appeler answer de la manière suivante:

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

Cela placera la valeur d dans out1, la valeur e dans out2 et la valeur f dans out3. Lorsque vous effectuez les opérations suivantes:

answer(1,2)

MATLAB affectera automatiquement la première sortie d (qui a la valeur 3 dans ce cas) à la variable d'espace de travail par défaut ans .


En ce qui concerne la suggestion d'une bonne ressource pour apprendre MATLAB, vous ne devriez pas sous-estimer la valeur de la documentation MATLAB. J'ai appris la plupart de ce que je sais par moi-même en l'utilisant. Vous pouvez y accéder en ligne , ou dans votre copie de MATLAB en utilisant les fonctions DOC , HELP , ou HELPWIN .

4
gnovice

Voici comment convertir des nombres en chaînes et joindre des chaînes à d'autres choses (c'est bizarre):

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

Vous pouvez utiliser fprintf/sprintf avec une syntaxe C familière. Peut-être quelque chose comme:

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

en lisant votre commentaire, voici comment vous utilisez vos fonctions depuis le programme principal:

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)

Aussi pour la fonction answer (), vous pouvez affecter les valeurs de sortie à un vecteur au lieu de trois variables distinctes:

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

et appelez-le simplement comme:

out = answer(x,y);
8
Amro

Je viens de comprendre pourquoi j'avais tant de problèmes - dans MATLAB, vous ne pouvez pas stocker des chaînes de différentes longueurs sous forme de tableau à l'aide de crochets. L'utilisation de crochets concatène des chaînes de longueurs variables en un seul tableau caractère.

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

a =

matlabisfun

>> size(a)

ans =

     1    11

Dans un tableau de caractères, chaque caractère d'une chaîne compte comme un élément, ce qui explique pourquoi la taille d'un est 1X11.

Pour stocker des chaînes de différentes longueurs en tant qu'éléments d'un tableau, vous devez utiliser des accolades pour enregistrer en tant que tableau de cellules. Dans les tableaux de cellules, chaque chaîne est traitée comme un élément distinct, quelle que soit sa longueur.

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

a = 

    'matlab'    'is'    'fun'

>> size(a)

ans =

     1     3
3
jefflovejapan

Je cherchais quelque chose le long de ce que vous vouliez, mais je voulais le remettre dans une variable.

Voilà donc ce que j'ai fait

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

fondamentalement

variable = [str1 str2 str3 str4 str5 str6]

0
onzyone