数学软件FreeMat(数据处理与模型建设工具)
v4.2 (内置两个程序)- 软件大小:103.88 MB
- 更新日期:2020-05-08 17:07
- 软件语言:简体中文
- 软件类别:理科工具
- 软件授权:免费版
- 软件官网:待审核
- 适用平台:WinXP, Win7, Win8, Win10, WinAll
- 软件厂商:
软件介绍 人气软件 下载地址
FreeMat是一款免费的科学数据处理及模型建设的软件,提供开源数值计算环境和编程语言,类似于MATLAB和GNU Octave;除了支持许多MATLAB函数和某些IDL功能外,它还具有到外部C,C ++和Fortran代码的无代码接口,进一步的并行分布式算法开发(通过MPI),并具有绘图和3D可视化功能;这个版本带来了重大的功能改进和FreeMat内部的变化;带有集成调试器的改进的编辑器,改进的Main Application UI,具有可停靠的工作区浏览器和命令历史记录,提供即时编译器,整个应用程序用户界面功能分布非常清晰,需要的用户可以下载体验
软件功能
与Matlab的兼容性大大提高(通过了366项兼容性测试)
与BLAS动态链接(用户可以使用自定义优化的BLAS库)
向量化的fprintf,sprintf,fscanf,sscanf函数
添加了补丁句柄图形对象
更快的图形绘制
在64位操作系统下编译时能够处理巨大的阵列(大于2GB)
代码分析器
目前 FreeMat 4.2 已经发布,并做了如下改进:
改进的编辑器,集成调试器;改进用户界面可停靠工作区和历史命令;
及时编译器(默认启用);大大提高了与 Matlab 的兼容性;
动态BLAS联接;矢量fprintf,sprintf,fscanf,sscanf函数;
新增修补处理图形对象;更快的数字绘图;
在64位操作系统下处理能力超过2GB,代码分析器。
软件特色
Matlab是一款功能极其强大的数学软件,但对于学生来说,在数模竞赛、社会实践、课程学习中所涉及到的数据处理
如果用 Matlab 未免显得杀鸡用牛刀!在处理大量数据方面,很少有软件能和 Matlab 匹敌的,
在学生涉及的小型数据处理中,用 Matlab 反而显得小题大做、大材小用,甚至显得“笨重”
FreeMat 非常适合学生使用,而且它的语法和 Matlab 极其相似且与 Matlab 兼容,
只要你熟悉 Matlab,对FreeMat 的操作就不会陌生!
考虑到 FreeMat 与 Matlab 语法的相似性和兼容性,你也可以把 FreeMat 当做 Matlab 的学习软件,
这样就避免了 1G多的下载之苦和注册授权的限制,因为 FreeMat 免费的,且体积是如此小巧!
安装步骤
PS:文件夹中的程序时绿色版,双击运行程序即可打开
1、用户可以点击本网站提供的下载路径下载得到对应的程序安装包
2、只需要使用解压功能将压缩包打开,双击主程序即可进行安装,弹出程序安装界面
3、同意上述协议条款,然后继续安装应用程序,点击同意按钮即可
4、可以根据自己的需要点击浏览按钮将应用程序的安装路径进行更改
5、弹出以下界面,用户可以直接使用鼠标点击下一步按钮
6、桌面快捷键的创建可以根据用户的需要进行创建,也可以不创建
7、弹出应用程序安装进度条加载界面,只需要等待加载完成即可
8、根据提示点击安装,弹出程序安装完成界面,点击完成按钮即可
使用说明
细胞单元阵列定义
用法
单元阵列是FreeMat中可用的功能非常强大的阵列类型。一般来说,单元格数组是异构数组类型,这意味着数组中的不同元素可以包含不同类型的变量(包括其他单元格数组)。对于熟悉的人C,它等效于void *数组。其构造的一般语法是
A = {row_def1; row_def2; ...; row_defN}
其中每一行包含一个或多个元素,以逗号分隔
row_defi = element_i1,element_i2,...,element_iM
每个元素可以是FreeMat变量的任何类型,包括矩阵,数组,单元格数组,结构,字符串等。对定义的限制是每行中必须具有相同数量的元素。
例子
这是一个包含数字,字符串和数组的单元格数组的示例
-> A = {14,'hello',[1:10]}
A =
[14] [你好] [1x10双数组]
请注意,在输出中,数字和字符串已显式打印,但数组已汇总。我们可以通过添加另一个行定义来创建二维单元数组
[1x3单元阵列] [2x2单元阵列]
功能句柄
从1.11版开始,FreeMat现在支持function handles或function pointers。A function handle是存储在变量中的函数或脚本的别名。首先,分配功能句柄的方法是使用符号
处理= @func
func指向的名称在哪里。该函数func必须在我们进行调用时存在。它可以是局部函数(即子函数)。要使用handle,我们可以将其传递给feval通过
[x,y] = feval(handle,arg1,arg2)。
或者,您可以直接使用符号来执行功能
[x,y] = handle(arg1,arg2)
GLOBAL全局变量
全局变量是共享变量,可以从声明它们的任何函数或脚本中查看和修改。该global语句的语法是
全局变量_1变量_2 ...
该global语句必须在变量出现之前发生。
例
这是使用全局变量在它们之间传递数组的两个函数的示例。第一个函数设置全局变量。
索引索引表达式
FreeMat中提供了三类索引表达式:(),{}和,.下面将分别对它们进行详细说明,并提供其自己的示例部分。
索引编制
我们从数组索引开始(),它是最通用的索引表达式,可以在任何数组上使用。索引表达式有两种通用形式-N维形式,其通用语法为
变量(index_1,index_2,...,index_n)
和向量形式,一般语法为
变量(索引)
在这里,每个索引表达式都是标量,整数值范围或特殊记号:,它是的简写1:end。当关键字end包含在索引表达式中时,将被分配该维度中数组的长度。这个概念比说明更容易证明。
在这里,数组索引仅在左侧使用。它也可以用于右侧索引,
请注意,我们使用end关键字来避免必须知道A有4列。当然,我们也可以使用:令牌代替:
:数组索引的一个非常有用的示例是切片。假设我们有一个3-D数组,即2 x 2 x 3,我们想要设置中间切片:
在另一个细微差别上,只要长度匹配,赋值表达式将使用来自右侧的数据自动填充左侧的索引矩形。因此,我们可以使用以下方法获取一个向量并将其滚动到矩阵中
可变索引的N维形式仅限于访问数组的(超)矩形区域。例如,您不能使用它仅访问数组的对角元素。为此,您可以使用数组访问(或循环)的第二种形式。向量形式将任意N维数组视为列向量。然后,您可以find高效地访问数组元素的任意子集(例如,通过表达式)。请注意,在矢量形式中,end关键字采用的是数组总长度(定义为其维数的乘积)的含义,而不是沿第一个维的大小。
索引编制
索引的第二种形式在很大程度上以与数组索引相同的方式运行,但绝不是可互换的。顾名思义,cell-indexing仅适用于cell数组。对于那些熟悉的人C,单元格索引等效于中的指针取消引用C。一,语法:
变量{index_1,index_2,...,index_n}
和向量形式,一般语法为
变量{index}
N维和向量索引的规则和解释与相同(),因此我们仅描述差异。简而言之,应用于()单元数组将返回另一个单元数组,该单元数组是原始数组的子集。另一方面,应用于{}单元数组将返回该单元数组的内容。一个简单的例子使区别很明显:
-> A = {1,'hello',[1:4]}
A =
[1] [你好] [1x4双数组]
-> A(1:2)
回答=
[1] [你好]
-> A {1:2}
回答=
1之2:
1个
2之2:
你好
您可能会对最后一行的响应感到惊讶。输出是对ans!的多个分配。可以在需要表达式列表的任何地方使用单元数组取消引用的输出。这包括函数调用的参数和返回,矩阵构造等。这是使用单元数组将参数传递给函数的示例:
-> A = {[1,3,0],[5,2,7]}
A =
[1x3双精度数组] [1x3双精度数组]
->最大值(A {1:end})
回答=
5 3 7
在这里,单元数组用于捕获收益。
-> [K {1:2}] = max(randn(1,4))
K =
[0.779398] [4]
这里,在矩阵构建过程中使用了细胞阵列:
-> C = [A {1}; A {2}]
C =
1 3 0
5 2 7
请注意,这种形式的索引用于实现可变长度参数以起作用。请参阅varargin和varargout了解更多详细信息。
索引编制
索引的第三种形式是结构索引。它只能应用于结构数组,并且具有常规语法
variable.fieldname
fieldname结构上的字段之一在哪里。请注意,在FreeMat中,字段是动态分配的,因此,如果您引用分配中不存在的字段,则会自动为您创建该字段。如果变量是数组,则.引用的结果是表达式列表,就像{}运算符一样。因此,我们可以以简单的方式使用结构索引:
->清除A
-> A.color ='蓝色'
A =
颜色:蓝色
-> B = A.color
B =
蓝色
或者以更复杂的方式使用表达式列表作为函数参数
->清除A
-> A(1).maxargs = [1,6,7,3]
A =
maxargs:1x4双数组
-> A(2).maxargs = [5,2,9,0]
A =
具有字段的1x2结构数组:
最大参数
->最大(A.maxargs)
回答=
5 6 9 3
或存储功能输出
->清除A
-> A(1).maxreturn = [];
-> A(2).maxreturn = [];
-> [A.maxreturn] = max(randn(1,4))
A =
具有字段的1x2结构数组:
最大回报
FreeMat现在还支持所谓的动态字段索引表达式。在这种模式下,字段名是通过表达式提供的,而不是显式提供的。例如,假设我们有一组按颜色索引的结构,
-> x.red = 430;
-> x.green = 240;
-> x.blue = 53;
-> x.yello = 105
x =
红色:430
绿色:240
蓝色:53
yello:105
然后,我们可以x使用动态字段引用来索引结构:
-> y ='绿色'
y =
绿色
->一个= x。(y)
=
240
请注意,索引表达式必须解析为字符串才能使动态字段索引起作用。
索引编制
上述索引表达式可以自由组合以影响复杂的索引表达式。这是一个在一个分配中练习所有三个索引表达式的示例。
-> Z {3} .foo(2)= pi
Z =
[0] [0] [1x1结构数组]
从该语句中,FreeMat推断Z是长度为3的单元格数组,第三个元素是结构数组(带有一个元素),并且该结构数组包含一个名为'foo'的字段,其中包含两个双精度元素,第二个元素其中分配了pi的值。
MATRIX矩阵定义
矩阵是FreeMat的基本数据类型。可以使用以下语法定义矩阵
A = [row_def1; row_def2; ...,row_defN]
其中每一行包含一个或多个元素,以逗号分隔
row_defi = element_i1,element_i2,...,element_iM
每个元素可以是标量值,也可以是另一个矩阵,只要结果矩阵定义有意义即可。通常,这意味着属于一行的所有元素本身具有相同数量的行,并且所有行定义具有相同数量的列。矩阵实际上是N维数组的特殊情况,其中N<=2。不能使用上述括号符号来构造高维数组。通过检查元素的类型来确定以此方式定义的矩阵的类型(使用括号表示法)。选择结果类型,以使任何元素上都不会丢失任何信息(或者等效地,通过从元素中存在的那些中选择最高顺序的类型)。
例子
这是int32元素矩阵的示例(请注意,未类型化的整数常量默认为type int32)。
-> A = [1,2; 5,8]
A =
1 2
5 8
现在,我们通过在的右侧添加一列A并使用浮点常量来定义新矩阵。
-> B = [A,[3.2f; 5.1f]]
B =
1.0000 2.0000 3.2000
5.0000 8.0000 5.1000
接下来,我们B通过在底部添加一行来添加扩展。请注意,使用无类型的浮点常量将如何强制结果为typedouble
-> C = [B; 5.2,1.0,0.0]
C =
1.0000 2.0000 3.2000
5.0000 8.0000 5.1000
5.2000 1.0000 0
如果我们改为添加一行complex值(请记住,这i是一个complex常量,而不是一个dcomplex常量)
-> D = [B; 2.0f + 3.0f * i,i,0.0f]
D =
1.0000 + 0.0000i 2.0000 + 0.0000i 3.2000 + 0.0000i
5.0000 + 0.0000i 8.0000 + 0.0000i 5.1000 + 0.0000i
2.0000 + 3.0000i 0.0000 + 1.0000i 0
同样,但使用dcomplex常量
-> E = [B; 2.0 + 3.0 * i,i,0.0]
E =
1.0000 + 0.0000i 2.0000 + 0.0000i 3.2000 + 0.0000i
5.0000 + 0.0000i 8.0000 + 0.0000i 5.1000 + 0.0000i
2.0000 + 3.0000i 0.0000 + 1.0000i 0
最后,在FreeMat中,您可以使用字符串作为内容构造矩阵,但是必须确保如果矩阵具有多行,则所有字符串的长度都相同。
STRUCT结构数组构造器
根据一组字段,值对创建结构数组。语法是
y = struct(n_1,v_1,n_2,v_2,...)
where n_i是结构数组中字段的名称,并且v_i是值。这些值v_i必须全部为标量,或者为所有相同维度的单元格数组。在后一种情况下,输出结构数组的尺寸将由该公共尺寸决定。v_i将复制标量条目以填写其尺寸。如果输入未正确匹配(即不是字段名称和值对),或者任何两个非标量值单元格的大小不同,则会引发错误。
该struct功能的另一个用途是将类转换为结构。这使您可以直接访问类的成员,但可以从对象中删除类信息。
例
此示例创建带有三个字段,3-元件结构阵列foo bar和key,其中的内容foo和bar明确地提供为相同尺寸的单元阵列,和内容bar从一个标量被复制。
匿名匿名函数
匿名函数是简单的,无名的函数,可以在任何地方(在脚本,函数或提示符下)定义。它们旨在取代inline功能。匿名函数的语法很简单:
y = @(arg1,arg2,...,argn)表达式
其中arg1,arg2,...,argn是定义函数自变量的有效标识符的列表,并且expression是要在函数中计算的表达式。返回的值y是匿名函数的函数句柄,该函数然后可用于评估表达式。请注意,y它将在定义时从当前作用域或工作空间中捕获参数列表中未指示的变量的值。因此,例如,考虑简单的匿名函数定义
y = @(x)a *(x + b)
为了使此定义生效a,b需要在当前工作空间中定义变量和。它们具有的任何值都会在函数句柄中捕获y。要改变的值a,并b在匿名函数,则必须重新创建使用其他电话手柄。有关更多信息,请参见示例部分。为了使用匿名函数,您可以像使用任何其他函数句柄一样使用它。例如,
p = y(3)
p = y()
p = feval(y,3)
都是使用y匿名函数执行计算的示例。
在这种情况下,in_2是通过引用而不是通过值传递的。另外,FreeMat的工作方式类似于C调用者不必提供完整的参数列表。另外,当使用keywords(请参阅help keywords)时,可能未指定参数的任意子集。为了帮助解密所传递的确切参数,FreeMat还在函数上下文中定义了两个变量:nargin和nargout,分别提供了调用者的输入和输出参数的数量。有关nargin和nargout的更多详细信息,请参见帮助。在某些情况下,必须具有接受可变数量的参数或返回可变数量的结果的函数。在这些情况下,参数列表的最后一个参数是特殊参数varargin。函数内部varargin是一个单元格数组,其中包含所有尚未传递给函数的参数。同样,该函数可以创建一个以varargout可变长度输出列表命名的单元格数组。请参阅帮助varargin和varargout更多详细信息。
函数名称fname可以是任何合法的FreeMat标识符。函数以.m扩展名存储在文件中。请注意,文件名(而不是fname声明中使用的函数名)是函数在FreeMat中的显示方式。因此,例如,如果文件名为foo.m,但声明使用bar函数的名称,则在FreeMat中,它仍将显示为function foo。请注意,这仅适用于.m文件中出现的第一个功能。在第一个功能之后出现的其他功能称为helper functions或local功能。这些是只能由同一函数中的其他函数调用的函数.m文件。此外,这些辅助函数的名称由它们的声明而不是.m文件名决定。示例中包含使用助手功能的示例。
与之相反,功能的另一个重要特征scripts是它们具有自己的scope。这意味着在函数内部定义或修改的变量不会影响调用方的范围。这意味着函数可以自由定义和使用变量,而无需无意间使用保留在其他位置的变量名。事实的另一面是,不使用keyboard函数比脚本更难调试,因为一旦函数退出,函数中使用的中间计算将不可用。
第一个示例失败,因为我们无法通过3引用传递数字之类的文字。但是,第二个调用成功,并且请注意,arg1现在已更改。注意:通过引用传递时请小心-MATLAB中不提供此功能,您必须清楚正在使用它。
由于变量自变量和返回函数以及关键字都在其他地方介绍,因此我们提供了最后一个示例,该示例演示了在同一文件中出现多个函数声明的辅助函数或局部函数的用法。
人气软件
-
MathType(数学公式编辑器) 9.9 MB
/简体中文 -
MathType 7.1注册工具 38.4 MB
/简体中文 -
经纬度距离角度计算器 12.7 MB
/简体中文 -
Mathtype 金山公式编辑器 41.00 MB
/简体中文 -
小学数学出题软件 0.02 MB
/简体中文 -
动态几何软件 GeoGebra 6.0.472 中文版 48.00 MB
/简体中文 -
ZX数学函数作图器 1.16 MB
/简体中文 -
MEGA(分子进化遗传分析软件) 30.8 MB
/英文 -
小学数学试卷生成器 17.6 MB
/简体中文 -
分解质因数 2.04 注册版 2.00 MB
/简体中文