前言

今日,同门叫我帮忙算几个偏导数。

题目如下:
  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=110((δ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(veφ+θ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=(211k)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的下载

请参考:Mathematical 下载指导和安装教程

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运行

运行结果如下:
在这里插入图片描述

可以得到各个偏导数:
在这里插入图片描述

运行结果与手算结果对比,无误!


总结

短短几行代码,就能快速并准确无误的计算出结果!
这使我更加坚信:技术改变世界!要解放思想,敢于使用新技术,虽然学习会花费一点时间,但用的时候却节省了大量的时间。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