2017-02-03 13 views
1

Я работаю над программой в Scilab, которая численно интегрирует функцию по правилу трапеции (без использования встроенной функции). У меня нет проблем с интеграцией или построением функции, но я хочу наложить реальную функцию на график трапеций, окрашенных в.Интеграция трапеции в Scilab - Polygon Color Fill Stops

По какой-то причине, когда я устанавливаю границы a = 0 - b = 3 , не проблема, я получаю именно то, что хочу. Однако, когда я устанавливаю границы выше 3, трапеции будут по-прежнему отображаться (по линиям), но они не будут окрашены. В приведенном ниже коде цвет останавливается на 3. Если я нахожу график от 0 до 6, например, цвет останавливается на полпути. 3-6, и вообще нет цвета.

Вот соответствующие разделы кода:

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 

и

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

и

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

Ну для начала 3 не является допустимым значением закрытия в xfpoly – awiebe

+0

@awiebe Нет, это законно: это должно быть целым числом, цвет, используемый для заполнения многоугольника (см Scilab справку для получения более подробной информации) , – Attila

ответ

1

Какая версия Scilab вы используете? Я пробовал свой код с Scilab 5.4.1 (64 бит), и я получил неокрашенные трапеции, но с 5.5.2 (64 бит) все фигуры приятные зеленые. Так что, возможно, было какое-то исправление между этими версиями. Я также изменил определение функции с 'y = e^(x^2)' на 'y = %e^(x^2)', так как число Эйлера является предопределенной переменной (по крайней мере, в 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

Извините за поздний отклик (заключительные экзамены). Я, наконец, добрался до последней версии, и, как вы сказали, это выглядит красиво. Раньше я использовал 5.4.1, а теперь с 5.5.2 проблем нет! Я очень ценю вашу помощь. Благодаря! –