2010-12-08 8 views
2

J'ai essayé de faire la fonction définie par ce qui suit:Comment effectuer une équation par morceaux avec plusieurs variables dans matlab?

y(x,t) = { 0     (t - 5) < 0 
     { (t - 5)*(t - x)  x < (t - 5) 
     { (t + x^2)   x >= (t - 5) 

Je ne semble pas comprendre comment représenter graphiquement cette fonction depuis x = 0: 0,5: 10 et t = 0: 0,1: dix. Je sais comment faire cela sans le t mais je me perds quand le t est inclus et a des intervalles différents par rapport au x.

Merci, ÿ_ÿ

+0

Je pense que vous voulez dire 'y (x, t) = ...' –

+0

oui, je voulais dire que. –

+0

Votre problème est de savoir comment écrire une telle fonction, ou comment la tracer? Si vous voulez le tracer, regardez la commande meshgrid (aide meshgrid inclut un exemple) – Alejandro

Répondre

3

par Multipliant la valeur de vérité fonctionne habituellement, puis vous ajoutez simplement les valeurs ainsi:

y = @(x,t)((t-5).*(t-x).*(x<(t-5)) + (t+x.^2).*(x>=(t-5))); 

Je ne peux pas tester ce moment que je n'ai pas Matlab sur mon ordinateur portable, mais cela devrait fonctionner comme vous le souhaitez.


Votre vrai problème semble être lié au fait que x et t sont de dimensions différentes. Cela peut être « fixe » en utilisant la fonction meshgrid, ce qui crée deux matrices pour une utilisation dans des fonctions multidimensionnelles:

[X, T] = meshgrid([1:.5:10], [0:.1:10]); 
Z = y(X, T); % With y(x,t) as above 

Z est maintenant une matrice contenant les valeurs de y pour différentes x et t en conséquence. Cela peut être tracée en surface à l'aide surf:

surf(X, T, Z); 
+0

x et t doivent être dans la même dimension si je le fais. –

+0

Modifié; utilisez la fonction 'meshgrid' pour créer des matrices d'entrée appropriées. – You