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:
z
?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 .
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.
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);
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
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]