Comment corriger “des définitions de Fonction ne sont pas autorisés à l'invite de commandes ou de scripts”
Je veux écrire le code de cette équation:T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]
syms T1 T2
function [T2] = stat(T1)
for i=1:3
T2(i)=T1(i)*2+[T1(i-1,)+T1(i+1,)]*2
end
je veux le code de produire T2(111)=T1(111)+2*[T1(011)+T(211)]
et la boucle d'aller sur le .
mais matlab donne cette erreur
"Des définitions de fonction ne sont pas autorisés à l'invite de commandes ou de scripts"
Comment puis-je résoudre ce problème?
Connexes: What est la différence entre un script et une fonction dans MATLAB?, Dans MATLAB, je peux avoir un script et une définition de fonction dans le même fichier?
OriginalL'auteur roghie | 2011-05-11
Vous devez vous connecter pour publier un commentaire.
Matlab attend fonctions dans leur propre fichier. Copiez le code ci-dessus dans un fichier " stat.m' et cela devrait fonctionner.
Cette politique est la cause d'un trop grand nombre de courts fichiers, mais il est nécessaire en raison de la façon matlab gère la portée des variables. Chaque fichier possède son propre champ d'application, et toutes les variables dans l'invite de commande ont une portée globale.
Assurez-vous de ne pas copier la ligne
syms T1 T2
pour le fichier. Seulementfunction
et tout ce qui suit.je fais cela. mais l'erreur est de répéter
OriginalL'auteur Quantum7
Comme Quantum7 souligné, vous avez défini la fonction dans le même script, ce qui vous donnera une erreur. Indépendamment du fait que la fonction est dans un autre fichier ou pas, ce que vous avez écrit n'est pas une opération valide avec des variables symboliques. Si vous mettez simplement en commentaire de la deuxième ligne et de l'exécuter, vous obtiendrez l'erreur suivante:
qui est parce que
i-1
est égal à zéro pour la première boucle, et MATLAB commence à compter à partir de 1. Si vous essayezfor i=2:3
, vous obtenez cette erreur,parce que la variable symbolique est juste un
1x1
tableau.De ce que vous avez écrit, il semble que vous ayez un tableau
T1
, etT2
est construit à partir deT1
selon la relation:T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]
. Je pense qu'une meilleure façon de faire ce que vous voulez est d'utiliser une fonction anonyme.Je vais modifier légèrement l'indexation pour tenir compte du fait que dans le premier et le dernier élément, vous obtiendrez une erreur car l'indice de dépasser
T1
's limites. Néanmoins, la réponse est la même.Si vous ne voulez pas ajouter des zéros, mais au lieu de le rendre circulaire (c'est à dire,
T1(0)=T1(3)
), alors vous pouvez utiliser le même code en modifiant la définition def
.OriginalL'auteur abcd
Je pense que c'est un problème simple-je le résoudre à pousser bouton de lecture dans le fichier de l'éditeur,c'est de la compilation de la fonction dans la fenêtre de commande matlab puis décrivez vos entrées et donner les paramètres de la fonction...
OriginalL'auteur user2977171
Fonctions dans les scripts sont autorisés à partir de la version R2016 ou plus tard
https://www.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html
Comme d'autres l'ont dit, vous avez besoin de mettre vos fonctions dans un autre fichier.
OriginalL'auteur Praful Gupta