2017-02-03 98 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沒有任何問題! 我真的很感謝你的幫助。謝謝! –