2017-03-29 1 views
0

Je souhaite évaluer l'intégrale double de ma fonction d'objectif (nommée myfunction, voir ci-dessous) en utilisant la fonction de construction integral2.Double intégrale de la fonction d'objectif

J'ai essayé d'exécuter ce script;

f = @(r,theta) myfunction(r,theta); 
integral2(f,0,2,0,2*pi); 

myfunction est la fonction suivante:

function fkt=myfunction(r,theta) 
x=r.*cos(theta); 
y=r.*sin(theta); 
los(:,1)=x; 
los(:,2)=y; 
norm = (sum(sqrt(los(:,1).^2 + los(:,2).^2))); 
fkt=norm*r; 
end 

Je fais l'intégrale en coordonnées polaires, que la raison pour laquelle FKT = norme * r.

Matlab me donne le message d'erreur suivant:

>> untitled2 
Subscripted assignment dimension mismatch. 

Error in myfunction (line 8) 
los(:,1)=x; 

Je ne peux pas comprendre, quel est le problème.

Répondre

0

Il y a deux choses qui peuvent être améliorées:

  1. los est non défini
  2. los(:,1) est une colonne en x est une ligne, de sorte que la cession a à l'échec.

Vous pouvez corriger cela en définissant los et modifier votre affectation. Par exemple:

los = NaN(numel(r), 2); 
los(:,1) = x'; 
los(:,2) = y'; 

Mais, pourquoi avez-vous besoin de la variable los? Il suffit de l'enlever et l'erreur sera disparu:

function fkt=myfunction(r,theta) 
x=r.*cos(theta); 
y=r.*sin(theta); 
norm = (sum(sqrt(x.^2 + y.^2))); 
fkt=norm*r; 
end 

Best,

+0

'los' n'a pas besoin d'être défini. Dans Matlab, il est défini implicitement. De plus, x est une matrice, donc votre exemple ne fonctionnerait pas. – yar

+0

Merci Ratbert. J'ai essayé la deuxième solution et j'ai obtenu ce qui suit: >> sans titre2 {Avertissement: Les sorties de la fonction Integrand ne correspondaient pas à la tolérance requise lorsque les mêmes valeurs d'entrée étaient fournies en deux appels séparés avec des matrices d'entrée de taille différente. Vérifiez que la fonction est correctement vectorisée. > Dans integral2Calc> integral2t/tenseur (ligne 247) Dans integral2Calc> integral2t (ligne 55) Dans integral2Calc (ligne 9) Dans integral2 (ligne 106) Dans untitled2 (ligne 5)} –

+0

Lorsque I a essayé la première solution (définissant los), j'ai l'erreur suivante: Incompatibilité de dimension d'assignation d'indice. Erreur dans ma fonction (ligne 5) los (:, 1) = x '; –

0

x est une matrice et vous essayez de l'affecter à un vecteur de colonne.

+0

Je vois ... J'essayé ce qui suit: los (:, 1) = x », mais il me donne le même message d'erreur . –

+0

J'ai édité la réponse. Essayez d'utiliser la fonctionnalité de débogage de matlab pour regarder dans les données. – yar

+0

D'accord .... Je suis un débutant en programmation. Pourriez-vous élaborer? –