Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Scilab

Posté par
cinou
15-10-10 à 17:57

Bonjour à tous;
J'espère que quelqu'un pourra m'aider... ce n'est pas grand chose.
Voilà je débute en Scilab et je voudrais (déjà) tracer une courbe. Donc premièrement je défini ma fonction:
//Début d'algo
L=6
x=[0.0001491    4.5106912    0.7837151];

function lambda=lm(t);

if modulo(t,L)==0 then
NT=ceil(t/L);
else NT=ceil(t/L)-1;
end;
TNT=L*NT;

r=0;
for j=1:NT
r=r+(1-x(3))^(NT-j+1);
end;
lambda=x(1)*x(2)*(t-TNT+L*r)^(x(2)-1);
endfunction;

t=0:0.1:100;
clf()
plot(t,lm(t))

//Fin d'algo

En executant ce programme, une erreur apparait :
!--error 204
':': Wrong type for argument 2: Scalar expected.

at line      10 of function lm called by :  
plot(t,lm(t))

Est-ce quelqu'un peut m'aider? Je pense que cela provient de la variable NT... mais comment faire pour contourner le problème.

Merci d'avance

Posté par
Nicolas_75 Correcteur
re : Scilab 16-10-10 à 10:55

Bonjour,

Et en remplaçant 0.1 par 0,1 ?

Nicolas

Posté par
cinou
re : Scilab 16-10-10 à 14:36

non ça ne marche pas... en plus, si je ne me trompte pas, pour exprimer un quotient sous scilab on utilise le point et non pas la virgule. Mais merci quand même.
Quelqu'un aurait une autre réponse à me donner?

Posté par
Nicolas_75 Correcteur
re : Scilab 16-10-10 à 14:38

Chez moi, le remplacement de 0.1 par 0,1 dans t=0:0.1:100; élimine pourtant le message d'erreur.

Posté par
cinou
re : Scilab 16-10-10 à 14:59

Oui tout a fait.
Mais l'algorithme ne s'execute pas normalement... logiquement, je devrais obtenir une fonction en dents de sci croissante... Voici un exemple d'une fonction qui se comporte (à peu près de la même façon) mais qui s'execute sous Scilab.
J'ai simplement supprimé la boucle qu'il y a à l'intérieur de la fonction et l'ai remplacé par une somme des termes (1-x(3))... au lieu de la somme des (1-x(3))^(NT-j+1).
Voici le code. Déroule-le et tu comprendra mieux mon problème:
L=6;  

x=[0.0001491    4.5106912    0.7837151];

function lambda=lm(t);
if modulo(t,L)==0 then
NT=ceil(t/L);
else NT=ceil(t/L)-1;
end;
TNT=L*NT;

lambda=x(1)*x(2)*(t-TNT+L*NT*(1-x(3)))^(x(2)-1);
endfunction;

t=0:0.1:100;

clf()

plot(t,lm(t))

Merci

Posté par
Nicolas_75 Correcteur
re : Scilab 16-10-10 à 15:18

Le dernier code affiche bien chez moi une fonction en dents de scie.

Posté par
cinou
re : Scilab 16-10-10 à 15:39

je le sais... c'était uniquement pour te montrer le genre de fonction que je souhaite obtenir.
Mon prblème est en relation avec le premier algo posté.

Posté par
Nicolas_75 Correcteur
re : Scilab 16-10-10 à 15:44

Ce n'est plus un problème d'erreur sous Scilab.
C'est un problème de justesse ou non de l'algorithme et de son implémentation.
Pour t'aider, il nous faut l'énoncé complet.

Posté par
cinou
re : Scilab 16-10-10 à 16:41

Oui j'aurais du commencer par là... j'espère ne pas vous avoir fait perdre trop de temps.

Voici la fonction que je souhaiterais tracer:

(t)=t-TN[sub]t[/sub]+L*

Posté par
cinou
re : Scilab 16-10-10 à 16:46


Oui j'aurais du commencer par là... j'espère ne pas vous avoir fait perdre trop de temps.

Voici la fonction que je souhaiterais tracer:

\lambda(t)=t-T_(N_t)+L\sum_{j=1}^{N_t}(1-x_3)^{(N_t-j+1)}

Posté par
Nicolas_75 Correcteur
re : Scilab 16-10-10 à 20:51

Tu ne nous donnes pas tout !
Quelle est l'expression de Nt en fonction de t.
Pourrait-on avoir l'énoncé complet ?

Posté par
cinou
re : Scilab 17-10-10 à 14:14

Ah oui désolé:
T(N_t)=[t]
En fait la partie entière de la variable t.
et:
N_t est l'entier naturel le plus proche de \frac{t}{L}.
L\in\mathbb{N}^*_+

Posté par
Nicolas_75 Correcteur
re : Scilab 17-10-10 à 14:27

Je ne comprends pas bien ces définitions.
OK pour Nt.
Mais tu es sûr que T(Nt) = [t] ? Ce n'est pas plutôt = [Nt] ?

Posté par
cinou
re : Scilab 17-10-10 à 18:51

Non il s'agit bien de T(NT)=[t]. par exemple si t=7.3 alors T(NT)=7 et mon algo doit calculer t-T(NT)=0.3.

Posté par
Nicolas_75 Correcteur
re : Scilab 17-10-10 à 18:53

Alors pourquoi T(...) est-il une fonction de NT et pas de t, tout simplement ?

Est-il possible d'avoir tout l'énoncé, depuis le début, pour bien comprendre le contexte ?



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !