当前您所在的位置:首页>新闻中心>新品发布
新品发布
行业动态
营销活动

Wolfram 语言解答上海交通大学自主招生题(I)

发布时间:2020/10/13 浏览量:1974

第一题

方法一

这里构造了一个 f(x)=log(-x(x-1)) ,满足定义域 (0,1) ,然后用 FunctionDomain 求解定义域,Reduce 解出 x 的范围:

  •  
  •  
  •  
Block[{f, g}, f[x_] = Log[-(x - 1) x];   FunctionDomain[f[x + c] + f[x - c], x]] //  Reduce[{#, 0 < c < 1/2}, x] &

 

方法二

可以取 x 为中点,半径为 c 的邻域进行窗口滑动。显然 x 只能在 c 到 1 - c 之间滑动:

  •  
  •  
  •  
  •  
Manipulate[ NumberLinePlot[{Interval[{x - c, x + c}], x},   PlotRange -> {0, 1}], {c, 0, 1/2}, {x, c, 1 - c},  TrackedSymbols :> All]

 

 
 

解法中使用到的主要函数:

FunctionDomain[f, x]:求变量为的 x 的实函数 f 的最大定义域

Reduce:符号方式化简各种方程并且求解可能取值范围

NumberLinePlot:一维数轴上标出数的位置或者区域

 

第二题

 

图像法求解:作出 2^x 和 (sin(x)+1) 的图像并且标记出可能:

  •  
  •  
  •  
  •  
  •  
  •  
Plot[{2^x, Sin[x] + 1}, {x, -10, 5}, PlotLegends -> "Expressions", AspectRatio -> Automatic,  Epilog -> {PointSize -> Large,    Point[{x, 2^x} /.      NSolve[{2^x == Sin[x] + 1, -10 < x < 2}, Reals]]}]

 

于是我们可以快速判断:

(错误) 方程没有正解。看图可知在 x > 0 处有正解。可以放大该区域并且求二次导数验证凸性。

  •  
Plot[2^x - (Sin[x] + 1), {x, 0, 1}, PlotLegends -> "Expressions"]

 

  •  
D[2^x - (Sin[x] + 1), {x, 1}]

 

在 x = 0.4 附近取到极值

  •  
FindRoot[%, {x, 0.4}]

 

计算二次导数

  •  
D[2^x - (Sin[x] + 1), {x, 2}]

可以得知上式恒为正数,因为它在 x = 0 为正数且在 x = 0 到 π/2 为单调增,之后第一项远大于 1 不会受到 Sin[x] 影响。

(正确) 方程有无穷多个解

因为当 2^x 趋近 -∞时, 其值单调递减并收敛于0,与 Sin(x) + 1 的零点( x = π/2 - 2kπ (k ∈ +Z) ) 附近有两个在横轴上侧交点。

(正确) 方程有一个正数解 ( x = 0 是另外的唯一非负解,直接带入即可验证 ,并且可以通过第二条判断求解过程中的求导来判断唯一性)。

 
 

解法中使用到的主要函数:

Plot[f, {x,...}]:绘制变量为的 x 的实函数 f 在给定范围上的图像

FindRoot:数值方法来寻找表达式在给定初始值附近的根

NSolve:通过数值和符号混合化简计算表达式的解

 

方法一: 直接求解。

产生 1 到 999 的所有数字并且按照题目中的限制直接找到所有满足要求的数字的个数。

  •  
Count[Range@999, n_ /; Mod[n, 5] != 0 && Mod[n, 7] != 0] // Framed

 

对于函数稍作改动,我们可以罗列出所有数字来进一步验证。为了方便控制行数,我们找从686的约数中找一个大小合理的元素作为列数:

  •  
Divisors[686]

 

注意到我们除了加入了表格(Grid)以及分割(Partition),

仅仅把 Count 转换成 Cases 就完成了计数到全部结果显示的变换。

  •  
  •  
  •  
Grid[Partition[  Cases[Range@999, n_ /; Mod[n, 5] != 0 && Mod[n, 7] != 0], 14], Frame -> All]

方法二: 排除法求解。

产生 1 到 999 的所有数字并且按照题目中的限制通过容斥原理(交并集操作)来实现一般手动求解的详细过程

  •  
(multipleOf5 = Cases[Range@999, n_ /; Mod[n, 5] == 0]) // Short

 

  •  
(multipleOf7 = Cases[Range@999, n_ /; Mod[n, 7] == 0]) // Short

根据容斥原理,全集去除所有存在于两个子集的元素,但是要补上重复计算的交集元素。

  •  
  •  
999 - (Length[multipleOf5] + Length[multipleOf7] -     Length[multipleOf7 \[Intersection] multipleOf5]) // Framed

或者更进一步,直接使用并集集合运算来减少代码。

  •  
  •  
Length[Complement[Range@999,    multipleOf5 \[Union] multipleOf7]] // Framed

 

 
 

解法中使用到的主要函数:

Count[elems, patt]

为列表中符合模式匹配的元素计数

Cases[elems, patt]

罗列出为列表中符合模式匹配的元素

Complement/Intersection/Union

内置的集合运算符号,补集合/交集/并集运算

北京哲想软件有限公司