Comment mettre des valeurs variables 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 aux trois autres de simples fonctions ajouter, multiplier et diviser. La fonction principale devrait alors 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 à propos des 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 puis-je obtenir les valeurs de x,y,d,e et f dans une corde? J'ai essayé différentes matrices et des trucs comme ça:

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

mais aucune des variables n'apparaît.

deux autres questions:

  • Pourquoi la fonction de retour "et 3" même si je n'ai pas demandé pour la longueur de <!--12?
  • si quelqu'un pouvait recommander un bon livre pour débutants à MATLAB scripting, j'apprécierais vraiment il.
11
demandé sur gnovice 2010-02-05 04:52:52

5 réponses

Pierre et Amro illustrer, il faut d'abord convertir les valeurs numériques en chaînes formatées pour les afficher ou 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 de ans = 3 en tant que sortie, c'est probablement parce que vous n'assignez pas le la sortie de answer à une variable. Si vous souhaitez obtenir toutes les valeurs de sortie, vous devrez appeler answer de la façon suivante:

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

placer la valeur dout1, la valeur eout2, et la valeur fout3. Lorsque vous procédez de la manière suivante:

answer(1,2)

MATLAB assignera 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 l'apprentissage de MATLAB, vous ne devriez pas sous-estimer la valeur de la documentation de MATLAB. J'ai appris la plupart de ce que je sais sur ma propre utilisation. Vous pouvez y accéder en ligne, ou dans votre copie de MATLAB en utilisant les fonctions DOC, HELP, ou HELPWIN.

4
répondu gnovice 2017-05-23 12:00:13

Voici comment vous convertissez des nombres en chaînes, et joinez des chaînes à d'autres choses (c'est bizarre):

>> ['the number is ' num2str(15) '.']
ans =
the number is 15.
15
répondu Peter 2010-02-05 01:57:31

vous pouvez utiliser fprintf / sprintf avec la 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 du 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)

réponse() fonction, vous pouvez assigner 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 l'appeler simplement:

out = answer(x,y);
7
répondu Amro 2010-02-05 03:16:51

je viens de réaliser pourquoi j'avais tant de problèmes - dans MATLAB vous ne pouvez pas stocker des chaînes de différentes longueurs comme un tableau en utilisant des crochets. En utilisant des crochets concaténate des chaînes de longueurs variables en un seul caractère array.

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

a =

matlabisfun

>> size(a)

ans =

     1    11

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

Pour stocker des chaînes de longueurs variables comme des éléments d'un tableau, vous devez utiliser bracelets bouclés à enregistrer comme un réseau de cellules. Dans les réseaux 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
répondu jefflovejapan 2010-02-06 05:39:12

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

c'est 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
répondu onzyone 2012-10-01 15:12:26