標籤:
劇情提要:
[機器小偉]在[工程師阿偉]的陪同下進入了[九轉金丹]之第八轉的修鍊。設想一個情境:
如果允許你帶一台不連網的電腦去參加高考,你會放棄選擇一個手拿計算機和草稿本嗎
?阿偉決定和小偉來嘗試一下用電腦算高考題會是怎樣的感覺。
正劇開始:
星曆2016年05月20日 11:40:58, 銀河系厄爾斯星球中華帝國江南行省。
[工程師阿偉]正在和[機器小偉]一起做著2005年的江蘇省數學高考題]。
總體來說,這次的難度和上一年持平,都是很厚道的那種,
不過上一年的好多題都像鬧著玩似的,這次稍微好點,不過運算量也很小。
然後最大的改變就是打破了持續N年的22題格局,用減少一個主觀題為代價,添加了兩個填空題。
<span style="font-size:18px;">def tmp1(): A = set([1, 2]); B = set([1,2,3]); C = set([2,3,4]); D = (A.intersection(B)).union(C); print(D); E = (A & B) | C; print(E);>>> {1, 2, 3, 4}{1, 2, 3, 4}</span>
<span style="font-size:18px;">//題2if (1) { var r = 20; config.setSector(1,1,1,1); config.graphPaper2D(0, 0, r); config.axis2D(0, 0,180); //座標軸設定 var scaleX = 2*r, scaleY = 2*r; var spaceX = 2, spaceY = 2; var xS = -10, xE = 10; var yS = -20, yE = 20; config.axisSpacing(xS, xE, spaceX, scaleX, 'X'); config.axisSpacing(yS, yE, spaceY, scaleY, 'Y'); var transform = new Transform(); //存放函數映像上的點 var a = [], b = [], c = [], d = []; //需要顯示的函數說明 //希臘字母表(存此用於Ctrl C/V //ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ //αβγδεζηθικλμνξοπρστυφχψω var f1 = 'y = 2^[1-x]+3的反函數', f2 = 'y = 2^[1-x]+3', f3 = '', f4 = ''; var y1 = y2 = 0;//(1-(x+2)^2)^0.5for (var x = xS; x <= xE; x+=0.2) { y1 = Math.pow(2, 1-x)+3;a.push([y1, x]);b.push([x, y1]); } //存放臨時數組 var tmp = []; //顯示變換 if (a.length > 0) { a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY); //函數1 tmp = [].concat(a); shape.pointDraw(tmp, 'red'); tmp = [].concat(a); shape.multiLineDraw(tmp, 'pink'); plot.setFillStyle('red'); plot.fillText(f1, 100, -90, 200); } //顯示變換 if (b.length > 0) { b = transform.scale(transform.translate(b, 0, 0), scaleX/spaceX, scaleY/spaceY); //函數1 tmp = [].concat(b); shape.pointDraw(tmp, 'blue'); tmp = [].concat(b); shape.multiLineDraw(tmp, '#2288FF'); plot.setFillStyle('blue'); plot.fillText(f2, 100, -120, 200); } } var f1 = 'y = Math.log(2/(x-3))/Math.log(2)', f2 = 'y = 2^[1-x]+3', f3 = '', f4 = ''; var y1 = y2 = 0;//(1-(x+2)^2)^0.5for (var x = xS; x <= xE; x+=0.2) { y1 = Math.log(2/(x-3))/Math.log(2)a.push([x, y1]); } </span>
<span style="font-size:18px;">#題4def tmp4(): panel = Panel(); #正三稜柱ABC-A1B1C1 A, B, C = [0, 0, 0], [2,0,0], [1, 3**0.5, 0]; A1, B1, C1 = [0, 0, 1], [2,0,1], [1, 3**0.5, 1]; #平面ABC的法向量 norm_ABC = panel.normal([A, B, C]); print(norm_ABC); #平面ABC的一般式方程 genre_ABC = panel.genreForm([A, B, C]); print(genre_ABC); #占A到平面A1BC的距離 dis_A_A1BC = panel.pt2panel(A, [A1, B, C]); print(dis_A_A1BC);>>> [0.0, 0, 3.4641016151377544][0.0, 0, 3.4641016151377544, -0.0]0.8660254037844386#### @usage 平面解析幾何裡的平面類,包含相關的一組計算方法# @author mw# @date 2016年05月20日 星期五 09:02:31 # @param# @return#####涉及到平面,所有的座標點都是空間座標系[x, y, z]形式class Panel(): #平面的法向量, 由[P_[1], P_[2], P_[3]]唯一確定平面 def normal(self, plain): #平面上的三個點 point_1, point_2, point_3 = plain[0], plain[1], plain[2]; x_1, y_1, z_1 = point_1[0], point_1[1], point_1[2]; x_2, y_2, z_2 = point_2[0], point_2[1], point_2[2]; x_3, y_3, z_3 = point_3[0], point_3[1], point_3[2]; #中間變數 a = (y_2-y_1)*(z_3-z_1) - (y_3-y_1)*(z_2-z_1); b = (z_2-z_1)*(x_3-x_1) - (z_3-z_1)*(x_2-x_1); c = (x_2-x_1)*(y_3-y_1) - (x_3-x_1)*(y_2-y_1); return [a, b, c]; #平面一般式方程,由三個平面點得到Ax+By+Cz+D=0中的四個參數A,B,C,D def genreForm(self, plain): norm = self.normal(plain); a, b, c = norm[0], norm[1], norm[2]; #平面上的三個點 point_1, point_2, point_3 = plain[0], plain[1], plain[2]; x_1, y_1, z_1 = point_1[0], point_1[1], point_1[2]; x_2, y_2, z_2 = point_2[0], point_2[1], point_2[2]; x_3, y_3, z_3 = point_3[0], point_3[1], point_3[2]; d = -(a*x_1+b*y_1+c*z_1); return [a, b, c, d]; #點到平面的距離 def pt2panel(self, point, panel): #平面一般式的參數 a, b, c, d = self.genreForm(panel); x, y, z = point[0], point[1], point[2]; distance = abs((a*x+b*y+c*z+d)/(a**2+b**2+c**2)**0.5); return distance;</span>
<span style="font-size:18px;">#題5def tmp5(): #三角形ABC, 多給一條邊試算 tri_ABC = geo.solveTriangle([3, 2, '?', 60, '?', '?']); print(tri_ABC); BC, AC, AB = tri_ABC[0], tri_ABC[1], tri_ABC[2]; #周長 perimeter = BC+AC+AB; print(perimeter); #角B,轉為弧度 B = tri_ABC[4]/180*math.pi; #選項,用於對比 choice = [4*1.732*math.sin(B+math.pi/3)+3, 4*1.732*math.sin(B+math.pi/6)+3, 6*math.sin(B+math.pi/3)+3, 6*math.sin(B+math.pi/6)+3 ]; answer = 'ABCD'; for i in range(4): if abs(choice[i]- perimeter)< 1e-6: print(answer[i]);>>> [3, 2, 3.4494897427831783, 60.0, 35.264389682754654, 84.73561031724536]8.449489742783179D</span>
<span style="font-size:18px;">//題7if (1) {analyze = new DataAnalyze();a = [9.4, 9.4, 9.4, 9.6, 9.7];hint(analyze.average(a));hint(analyze.variance(a));}9.50.015999999999999886#題7def tmp7(): analyze = DataAnalyze(); array = [9.4, 8.4, 9.4, 9.9, 9.6, 9.4, 9.7]; array = sorted(array); array = array[1:-1]; print(array); array = analyze.format(array); sum_ = analyze.sum(array); print(sum_); aver_ = analyze.average(array); print('均值 ', aver_); variance = analyze.variance(array); print('方差 ', variance); #numpy數組的屬性 print(array.ndim); print(array.shape); print(array.size); print(array.dtype); print(array.itemsize); print(array.data);>>> [9.4, 9.4, 9.4, 9.6, 9.7]47.5均值 9.5方差 0.0161(5,)5float648<memory at 0x0205AD50>#### @usage 資料的集中分析類# @author mw# @date 2016年05月20日 星期五 10:06:47 # @param# @return####class DataAnalyze(): #由於numpy的方法介面只對narray開放,所以,數組先要格式化一下 #對於自己的數組而言,這個方法是必須要先調用一下,才能使用numpy方法的 def format(self, array): return numpy.array(array); #求和 def sum(self, array): return array.sum(); #均值 def average(self, array): return self.sum(array)/len(array); #方差 def variance(self, array): array_ = array*array; sum_ = array_.sum(); aver_ = self.average(array); result = sum_/len(array) - aver_**2; return result; #標準差 def RMS(self, array): return (self.variance)**0.5;</span>
<span style="font-size:18px;">#題9def tmp9(): a = ['x', '2']; a = alg.strformat(a); a = alg.strpow_n(a, 5); a = alg.strcombine(a); print(a);>>> ['(1)*x^[5]', '(10)*x^[4]', '(40)*x^[3]', '(80)*x^[2]', '(80)*x^[1]', '(32)']</span>
<span style="font-size:18px;">#題16def tmp16(): print(math.log(0.618)/math.log(3));</span>
<span style="font-size:18px;">#題20def tmp20(): #甲、乙命中率 p_1 = 2/3; p_2 = 3/4; #(1) print(1-p_1**4); #(2) 有組合數相乘 a = alg.combination(4, 2)*p_1**2*(1-p_1)**2; b = alg.combination(4, 3)*p_2**3*(1-p_2); print(a*b); #(3) a12 = 1-(1-p_2)**2; #前兩次,只要不是都不擊中 a3 = p_2; #第三次, 必須擊中 a45 = (1-p_2)**2; #第四五次,必須不中 print(a12*a3*a45);>>> 0.80246913580246910.125000000000000030.0439453125</span>
<span style="font-size:18px;">#題21def tmp21(): #已知邊 AS = AB = AE = 2; BC = DE = 1.732; #已知角 A = C = D = 120; #解三角形,數組是以對邊對角的方式排列的 tri_ABS = geo.solveTriangle(['?', AS, AB, 90, '?', '?']); BS = tri_ABS[0]; ES = BS; tri_ABE = geo.solveTriangle(['?', AE, AB, A, '?', '?']); BE = tri_ABE[0]; tri_BES = geo.solveTriangle([ES, BS, BE, '?', '?', '?']); print('CD與AB成的角:', tri_BES[3]);>>> CD與AB成的角: 52.23875609296496>>> math.acos(6**0.5/4)*180/3.14252.23198356916861>>> math.acos(6**0.5/4)*180/math.pi52.23875609296496 #(2) #角B B = (540-A-C-D)/2; #tri_BCD = geo.solveTriangle([CD, '?', BC, '?', C, '?']); print(B); ''' >>> CD與AB成的角: 52.23875609296496 90.0 '''</span>
本節到此結束,欲知後事如何,請看下回分解。
[從頭學數學] 第214節 帶著電腦去高考(六)