mathematica学习笔记-CARSZBL 题目加个后缀仅为方便自己搜索。 1. 基础知识 Enter键换行输入; Shift+Enter:执行光标所在单代码; mathematica自定义函数都是大写字母开头,以驼峰式命名,且自变量用中括号包围,比如Sin[x],Cos[x],MatrixForm[x]。 := 表示延时赋值 alt+. 停止计算 1.1 清除所有变量:ClearAll 1.2 注释:(* *)
1.3 函数定义:f[x_] lhs:=rhs表示将 rhs 延时赋给 lhs. rhs 保留未计算的形式. 当 lhs 出现时,它用 rhs 替换,并且每次重新计算.
还可以给函数分段(但这种分段函数无法用D[f[x],x]求导):
计算函数值:
1.4 函数求导或求偏导: D[]
土的剑桥模型微分方程 dq/dp+M-q/p=0求解,令u=q/p,结果为M lnp+q/p-C=0,用mathematica求解:
1.5 函数求全微分: Dt[]
1.6 积分
1.7 用来展开表达式expr 中的乘积和正整数幂:Expand[expr]
更多:
1.8 化简: FullSimplify[expr] 在包括初级和特殊函数的 expr 中尝试各种不同的变换,并且返回它所找到的最简形式.
化简时可以给出假定:
另一个常用化简的函数是Eliminate,意思是消除变量,比如你有6个变量,但只有5个方程,还差一个方程约束,此时可以用1个变量表示出其余5个变量,比如土力学中:
结果:
Eliminate消除变量 Eliminate求得的结果可以用Solve进一步求解:
Solve解方程 1.9 替换:ReplaceAll 或 /. expr/.rules 或 ReplaceAll[expr,rules] 应用一个规则或规则列表尽可能转换一个表达式 expr 的每个子部分. ReplaceAll[rules] 表示可以应用于表达式的 ReplaceAll 的操作符格式. 其中”/.“可以看做ReplaceAll函数的简写。
1.10 绘图添加图例
1.11 Manipulate动态绘图 (1)Manipulate讲解 在Mathematica中,`Manipulate`是一个用于创建交互式控件和可视化的函数。它允许用户通过滑块、拖动条、按钮等控件来操作和调整参数,实时观察结果的变化。`Manipulate`函数的基本语法如下: 其中,`expr`是要进行操作和可视化的表达式或函数,`controls`是用于控制和调整参数的控件列表。`Manipulate`函数会根据控件的当前值自动更新`expr`的计算结果,并实时显示结果的变化。 例如,您可以使用`Manipulate`函数来创建一个滑动条,控制参数`a`的取值,并实时显示`a`的平方值: 在这个示例中,滑动条的取值范围是从0到10,当您通过滑动滑块来改变参数`a`的值时,`Manipulate`函数会自动重新计算`a^2`的值,并实时更新显示结果。 `Manipulate`函数还可以通过添加更多的控件来创建更复杂的交互界面。您可以使用拖动条、复选框、按钮等控件来调整参数,并根据参数的变化来展示不同的可视化结果。这使得`Manipulate`函数非常有用,特别是在探索数据、调试代码、演示和教学等方面。 (2)另一个例子:
激活函数 (3)直接写出来LogisticSigmoid函数定义:
(4)也可以直接将上面的函数写为函数形式,而不是表达式形式。因为此时函数同时随d和T变化,只不过T在Plot部分改变,而d随Manipulate部分改变:
1.12 mathematica基准测试: mathematica会自动运算15个基准测试函数,并给出每个的计算时间和结果,结果会放在一个新建的report中。 2. 参数拟合 2.1 FindFit非线性拟合(以抛物线函数为例) FindFit[data,expr,pars,vars] 求出参数 pars 的数值,使 expr 作为关于 vars 的函数给出对 data 最佳拟合. FindFit[data,{expr,cons},pars,vars] 在带参量的约束条件 cons 下,求最佳拟合. 简单理解就是:FindFit[数据,函数,参数,变量] 只能给出局部最优解,给出的局部最优解有可能是全局最优解
2.2 非线性拟合(以级配方程为例)
2.3 如果参数有范围或有初值:
2.4 NonlinearModelFit nlm = NonlinearModelFit[data, model, parameters, variable]; NonlinearModelFit在 Mathematica 中主要用于数据拟合,并以最小化残差平方和的方式来估计参数。它通常使用局部优化方法,这意味着它可能找到局部最优而不是全局最优解,尤其是当目标函数有多个极值时。
2.5 NMinimize全局优化 如果你想要寻找一个函数的全局最优解,你可以使用 或 。这两个函数都提供了寻找全局最小值的方法,尽管它们也不能保证总是找到全局最优解,但它们提供了更多与全局优化相关的策略。 比 更倾向于全局搜索,因为它包括了一系列全局优化方法,如差分进化(Differential Evolution),模拟退火(Simulated Annealing),以及其他启发式方法。例如: 在这个命令中, 是你想要最小化的函数, 是任何约束条件, 是变量,而 指定了使用差分进化算法,它是一个常用于全局优化的方法。 在 Mathematica 中,曲线拟合可以通过最小化误差函数来实现。误差函数通常是所有数据点的拟合值与实际值差的平方和。在这个例子中,我们可以使用函数来找到参数,和使得误差函数最小。
NMinimize求全局最小数值解 这行代码定义了一个误差函数,它对于数据列表中的每个点,计算模型预测值与实际值之间差的平方,然后将这些平方差加起来得到总误差。这个总误差就是我们在拟合过程中试图最小化的目标函数,上面各句代码含义如下: 是一个函数定义,其中 , , 和 是此函数的参数。在 Mathematica 中,下划线 表示参数的模式匹配,而 , , 和 表示任何传递给 的相应参数都将匹配到 , , 和 . 函数用于计算列表中所有素的总和。 和 是匿名函数(或称为 Pure Function)的一部分。在 Mathematica 中, 表示匿名函数的参数,而 和 是 Part 的简写形式,分别表示列表中第二个素和第一个素。因此, 表示当前输入列表的第二个素, 表示第一个素。 调用了之前定义的模型函数 ,其中 代表列表中的 值。 计算实际的 y 值(从数据的第二个素中获得)与模型预测的 y 值(通过调用 函数)之差的平方。 将前面的表达式转换成一个匿名函数。在 Mathematica 中,匿名函数允许你定义一个没有名字的简短函数, 是定义匿名函数的结束符号。 是 函数的简写形式,它将一个函数应用于列表中的每个素。在这个表达式中,它将匿名函数 应用于 列表中的每个子列表(即每个数据点)。 上面代码使用的差分进化算法的自动参数设定,如果没有找到合理的解,可以尝试对差分进化算法作更详细的设定:
差分进化算法全局优化进行曲线拟合 2.6 组合优化方法的使用 NMinimize还可以使用哪些全局优化算法,请详细给出各算法的具体设定。并分析哪种全局最优算法优化能力最强,哪种优化算法结果最稳定,哪种优化算法速度最快,以以上三种评价标准,哪种优化算法最好? 在 Mathematica 中, 提供了多种全局优化算法,可以通过 选项进行选择和配置。以下是一些可用的全局优化方法及其设定:Differential Evolution ():这种方法对于具有不连续性的问题以及模态函数(即具有多个局部最小值的函数)很有效。mathematicaCopyMethod -> {“DifferentialEvolution”, “ScalingFactor” -> sf, “CrossProbability” -> cp} “` 其中 `sf` 是缩放因子,`cp` 是交叉概率。 Simulated Annealing ():模拟退火是一种概率性算法,对于找到复杂或多峰函数的全局最小值很有用。mathematicaCopyMethod -> {“SimulatedAnnealing”, “InitialTemperature” -> it, “CoolingFactor” -> cf} “` 其中 `it` 是初始温度,`cf` 是冷却因子。 Random Search ():随机搜索方法通过在参数空间内随机采样来寻找最小值,适用于参数空间很大且其他方法不太行得通的情况。mathematicaCopyMethod -> {“RandomSearch”, “SearchPoints” -> sp} “` 其中 `sp` 是初始搜索点的数量。 Nelder-Mead ():这是一种局部优化算法,但有时也可以用在全局优化问题中。它不依赖于梯度信息。mathematicaCopyMethod -> “NelderMead” “` Genetic Algorithm ():遗传算法通过模拟自然选择的过程来解决优化问题,适用于非线性、多模态的优化问题。mathematicaCopyMethod -> {“GeneticAlgorithm”, “PopulationSize” -> ps, “CrossoverFraction” -> cf} “` 其中 `ps` 是种群大小,`cf` 是交叉分数。 Particle Swarm ():粒子群优化是一种基于种群的优化技术,适合连续优化问题。mathematicaCopyMethod -> {“ParticleSwarm”, “InertiaWeight” -> iw, “CognitiveAttraction” -> ca, “SocialAttraction” -> sa} “` 其中 `iw` 是惯性权重,`ca` 是认知吸引力,`sa` 是社会吸引力。 关于哪种算法最优,这取决于特定问题的性质和优化目标。以下是一般性的指导:优化能力最强:通常, 或 等基于种群的方法在找到全局最小值方面更为强大,因为它们可以探索参数空间的不同区域,避免局部最小值。结果最稳定:模拟退火 () 和粒子群 () 算法通常能提供较为稳定的结果,因为它们有机制避免过早收敛到局部最小值。速度最快:对于某些问题, 方法可能会提供最快的结果,尤其是在目标函数相对平滑且问题规模较小的情况下。但它可能陷入局部最小值。 综合以上三种评价标准,没有单一的最佳算法。通常,实践中会根据问题的具体特性来选择或者尝试几种不同的方法。有些情况下,最好的做法是对问题先进行一些初步分析,然后选择两三种最有可能有效的方法进行尝试。在确定最适合的算法时,应考虑问题的维度、目标函数的平滑性、是否容易计算梯度、是否存在约束条件等因素。进行实际的优化实验后,分析各方法的收敛速度、稳定性和解的质量,然后选择表现最好的那一个。 在实际应用中,经常会使用多种方法的组合,例如先使用全局优化方法粗略定位到可能的全局最优区域,然后再用局部优化算法进行精细搜索。这种多阶段优化策略经常能够提供一个不错的折中方案,既能较快地找到可靠的最优解,又能保持算法的稳定性。 在 Mathematica 中进行优化时,你也可以自定义优化方法,或者将多种方法组合使用,以达到最佳效果。例如: mathematicaCopyNMinimize[ {f[x, y, z], constraints}, {x, y, z}, Method -> { “RandomSearch”, Method -> { “DifferentialEvolution”, “PostProcess” -> {“NelderMead”} } } ] 在这个例子中,我们首先使用 方法进行全局搜索,然后使用 进行精细搜索,最后用 方法对可能的最优解进行局部优化。这种策略结合了不同方法的优点,可能会在实践中提供较好的结果。 首先使用方法进行全局搜索,然后使用进行精细搜索,最后用方法对可能的最优解进行局部优化。这种策略结合了不同方法的优点,可能会在实践中提供较好的结果:
组合优化:先用RandomSearch,再用DifferentialEvolution最后用NelderMead 注意,这里我故意将a的范围设定取不到1,而不是这个算法无法找到正确的a、b和c值。 2.7 常微分方程参数拟合 求能将给定数据最佳拟合至范德波尔(Van der Pol)方程的参数 \[Mu].
下面创建一个 ParametricFunction 对象并在 FindFit 中使用:
3. 求根 3.1 牛顿迭代法(自编函数形式)
4. 在泛函求解中的应用 4.1 Ritz 法
mathematica求解:
可见,与文中求解结果一致。
用mathematica求解上述过程:
绘图:
5. 在线使用 Wolfram|Alpha: Computational Intelligence (wolframalpha.com)
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/66902.html