1 Question: Comment définir une fonction peicewise dans un fichier de fonction - Matlab

question créée à Tue, Apr 9, 2019 12:00 AM

J'ai créé un fichier funnction et défini une fonction peicewise à l’aide de conditionnels et d’une boucle for. J'ai essayé d'appeler la fonction dans un fichier m.file distinct, mais les variables 't' et 'v' n'apparaissent pas dans l'espace de travail. Il s'agit simplement de générer un vecteur avec les valeurs t appelées 'ans.

J'ai essayé de mettre le code exact (sans la définition de la fonction) dans un fichier m normal et cela a très bien fonctionné, montrant les deux variables t et v

    #function file
function [t, v] = VPieceWise(t_start, t_end);
t = t_start:0.01:t_end;
for i = 1:length(t);
    if (t(i) >= 0) && (t(i) <= 10);
        v(i) = 11.*(t(i).^2) - (5.*t(i));
    elseif (t(i) >= 10) && (t(i) <= 20);
        v(i) = 1100 - 5.*t(i);
    elseif (t(i) >= 20) && (t(i) <= 30);
        v(i) = 50.*t(i) + 2*((t(i)-20).^2.5);
    elseif (t(i) >= 30) && (t(i) <= 100);
        v(i) = 1520.*exp(-0.1.*(t(i)-30));
    elseif (t(i) >= -100) && (t(i) <= 0);
        v(i) = 0;
    end
end
end
#m file
clear all; clc; close all
t_start = input('enter the start time');
t_end = input('enter the end time');
VPieceWise(t_start,t_end)
plot(t,v)
    
0
  1. Consultez Scripts vs. Fonctions . Vous devez appeler votre fonction comme 0600350991111101035062. Le simple fait d'appeler [t, v] = VPieceWise(t_start, t_end) a pour effet de mettre le contenu de la première valeur de retour (c'est 060035099111110105062 dans votre cas)
    .
    2019-04-09 11: 46: 03Z
  2. Imaginez le désordre que vous auriez si la fonction M-file déterminait le nom des variables que vous obtenez lorsque vous appelez la fonction. Que se passe-t-il si vous avez besoin de deux fichiers M pour créer la même variable, en écrasant les résultats de l’autre? Que faire si vous avez besoin d'appeler une fonction deux fois avec des entrées différentes et de combiner les résultats? Il est donc logique que les variables de la fonction soient des variables locales et que l’appelant décide lui-même à quelle variable attribuer la sortie de la fonction.
    2019-04-09 13: 25: 18Z
1 Réponses                              1                         

Étant donné que votre fonction a deux sorties, vous devez également les affecter lorsque vous appelez la fonction. Si vous ne le faites pas, seule la première sortie sera placée dans la variable VPieceWise(t_start, t_end).

Appelez donc votre fonction comme suit:

t     
1
2019-04-09 11: 45: 57Z
ans
source placée ici