[从头学数学] 第217节 带着计算机去高考

Posted mwsister

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[从头学数学] 第217节 带着计算机去高考相关的知识,希望对你有一定的参考价值。

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼。设想一个场景:
如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗
?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉。

正剧开始:

星历2016年05月23日 12:04:40, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起做着2008年的江苏省数学高考题]。


从2005年开始,[人叫板老师]发布了新的修炼功法,就是[机器小伟]

一直以来参照修炼的那部。


然后三年过去了,这一年,所有的修士们都将在全新的模式下进行试炼。

这是新型试炼的第一年。



所以说这个试炼的总分应该是720分,对吧。





所以,根据上面的信息来看,选理科的修士,从此将面对一张总分是200分的数学卷子了。

这张卷子是这样的:

选择题从此说再见了,剩下了14个填空题,主观题重新回到了六个,另外再加四个附加题。


这次的难度不高也不低,考虑到没有选择题可以蒙分,再加上附加题要占用时间,

所以阿伟给评为5环难度。



这张卷子里关于不等式这一块的知识考察那是满天飞啊,足足占据了半壁江山。










<span style="font-size:18px;">#题3
>>> (1+1j)/(1-1j);
1j
</span>



<span style="font-size:18px;">#题4
###
# @usage   多项式运算相关
# @author  mw
# @date    2016年05月23日  星期一  09:36:12 
# @param
# @return
#
###
class Polynomial():
    #格式化打印
    def printPoly(self, array, variable = 'x'):
        len_ = len(array);
        poly = [];
        
        for i in range(len_):
            if (i < len_ -1):
                s = '('+str(array[i])+')*'+variable+'^['+str(len_-1-i)+']';
            else:
                s = '('+str(array[i])+')';
            poly.append(s);

        s = '';
        for i in range(len_):
            s += poly[i];
            if (i < len_ - 1):
                s += '+';
        
        print(s); #格式:(1)*x^[3]+(2)*x^[2]+(-3)*x^[1]+(4)
        return poly;
            
    #解不等式
    def inequality(self, array, symbol = '<'):
        #方程的根
        roots = np.roots(array);
        roots = sorted(roots);
        #print(roots);
        len_ = len(roots);

        p = np.poly1d(array);
        #符合要求的区间
        section = [];

        if (symbol == '<'):
            if (p(roots[0]-1) < 0):
                section.append(['-inf', roots[0]]);
            if (p(roots[len_-1]+1))< 0:
                section.append([roots[len_-1], 'inf']);
        elif (symbol == '>'):
            if (p(roots[0]-1)) > 0:
                section.append(['-inf', roots[0]]);
            if (p(roots[len_-1]+1)) > 0:
                section.append([roots[len_-1], 'inf']);
            
        for i in range(len_-1):
            mid = (roots[i]+roots[i+1])/2;
            if (symbol == '<'):
                if p(mid) < 0:
                    section.append([roots[i], roots[i+1]]);
            elif (symbol == '>'):
                if p(mid) > 0:
                    section.append([roots[i], roots[i+1]]);  
        return section;
    

def tmp4():
    poly = Polynomial();

    #根据两个根求得多项式
    a = np.poly1d([1, 1], True);
    a = np.array(a);
    poly.printPoly(a, 'x');

    #根据多项式系数得多项式
    b = [-3, -7];
    b = np.array(b);

    #两个多项式相加
    c = np.polyadd(a, b);
    poly.printPoly(c, 'x');

    #求根
    d = poly.inequality(c, '<');
    print(d);</span>




<span style="font-size:18px;">   #计算代数式的值
    #代数式具有[(coef)*expr^[exp], ...]这种形式
    #要加载自制的alg模块
    def algValue(self, stralg, valueTable):
        #多项式的项数
        len_s = len(stralg);
        #参数对照表的项数
        #参数对照表具有[['x', '1'], ['y', '3']]这样的形式
        len_v = len(valueTable);

        for i in range(len_s):
            s = stralg[i];

            for j in range(len_v):
                s = s.replace(valueTable[j][0], str(valueTable[j][1]));

            s = s.replace('^[', '**(');
            s = s.replace(']', ')');

            stralg[i] = eval(s);

        return stralg;     

