2017-02-03 82 views
1

我一直在研究Scilab中的一个程序,它通过梯形法则(不使用内置函数)在数值上集成了一个函数。我对融合或绘制函数没有任何问题,但是我想将真实函数叠加在彩色的梯形图上。Scilab中的梯形积分 - 多边形颜色填充停止

由于某些原因,当我设置边界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位)所有的形状都很漂亮。 所以也许这些版本之间有一些错误修正。 由于欧拉数是一个预定义变量(至少在5.5.2中),所以我还将函数定义从'y = e^(x^2)'更改为'y = %e^(x^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没有任何问题! 我真的很感谢你的帮助。谢谢! –