Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 10-04-2017 17:26:43

Alex0909
Invité

Difference entre deux codes scilab

Bonjour,

Je débute sous scilab et il y a une chose que je n'arrive pas à comprendre: les deux codes suivants font la même chose (pour moi) et pour autant je n'ai pas la même courbe. Il s'agit de tracer la courbe de f(x,y)=x^2+y^2. Il y a quelque chose que je dois mal comprendre, pouvez-vous l'aider s'il vous plait:

Code 1
x=[-10:1:10];
y=x;
z=x'*x+y'*y;
plot3d(x,y,z)

Code 2

function [z]=f(x,y)
    z=x^2+y^2;
endfunction

x=[-10:1:10];
y=x;

fplot3d(x,y,f)

#2 04-05-2017 09:30:36

PTRK
Membre
Inscription : 14-12-2016
Messages : 101

Re : Difference entre deux codes scilab

Ton problème vient de tes arguments à plot3d :

Aide scilab plot3d a écrit :

x,y :row vectors of sizes n1 and n2 (x-axis and y-axis coordinates). These coordinates must be monotone.
z: matrix of size (n1,n2). z(i,j) is the value of the surface at the point (x(i),y(j)).
xf,yf,zf :matrices of size (nf,n). They define the facets used to draw the surface. There are n facets. Each facet i is defined by a polygon with nf points. The x-axis, y-axis and z-axis coordinates of the points of the ith facet are given respectively by xf(:,i), yf(:,i) and zf(:,i).

On se trouve dans le 1er cas : x,y sont des vecteurs. alors z doit être une matrice tel que $z(i,j) = f(x(i),y(j))$. Or lorsque tu calcules $x'*x$, tu ne calcules pas x.^2 c'est à dire le même vecteur dont tous les termes sont au carré, mais une matrice z tel que $z(i,j) = x(i)*x(j)$ . en effet x en scilab est par défaut un vecteur ligne donc x' est un vecteur colonne donc $x'*x = \begin{pmatrix}x_1\\...\\x_n\end{pmatrix}(x_1,...,x_n) = \begin{pmatrix}x_1^2 &x_1x_2 &... &x_1x_n\\... & ... &...&... \\
x_nx_1&...&x_nx_{n-1}&x_n^2\end{pmatrix}$. Et donc pour le code 1 on a $z(i,j) = x(i)x(j) + y(i)y(j) \not = x(i)^2 + y(j)^2$

Alors que le code 2 calcule bien $z(i,j) = x(i)^2+y(j)^2$ grace à l'opérateur point qui apres un vecteur ou une matrice, applique l'opérateur suivant terme à terme : Si x est un vecteur alors x^2 : vecteur au carré : pas de sens mais x.^2 : vecteur dont les termes valent ceux de x au carré

Je te propose comme correction:


clc
clear
xdel(windid())
//code 1
x=[-10:1:10];
y=x;
[xx,yy] = meshgrid(x,y)
zz = xx.^2 + yy.^2

plot3d(x,y,zz)
 

Dernière modification par PTRK (04-05-2017 09:55:33)

Hors ligne

Pied de page des forums