数值计算中没有未知数的概念,所以其编程语言中没有未知数。但符号计算中有,mathematica、matlab、sym、maxima、maple、python、sympy所有的符号计算软件中都有未知数。计算机代数系统以符号为计算的基本单位,模拟的就是人们用纸笔进行演算的过程。
一、为什么编程语言中没有未知数
数值计算中没有未知数的概念,所以其编程语言中没有未知数。但符号计算中有,,mathematica、matlab、sym、maxima、maple、python、sympy所有的符号计算软件中都有未知数。计算机代数系统以符号为计算的基本单位,模拟的就是人们用纸笔进行演算的过程。
比如matlab 解方程:
clear all
syms x y A B C D
solve(‘A * x * x + B * x + C = D + y’, ‘x’)
ans =
[ 1/2/A*(-B+(B^2+4*A*y-4*A*C+4*A*D)^(1/2))]
[ 1/2/A*(-B-(B^2+4*A*y-4*A*C+4*A*D)^(1/2))]
solve(‘A * x * x + B * x + C = D + y’, ‘y’)
ans =
A*x^2+B*x+C-D
N元N次方程随便解,比如复杂点的:
clear all
syms R X a b c d x1 x2 x3 x4;
[x1,x2,x3,x4]=solve(‘R*x1+R*x3-X*x4=a’,’R*x2+X*x3+R*x4=b’,’R*x1-X*x2+R*x3=c’,’X*x1+R*x2+R*x4=d’,’x1,x2,x3,x4′)
x1 = (2*R^2*d-2*R^2*b+R*X*c+R*a*X+X^2*d)/X/(4*R^2+X^2)
x2 = (-2*R^2*c+X*R*d+R*X*b-X^2*c+2*R^2*a)/X/(4*R^2+X^2)
x3 = 1/X*(-2*R^2*d+2*R^2*b+R*X*c+X^2*b+R*a*X)/(4*R^2+X^2)
x4 = -(-2*R^2*c-X*R*d-R*X*b+2*R^2*a+X^2*a)/X/(4*R^2+X^2)
还有 Python 的 sympy 库,求解 x^2 = 1 方程,先化解成 xxx = 0 的形式,即 x ^ 2 – 1 = 0
>>> from sympy.solvers import solve
>>> from sympy import Symbol
>>> x = Symbol(‘x’)
>>> solve(x**2-1,x)
[-1, 1]
还可以做一些等式化解:
>>> from sympy import *
>>> x = Symbol(‘x’)
>>> y = Symbol(‘y’)
>>> x + y + x – y
2*x
延伸阅读:
二、什么是编程语言
学习编程语言之前,首先要搞清楚“编程语言”这个概念。
很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们竟然在不知不觉中学会了说话,同时也能听懂其他小朋友说话的意思了,我们开始向父母要零花钱买零食和玩具、被欺负了向父母倾诉……
我们说的是汉语,是“中国语言”,只要把我们的需求告诉父母,父母就会满足,我们用“中国语言”来控制父母,让父母做我们喜欢的事情。
“中国语言”有固定的格式,每个汉字代表的意思不同,我们必须正确的表达,父母才能理解我们的意思。例如让父母给我们10元零花钱,我们会说“妈妈给我10块钱吧,我要买小汽车”。如果我们说“10元给我汽车小零花钱妈妈”,或者“妈妈给我10亿人民币,我要买F-22”,妈妈就会觉得奇怪,听不懂我们的意思,或者理解错误,责备我们。
我们通过有固定格式和固定词汇的“语言”来控制他人,让他人为我们做事情。语言有很多种,包括汉语、英语、法语、韩语等,虽然他们的词汇和格式都不一样,但是可以达到同样的目的,我们可以选择任意一种语言去控制他人。
同样,我们也可以通过”语言“来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming Language)。
编程语言也有固定的格式和词汇,我们必须经过学习才会使用,才能控制计算机。
编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言、Objective-C、Swift、汇编语言等,每种语言都有自己擅长的方面,例如:
编程语言主要用途C/C++C++ 是在C语言的基础上发展起来的,C++ 包含了C语言的所有内容,C语言是C++的一个部分,它们往往混合在一起使用,所以统称为 C/C++。C/C++主要用于PC软件开发、Linux开发、游戏开发、单片机和嵌入式系统。JavaJava 是一门通用型的语言,可以用于网站后台开发、Android 开发、PC软件开发,近年来又涉足了大数据领域(归功于 Hadoop 框架的流行)。C#C# 是微软开发的用来对抗 Java 的一门语言,实现机制和 Java 类似,不过 C# ,目前主要用于 Windows 平台的软件开发,以及少量的网站后台开发。PythonPython 也是一门通用型的语言,主要用于系统运维、网站后台开发、数据分析、人工智能、云计算等领域,近年来势头强劲,增长非常快。PHPPHP 是一门专用型的语言,主要用来开发网站后台程序。JavaScriptJavaScript 最初只能用于网站前端开发,而且是前端开发的少数语言,没有可替代性。近年来由于 Node.js 的流行,JavaScript 在网站后台开发中也占有了一席之地,并且在迅速增长。Go语言Go语言是 2009 年由 Google 发布的一款编程语言,成长非常迅速,在国内外已经有大量的应用。Go 语言主要用于服务器端的编程,对 C/C++、Java 都形成了不小的挑战。Objective-C
SwiftObjective-C 和 Swift 都只能用于苹果产品的开发,包括 Mac、MacBook、iPhone、iPad、iWatch 等。汇编语言汇编语言是计算机发展初期的一门语言,它的执行效率非常高,但是开发效率非常低,所以在常见的应用程序开发中不会使用汇编语言,只有在对效率和实时性要求极高的关键模块才会考虑汇编语言,例如操作系统内核、驱动、仪器仪表、工业控制等。