小白如何使用Mathematica来计算数学问题(无需学习Mathematica语法)
小白如何使用Mathematica来计算数学问题(无需学习Mathematica语法)
文章目录
前言
今日,同门叫我帮忙算几个偏导数。
题目如下:
E p = 1 2 K ∑ k = 1 10 ( ( δ L k ) 2 + ( δ R k ) 2 ) \ E_p = \frac{1}{2} K \sum_{k=1}^{10} \left( (\delta_{Lk})^2 + (\delta_{Rk})^2 \right) \ Ep=21Kk=1∑10((δLk)2+(δRk)2)
其中,
δ L k = [ − u + φ f 1 ( k ) − ψ x k ] cos β + ( − 1 ) k + 1 ( v − e φ + θ x k ) sin β \ \delta_{Lk} = [-u + \varphi f_1(k) - \psi x_k] \cos \beta + (-1)^{k+1} (v - e\varphi + \theta x_k) \sin \beta \ δLk=[−u+φf1(k)−ψxk]cosβ+(−1)k+1(v−eφ+θxk)sinβ
δ R k = [ u − φ f 2 ( k ) + ψ x k ] cos β + ( − 1 ) k + 2 ( v + e φ + θ x k ) sin β \ \delta_{Rk} = [u - \varphi f_2(k) + \psi x_k] \cos \beta + (-1)^{k+2} (v + e\varphi + \theta x_k) \sin \beta \ δRk=[u−φf2(k)+ψxk]cosβ+(−1)k+2(v+eφ+θxk)sinβ
f 1 ( k ) = { a if k is even b if k is odd \ f_1(k) = \begin{cases} a & \text{if } k \text{ is even} \\ b & \text{if } k \text{ is odd} \end{cases} \ f1(k)={abif k is evenif k is odd
f 2 ( k ) = { a if k is odd b if k is even \ f_2(k) = \begin{cases} a & \text{if } k \text{ is odd} \\ b & \text{if } k \text{ is even} \end{cases} \ f2(k)={abif k is oddif k is even
x k = ( 11 2 − k ) s \ x_k = \left( \frac{11}{2} - k \right) s \ xk=(211−k)s
求 E p Ep Ep 分别对 u u u, v v v, φ \varphi φ, θ \theta θ, ψ \psi ψ的偏导。
我手算了一下对 u u u的偏导,如下:


然后,我意识到手算有两个严重问题:
(1)工作量太大,耗时长;
(2)容易出错。
这时,我想起本科上数学课时,老师曾提起过的一款数学计算软件:Mathematica,它可以帮你做几乎所有的数学计算。
不使用MATLAB的原因是:MATLAB只能得到数值解,而我们需要的是解析解。
接下来,我就详细说明一下一个小白如何使用Mathematica来解决以上问题,希望对大家有用!
1. Mathematica的下载
Key Generator在评论区:
网址:Wolfram Mathematica 13 Key Generator Online
2. Mathematica代码
相信大多数人都没有学过Mathematica语法,但是没关系,我们有伟大的ChatGPT !
2.1 首先,我们要将题目中的公式转换为LaTeX格式
因为在向ChatGPT提问时,ChatGPT只能识别LaTeX格式的公式。
但是,我也不懂LaTeX语法,所以我们可以借助MathType来帮忙:
在用MathType打好公式后,点击工具栏中的切换TeX
就可以将其转换为LaTeX格式啦

在把所有公式都转换为LaTeX格式后,就可以向ChatGPT提问啦。
2.2 向ChatGPT提问
提问如下:(截图原因,代码看不清,主要看如何提问)
最终得到的mathematica代码如下:
(* 定义变量和函数 *)
ClearAll["Global`*"] (* 清除之前的定义,防止干扰 *)
K =.; a =.; b =.; ϕ =.; ψ =.; θ =.; e =.; β =.; s =.; v =.; (* 定义为未知数 *)
(* 定义函数 *)
f1[k_] := If[EvenQ[k], a, b]
f2[k_] := If[OddQ[k], a, b]
δL[k_] := (-u + ϕ*f1[k] - ψ*x[k])*Cos[β] + (-1)^(k + 1)*(v - e*ϕ + θ*x[k])*Sin[β]
δR[k_] := (u - ϕ*f2[k] + ψ*x[k])*Cos[β] + (-1)^(k + 2)*(v + e*ϕ + θ*x[k])*Sin[β]
x[k_] := (11/2 - k)*s
(* 能量函数 Ep *)
Ep = (1/2)*K*Sum[(δL[k]^2 + δR[k]^2), {k, 1, 10}]
(* 计算偏导数 *)
D[Ep, u]
3. Mathematica运算
将以上代码Copy到Mathematica,并进行一些调整(如:添加FullSimplify、Collect等),最终的代码如下:
(*定义变量和函数*)ClearAll["Global`*"] (*清除之前的定义,防止干扰*)
K =.; a =.; b =.; \[Phi] =.; \[Psi] =.; \[Theta] =.; e =.; \[Beta] \
=.; s =.; v =.; (*定义为未知数*)
(*定义函数*)
f1[k_] := If[EvenQ[k], a, b]
f2[k_] := If[OddQ[k], a, b]
\[Delta]L[
k_] := (-u + \[Phi]*f1[k] - \[Psi]*x[k])*
Cos[\[Beta]] + (-1)^(k + 1)*(v - e*\[Phi] + \[Theta]*x[k])*
Sin[\[Beta]]
\[Delta]R[
k_] := (u - \[Phi]*f2[k] + \[Psi]*x[k])*
Cos[\[Beta]] + (-1)^(k + 2)*(v + e*\[Phi] + \[Theta]*x[k])*
Sin[\[Beta]]
x[k_] := (11/2 - k)*s
(*能量函数 Ep*)
Ep = (1/2)*K*Sum[(\[Delta]L[k]^2 + \[Delta]R[k]^2), {k, 1, 10}]
(*计算偏导数*)
FullSimplify[D[Ep, u]]
FullSimplify[D[Ep, v]]
Collect[FullSimplify[D[Ep, \[Phi]]], {u, \[Phi], \[Theta]}]
FullSimplify[D[Ep, \[Theta]]]
FullSimplify[D[Ep, \[Psi]]]
然后按Shift+Enter运行
运行结果如下:
可以得到各个偏导数:
运行结果与手算结果对比,无误!
总结
短短几行代码,就能快速并准确无误的计算出结果!
这使我更加坚信:技术改变世界!要解放思想,敢于使用新技术,虽然学习会花费一点时间,但用的时候却节省了大量的时间。
更多推荐
所有评论(0)