def tmp5():
    poly = Polynomial();

    a = alg.strformat(['5a', '-b']);
    a = alg.strpow_n(a, 2);
    a = alg.strcombine(a); #['(25)*a^[2]', '(-10)*a^[1]*b^[1]', '(1)*b^[2]']
    #print(a);

    #代数式中各代号的值
    value = [['a', 1], ['b', 3]];

    b = poly.algValue(a, value); #['(25)*1**(2)', '(-10)*1**(1)*3**(1)', '(1)*3**(2)'] [25, -30, 9]
    #print(b);

    c = np.dot(b, [1, -0.5, 1]); #49.0
    print(c);
    print(c**0.5);</span>





这就是新出的算法题,引入了程序的框架图,虽然不难,却很好玩。


<span style="font-size:18px;">#题7
def tmp7():
    G = [4.5, 5.5, 6.5, 7.5, 8.5];
    F = [0.12, 0.20, 0.40, 0.20, 0.08];

    s = 0;
    
    for i in range(1, 6):
        s += G[i-1]*F[i-1];

    print(s);
	
>>> 
6.42</span>
















上面是填空题部分,基本都是三、四环的难度,运算量一般。




<span style="font-size:18px;">#题15
def tmp15():
    A = np.arccos(2**0.5/10);
    B = np.arccos(2*5**0.5/5);

    print(np.tan(A+B));
    print((A+2*B)*180/np.pi);
	
>>> 
-3.0
135.0
</span>












下面就是第一次亮相登场的附加题了,本来以为会很难,但仔细一看,

都是3环到4环的难度。但这些题难度虽然不大,但总归要占时间的。

这也就是为什么这张普遍难度在4环的卷子可以评到5环难度。

因为要做14个填空再加10个解答。














整理一下工具:

<span style="font-size:18px;">###
# @usage   多项式运算相关
# @author  mw
# @date    2016年05月23日  星期一  09:36:12 
# @param
# @return
#
###
class Polynomial():
    #格式化打印
    def printPoly(self, array, variable = 'x'):
        len_ = len(array);
        poly = [];
        
        for i in range(len_):
            if (i < len_ -1):
                s = '('+str(array[i])+')*'+variable+'^['+str(len_-1-i)+']';
            else:
                s = '('+str(array[i])+')';
            poly.append(s);

        s = '';
        for i in range(len_):
            s += poly[i];
            if (i < len_ - 1):
                s += '+';
        
        print(s); #格式:(1)*x^[3]+(2)*x^[2]+(-3)*x^[1]+(4)
        return poly;
            
    #解不等式
    def inequality(self, array, symbol = '<'):
        #方程的根
        roots = np.roots(array);
        roots = sorted(roots);
        #print(roots);
        len_ = len(roots);

        p = np.poly1d(array);
        #符合要求的区间
        section = [];

        if (symbol == '<'):
            if (p(roots[0]-1) < 0):
                section.append(['-inf', roots[0]]);
            if (p(roots[len_-1]+1))< 0:
                section.append([roots[len_-1], 'inf']);
        elif (symbol == '>'):
            if (p(roots[0]-1)) > 0:
                section.append(['-inf', roots[0]]);
            if (p(roots[len_-1]+1)) > 0:
                section.append([roots[len_-1], 'inf']);
            
        for i in range(len_-1):
            mid = (roots[i]+roots[i+1])/2;
            if (symbol == '<'):
                if p(mid) < 0:
                    section.append([roots[i], roots[i+1]]);
            elif (symbol == '>'):
                if p(mid) > 0:
                    section.append([roots[i], roots[i+1]]);  
        return section;

    #计算代数式的值
    #代数式具有[(coef)*expr^[exp], ...]这种形式
    #要加载自制的alg模块
    def algValue(self, stralg, valueTable):
        #多项式的项数
        len_s = len(stralg);
        #参数对照表的项数
        #参数对照表具有[['x', '1'], ['y', '3']]这样的形式
        len_v = len(valueTable);

        for i in range(len_s):
            s = stralg[i];

            for j in range(len_v):
                s = s.replace(valueTable[j][0], str(valueTable[j][1]));

            s = s.replace('^[', '**(');
            s = s.replace(']', ')');

            stralg[i] = eval(s);

        return stralg;</span>


本节到此结束,欲知后事如何,请看下回分解。

以上是关于[从头学数学] 第217节 带着计算机去高考的主要内容,如果未能解决你的问题,请参考以下文章

[从头学数学] 第214节 带着计算机去高考

[从头学数学] 第219节 带着计算机去高考

[从头学数学] 第211节 带着计算机去高考

[从头学数学] 第209节 带着计算机去高考

[从头学数学] 第215节 带着计算机去高考

[从头学数学] 第216节 带着计算机去高考