2019年9月27日 星期五

[教學示範]「使用工具:SAS」解高中數學題_一元二次多項次解其極值

例:下面的多項式,若Y為最小值,則X和Y分別為多少?
「注意:此須運用SAS/OR運籌學(註1)模組內的proc optmodel,故SAS UE無法支援」

[抱怨]Google的Blogger無法針對文字進行上標或下標,僅能透過HTML語法調,請新增按鈕進編輯頁好嗎?註2

ANS:

data curve;  /*利用迴圈產生curve資料集,內含 200001筆虛擬觀察值*/
do x=-1000 to 1000 by 0.01;
y=3*x**2-3*x+4;
output;
end;
run;

  ...

<部份資料>

proc optmodel data=curve;  /*求 x y之值,若你上一步剛把curve跑出來,其實可省略data=curve*/
var x;
min y=3*x**2-3*x+4;
solve;
print x y;
quit;


看到答案了嗎?或許你可能會像被三輪車壓到腳的阿嬤一樣沒知覺。沒關係,版大畫圖給你看。


<亂入>

proc sgplot data=curve;
series x=x y=y / lineattrs=(pattern=1 thickness=3);  /*設定曲線的x,y值及其格式*/
xaxis labelattrs=(size=14) valueattrs=(size=14) values=(-1000 to 1000 by 250);  /*設定x軸格式*/
yaxis labelattrs=(size=14) valueattrs=(size=14) values=(0 to 3000000 by 200000);  /*設定y軸格式*/
refline 0.5 / axis=x label="0.5" labelattrs=(size=14) ; /*插入插在x軸上的參考線*/
refline 3.25 / axis=y label="3.25" labelattrs=(size=14 ) ;  /*插入插在y軸上的參考線*/
run;


版大微調上圖,x,y軸起迄及間隔調成合適大小。

proc sgplot data=curve;
series x=x y=y / lineattrs=(pattern=1 thickness=3);
xaxis labelattrs=(size=14) valueattrs=(size=14) values=(-2 to 2 by 0.1);
yaxis labelattrs=(size=14) valueattrs=(size=14) values=(0 to 10 by 1);
refline 0.5 / axis=x label="0.5" labelattrs=(size=14) ;
refline 3.25 / axis=y label="3.25" labelattrs=(size=14) ;
run;

成果如下:


非常清楚的結果,不再解釋!

註1
運籌學是應用恰當的科學技術知識和數學方法對實際問題進行研究,從而提供量化分析依據以及最優方案,幫助決策的一門學科,它包括了多個分支,例如規劃論(含線性規劃、非線性規劃、整數規劃、動態規劃等)、庫存論、決策分析、排隊論、博弈論、圖論、可靠性理論等,這些分支構成了一個完整的運籌學理論體系。

例:大貓麵包工廠主要製作4種麵包和餅乾,分別為可頌、吐司、法式麵包和大貓餅乾。原料主要為麵粉、奶油和黃油,每一烤箱麵包或餅乾的售價及所需原料如表一,麵粉、奶油和黃油的售價及每日可供使用量如表二。


假設每天生產的麵包及餅乾能完售,則每天須分別製作多少箱才能使大貓工廠的總盈利最大化?

SAS公司另針對此模組設計出模擬軟體SAS Simulation,此軟體計算核心多由OR內的procedure完成,可模擬各種情境(例如急診病人流)。



註2


本篇文章完整語法

data curve;
do x=-1000 to 1000 by 0.01;
y=3*x**2-3*x+4;
output;
end;
run;

proc optmodel data=curve;
var x;
min y=3*x**2-3*x+4;
solve;
print x y;
quit;

proc sgplot data=curve;
series x=x y=y / lineattrs=(pattern=1 thickness=3);
xaxis labelattrs=(size=14) valueattrs=(size=14) values=(-2 to 2 by 0.1);
yaxis labelattrs=(size=14) valueattrs=(size=14) values=(0 to 10 by 1);
refline 0.5 / axis=x label="0.5" labelattrs=(size=14) ;
refline 3.25 / axis=y label="3.25" labelattrs=(size=14) ;
run;

同場加映







出處:





沒有留言: