MMA-Mathematica初步了解和使用-MMA

  • Mathematica的用户群中最主要的是科技工作者和其它专业人士。但是,Mathematica还被广泛地用于教学中。数学中的许多计算是非常繁琐的,特别是函数的作图费时又费力,而且所画的图形很不规范,所以现在流行用Mathematica符号计算系统进行学习,从高中到研究生院的数以百计的课程都使用它,很多问题便迎刃而解。此外,随着学生版的出现,Mathematica已经在全世界的学生中流行起来,成为了一个著名的工具。
  • Mathematica的开发工作是由世界级的队伍组成的。这支队伍自从成立以来一直由史蒂芬·沃尔夫勒姆领导。Mathematica的成功使得公司能够集中注意力在非常长远的目标上,运行独特的研发项目,以及通过各种各样的免费网站支持世界各地的知识爱好者。
    长期以来,Mathematica核心设计的普遍性使得其涉及的领域不断增长。从刚开始是一个主要用于数学和科技计算的系统,到发展成许多计算领域的主要力量,Mathematica已经成为世界上最强大的通用计算系统。

Mathematica 分为两部分:内核和前端。内核对表达式(即 Mathematica 代码)进行解释,并且返回结果表达式。
前端由 Theodore Gray 设计,提供了一个 GUI,它使得用户可以创建并且编辑一个“笔记本文档”,该笔记本文档可以包含程序代码和其它格式化的文本(比如公式、图像、GUI组件、表格、声音等),并且支持标准文字处理功能。所有的内容和格式都可以通过算法生成或者通过交互式方法进行编辑。
文档可以使用层次式单元进行结构化处理,这样便于对文档划分章节。文档也可以表示为幻灯片形式,便于进行演讲。笔记本与其内容均以 Mathematica 表达式的形式存储,并且可用使用 Mathematica 程序进行创建、编辑和修改,而且还可以转化为其它格式,比如 TeX 或者 XML。
前端包括开发工具,比如调试器、输入自动补全、以及自动语法着色。
默认情况下,Mathematica 使用一个标准前端,不过也有其它前端可供选择,包括 Wolfram Workbench、2006年引入的基于 Eclipse 的IDE。它们为 Mathematica 提供了面向项目的开发工具,包括版本管理、调试、归档和测试。 此外,Mathematica 还包括一个命令行前端(Mathematica Kernel)。

参考:Wolfram Mathematica: 现代科技计算

起因:Matlab符号计算与方程组求解

计算精确:符号计算基于数学公式、定理并通过一系列推理、演绎得到方程的解或者数学表达式的值。对操作对象不进行离散化和近似化处理。可应用范围有限:实际科研和生产中遇到的问题绝大多数都无法获得精确的符号解,这时我们不得不求助数值计算。

对待符号计算态度:用其来完成公式推导和解决简单的对计算时效性要求不高的问题,综合符号计算和数值计算各自的优点,视问题特点混合使用符号计算和数值计算。
在这里插入图片描述

基本运算

参考:Mathematica 入门(一): 基本的计算

积分,微分运算

累加,累乘运算

极限运算#

解方程

参考:Matlab & Mathematica 解符号方程组

Matlab:

syms a1 b1 c1
syms a2 b2 c2
syms x y

[x,y] = solve( 'a1*x + b1*y + c1 == 0', 'a2*x + b2*y + c2 == 0', 'x','y')
simplify(x)
simplify(y)

三点求齐次变换矩阵
前面的文章主要介绍了旋转矩阵,对于刚体的运动,除了旋转外还有平移。在机器人及自动驾驶中,经常用齐次变换矩阵将旋转和平移进行统一。 前面的文章也介绍过齐次变换矩阵,本文算是一个总结。
将旋转矩阵和平移向量写在同一个矩阵中,形成的[公式]矩阵,称为special Euclidean group,即SE[3]
在这里插入图片描述

syms a1 a2 b1 b2 c1 c2;
syms x1 y1 z1 A1 B1 C1; %原点坐标
syms dzx dzy; % 向量[dzx dzy 1]
vx = [a1,b1,c1];
Nx = norm(vx);
v2 = [a2,b2,c2];
vz = cross(vx,v2)
Nz = norm(vz);
vy = cross(vz,vx)
Ny = norm(vy);
mat = [
    a1/Nx vy(1)/Ny vz(1)/Nz x1;
    b1/Nx vy(2)/Ny vz(2)/Nz y1;
    c1/Nx vy(3)/Ny vz(3)/Nz z1;
    0     0        0        1
];

%% 随便计算验证一下
p1 = [1 2 3 1.1 1 1.3]; % 原点
p2 = [2 3 6 1.1 1 1.2]; % x轴上任意一点
p3 = [5 3 7 1.1 1 1.0]; % x-y平面任意一点

p21 = p2-p1;
p31 = p3-p1;
re = subs(mat, {a1,b1,c1,a2,b2,c2,x1,y1,z1},{p21(1),p21(2),p21(3),  p31(1),p31(2),p31(3),  p1(1),p1(2),p1(3)})
R = re(1:3,1:3);
R*R'; % 单位矩阵
tra = vpa(re,5);  % 获得数值矩阵
tra*[0 0 0 1]' % 将坐标系1下的原点转换到坐标系0,即得到p1

Mathematica:

sol = Solve[ a1*x + b1*y + c1 == 0 && a2*x + b2*y + c2 == 0, {x,y}]
// 因为 MMA 计算结果是一个Rule:{x->xxx , y->xxx},因此需要利用这个Rule得到解,/.表示全部应用规则,例如:f[x_]:=x+1+y,即出现x的地方用x+1+y替换。
x/.sol
y/.sol
在 MMA 中如果需要将结果进一步计算,可应用规则:
f[x,y]/.sol
Simplify[%]
// 将表达式转化为C/C++语言格式
CForm[%]

因为 MMA 计算结果是一个Rule:{x->xxx , y->xxx},因此需要利用这个Rule得到解,/.表示全部应用规则,例如:f[x_]:=x+1+y,即出现x的地方用x+1+y替换。

f[x_]:=x+1+y

Mathematica 解方程组 (数字方程组&含表达式的方程组)

参考:Mathematica 解方程组 (数字方程组&含表达式的方程组)

1. 数字方程组

Solve[{a x + b y == 1, x - y == 2}, {x, y}]

这里是具有两个未知量的简单线性方程:
不是线性方程也可以解。
如果输出是空,如下

- In[2]:= Solve[{l1 + lm == k1, l2 + lm == k2, l1 + (l2 lm/(l2 + lm)) == k3,   l2 + (l1 lm/(l1 + lm)) == k4}, {l1, l2, lm}]
- Out[2]={}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值