2017-10-17 4 views
0

J'essaie de renvoyer une réponse de Matlab sous la forme d'une variable symbolique. J'ai créé le code suivant et la fonction pour illustrer l'erreur que je reçois:Comment retourner les réponses de la fonction Matlab sous la forme de symboles

clc 
clear all 
syms L real; 
% L = 1 % The code works when I uncomment this line 
k1 = [ L, -L; 
     -L, 2*L] 
k2 = [4*L^2, -L; 
     0,  L] 
K = GlobalStiffnessMatrix(k1,k2) 

Le fichier m GlobalStiffnessMatrix.m est indiqué ci-dessous:

function K = GlobalStiffnessMatrix(k12,k23) 
    K = zeros(2,2); 
    K(1,1) = k12(1,1); 
    K(1,2) = k12(1,2); 
    K(2,1) = K(1,2); 
    K(2,2) = k12(2,2) + k23(1,1); 
end 

Je reçois l'erreur suivante:

The following error occurred converting from sym to double: Error using symengine (line 59) DOUBLE cannot convert the input expression into a double array. If the input expression contains a symbolic variable, use VPA.

J'ai essayé d'utiliser VPA dans la fonction elle-même et le code de simulation mais je reçois toujours la même erreur. Bien sûr, lorsque je décommente le paramètre de ligne L = 1 la fonction fonctionne bien et comme prévu.

Comment faire pour que cette fonction renvoie K comme variable symbolique?

+3

Vous initialisez votre sortie 'K' en tant que matrice double en utilisant' zeros (2,2) '. Ensuite, vous essayez d'affecter une variable symbolique à l'un de ces éléments et d'obtenir une différence de type. Essayez plutôt d'initialiser votre sortie en utilisant 'sym' comme' K = sym ('K', [2,2]) ' – Wolfie

+0

magnifique! merci qui l'a résolu! – PatStarks

+1

Pas de soucis, j'ai ajouté mon commentaire en guise de réponse complète. Envisager de l'accepter pour que cette question soit close. Merci – Wolfie

Répondre

1

Vous êtes initialisant une matrice numérique en utilisant

K = zeros(2,2); 

Ensuite, en essayant d'assigner une variable symbolique à chacun de ces éléments numériques en utilisant

K(1,1) = k12(1,1); 

Au lieu de cela, initialiser K comme une matrice symbolique 2x2 à l'aide sym (voir la documentation here).

K = sym('K', [2,2]); 

Maintenant, chaque élément de K est une variable symbolique et vous aurez aucun problème assignant chacun à une variable symbolique existante.