2017-02-03 5 views
1

J'ai travaillé sur un programme dans Scilab qui intègre numériquement une fonction par la règle trapézoïdale (sans utiliser la fonction intégrée). Je n'ai aucun problème avec l'intégration ou le traçage de la fonction, mais je veux superposer la fonction réelle sur une courbe des trapèzes, colorée.Intégration de trapèze dans Scilab - Arrêt de remplissage de couleur de polygone

Pour une raison quelconque, lorsque j'ai défini les bornes a = 0 à b = 3 , pas de problème, je reçois exactement ce que je veux. Cependant, quand je place les limites au-dessus de 3, les trapèzes vont toujours tracer (par des lignes), mais ils ne seront pas colorés. Dans le code ci-dessous, la couleur s'arrête à 3. Si je tracerai 0 à 6, par exemple, la couleur s'arrête à mi-chemin. 3 à 6, et il n'y a pas de couleur du tout.

Voici les sections pertinentes du Code:

deff('[y] = f(x)','y = e^(x^2)');   // Definition of function 
a = 0;          // Lower bound 
b = 4;          // Upper bound 
n = 20;          // Number of intervals 
h = ((b - a)/n);        // Interval spacing 
x = a:h:b;         // Array of positions for division 

et

for i = 1:n+1 
    y(i) = f(x(i)); 
end 

et

for i = 1:n           // Plot colored trapezoids 
    x_start = a+(h*(i-1)); 
    x_end = a+(h*(i)); 
    y_start = y(i); 
    y_end = y(i+1); 
    xpts = [x_start, x_end, x_end, x_start]; 
    ypts = [y_start, y_end, 0, 0]; 
    xfpoly(xpts,ypts,3); 
end 

This is the plot output for a = 0, b = 3

+0

Eh bien pour commencer 3 est pas une valeur juridique de proximité dans xfpoly – awiebe

+0

@awiebe Non, il est légal: que doit être un entier, la couleur utilisée pour remplir le polygone (voir Scilab aide s'il vous plaît pour plus de détails) . – Attila

Répondre

1

Quelle version de Scilab utilisez-vous? J'ai essayé votre code avec Scilab 5.4.1 (64bit) et j'ai obtenu des trapèzes incolores, mais avec 5.5.2 (64bit) toutes les formes sont vertes. Alors peut-être qu'il y avait un bug entre ces versions. J'ai également changé votre définition de fonction de 'y = e^(x^2)' à 'y = %e^(x^2)' puisque le nombre d'Euler est une variable prédéfinie (au moins dans 5.5.2).

clc; 
clear; 

deff('[y] = f(x)','y = %e^(x^2)');   // Definition of function 
a = 0;          // Lower bound 
b = 6;          // Upper bound 
n = 100;          // Number of intervals 
h = ((b - a)/n);        // Interval spacing 
x = a:h:b;         // Array of positions for division 


for i = 1:n+1 
    y(i) = f(x(i)); 
end 

scf(0); 
clf(0); 
plot2d(x,y); 

for i = 1:n           // Plot colored trapezoids 
    x_start = a+(h*(i-1)); 
    x_end = a+(h*(i)); 
    y_start = y(i); 
    y_end = y(i+1); 
    xpts = [x_start, x_end, x_end, x_start]; 
    ypts = [y_start, y_end, 0, 0]; 
    xfpoly(xpts,ypts,3); 
end 
+0

Désolé pour la réponse tardive (examens finaux). J'ai finalement eu le temps de télécharger la dernière version, et comme vous l'avez dit, elle sort belle. J'utilisais 5.4.1 auparavant, et maintenant avec 5.5.2 il n'y a pas de problèmes! J'apprécie vraiment votre aide. Merci! –