2016-05-18 6 views
0

Comment réduire la longueur de la courbe entre 0 et 4 * pi? Les commandes que vous devez utiliser sont inttrap et diff. Voici ce que j'ai maintenant:Utiliser inttrap et diff pour obtenir la longueur d'une courbe dans Scilab

t=linspace(0,4*%pi) 
x=(4+sin(a*t)).*cos(3*t) 
y=(4+sin(a*t)).*sin(3*t) 
z=cos(3*t) 

xx=diff(x) 
yy=diff(y) 
zz=diff(z) 
aid=sqrt(xx^2+yy^2+zz^2) 
length=inttrap([t],aid) 

Obtenir un message d'erreur, la dernière étape ne va pas.

Répondre

0

La raison du message d'erreur est que t et aid ont des tailles différentes. Et c'est parce que diff renvoie un vecteur avec 1 entrée de moins que l'entrée. Vous pouvez voir comment cela fonctionne sur un exemple: diff([3 1 5]) est [-2 4].

Pour corriger cela, utilisez t(1:$-1), qui omet la dernière entrée de t. C'est,

len = inttrap(t(1:$-1), aid) 

(S'il vous plaît ne pas utiliser length, qui est un nom de fonction dans Scilab.)

Un autre problème que vous avez est que diff est seulement des différences, pas un dérivé. Pour obtenir la dérivée, vous devez diviser par la taille du pas, qui dans votre cas est t(2)-t(1).

De même, la syntaxe xx^2 est obsolète pour la puissance élémentaire; utiliser xx.^2 à la place

t = linspace(0,4*%pi) 
a = 1 
x = (4+sin(a*t)).*cos(3*t) 
y = (4+sin(a*t)).*sin(3*t) 
z = cos(3*t) 

step = t(2)-t(1) 
xx = diff(x)/step 
xy = diff(y)/step 
xz = diff(z)/step 
aid = sqrt(xx.^2+yy.^2+zz.^2) 
len = inttrap(t(1:$-1), aid) 
+0

Merci. Votre réponse est écrite d'une manière simple et efficace. Cela m'a aidé. – IsaacNuketon