文档库 最新最全的文档下载
当前位置:文档库 › matlab编程技巧

matlab编程技巧

matlab编程技巧
matlab编程技巧

1、. Ctrl+C 中断正在执行的操作

如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断。MATLAB这时可能正疲于应付,响应会有些滞后。

2. figure命令新建一个绘图窗口

figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象。所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)。

figure(N),将编号为N的窗口置为当前figure,出现在所有窗口的最前面,如果该窗口不存在,则新建一个编号为N的空白figure。

3. 注释掉一段程序:%{、%}。

经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 %和{ 的组合。输入%{后,后面的代码都会变绿,在注释结束的地方再加上 %} 。

也可以选中要注释内容,在右键菜单中选择Comment (Uncomment去掉注释标记),或使用快捷键Ctrl+R。

将光标放在需要注释的行中,按Ctrl+R,将该行变为注释。取消注释也是一样的,快捷键为Ctrl+T。

4. doc 命令名,打开命令的帮助文档

与help命令不同,帮助文档MATLAB Help中对命令的描述更详细,往往还有一些例子,更便于理解。

5. clc 清屏

清除命令窗口中的所有输入和输出信息,不影响命令的历史记录。

6. clear 和clear all

clear 变量名:可以清除workspace中的无用的变量,尤其是一些特别大的矩阵,不用时及时清理,可以减少内存占用。

clear all 清除所有的变量,使workspace一无所有,当重新开始一次算法验证时,最好执行一次,让workspace中的变量一目了然。

7. close all

如果开了多个绘图窗口,用这个命令将它们一起关掉。

8. 上下光标键↑↓

在命令窗口中,上下光标键可以将历史记录中的命令复制到输入位置,便于快速重新执行。如果输入命令的前几个字母如 [row, col] =,再使用光标键,则只会选择以这些字母开始的命令。

9. Tab补全

对名称记得不太清楚的命令,可以输入开头的几个字母,然后按Tab键,当只有一个以这些字母开头的命令时,将自动补全命令名,否则显示一个命令名列表,方便从中选择。当然,只在命令窗口中有效。

10. cell模式

在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了。cell模式相当于将其中的代码拷贝到命令窗口中运行。两个%后接一个空格(%% )开始一个cell。将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码。

执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中。

cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的。

11. 获取文件列表,批处理

MATLAB内置了一些文件操作命令,例如cd(切换工作目录),dir(同ls,显示目录内文件列表)等。dir命令可以返回目录中的文件和文件夹列表,存在一个结构体数组中。如果需要对一些数据文件进行批处理,而文件名又没有一定的规律,你可能需要借助于这个命令。

Matlab注释技巧

1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚。不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字 /下划线等组成。原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误。例如,写个m文件,命名为spy,运行时就弹出一个怪怪的figure,呵呵,我当初还以为是什么bug。

2. 调试程序时,经常要屏蔽掉一整段程序进行,也就是将其标示注释符%。有两个办法:一种是选定后 ctrl+r和ctrl+t 一种是在段首加 if 0 ,段尾加 end,中间都不执行,也就相当于注释掉了

3. 写m文件时,选中某段程序内容,ctrl+i 让matlab帮你自动对齐程序。这样程序看起来很有层次,容易发现程序中的错误。

4. ctrl+F2作标签,ctrl+g 跳至某一行,这些快捷键都很实用。

5 matlab7中有块注释符号%{ 和 %}

6 多行加标注时,也可以选中需要添加标注程序,然后在Edit中/或者右键选择Comment。或者Uncomment除掉标注

MATLAB内存管理

用 Matlab 进行大规模科学计算或仿真时,内存是一个需要时常注意的问题。在matlab里运行

>>system_dependent memstats

就可以看到内存的使用状况。当你写的 Matlab 程序跳出“Out of Memory”时,以下几点措施是需要优先考虑的解决方法:

1. 升级内存

2. 升级64位系统

3. 增加虚拟内存

4. 采用3GB开关启动系统

由于32位 Windows 操作系统的限制,每个进程只能使用最多 2GB 的虚拟内存地址空间,因此 Matlab 的可分配内存也受到相应的限制。Matlab 7.0.1 引进了新的内存管理机制,可以利用 Windows 的 3GB 开关,使用 3GB 开关启动的 Windows 每个进程可以在多分配 1 GB 的虚拟地址空间。具体做法是:修改C盘根目录 boot.ini 启动选项加上 /3G,例如:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3G 5. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动(在快捷方式属性里面的 "..../matlab.exe")改为("...../matlab.exe" - nojvm)

6. 关闭Matlab Server

7. Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。

除此以外,更关键的是需要弄清楚以下几个问题:

问题一:Matlab是如何存储矩阵的?

Matlab中矩阵是以Block,也就是块的形式存储的。也就是说,当Matlab在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存没有被完全使用,它还是会报告“Out of Memory”。

问题二:如何高效使用Memory?

Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,”Out of Memory”就会出现。在使用的过程中,由于存储单元的不断的被分配和清除,反复分配和释放数组会使内存被分割成不连续的区域,可用的连续内存段减少,很容易造成“Out of Memory”。因此当Matlab 刚刚启动时其连续内存最多,此时往往可以新建非常大的数组,这一点可以用命令 feature(’memstats’)(在 7.0 版本以上)看出。如果现实的最大连续内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。此时可以考虑用 pack 命令,pack 命令的作用就是将所有内存中的数组写入硬盘,然后重新建立这些数组,以减少内存碎片。此外,在命令行或者程序中都可以使用 clear 命令,随时减少不必要的内存。

因此,治本的方法如下:

1. 在命令行输入 pack 整理内存空间

当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。

2. 使用稀疏矩阵或将矩阵转化成稀疏形式 sparse

如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。例如:

000×1000的矩阵X,它2/3的元素为0,使用两种存储方法的比较:

Name

Size

Bytes

Class

X

1000x1000

8000000

double array

Y

1000x1000

4004000

double array (sparse)

3. 尽量避免产生大的瞬时变量,把没必要的变量clear掉或当它们不用的时候应该及时clear。

4. 减少变量,尽量的重复使用变量(跟不用的clear掉一个意思)。

5. 把有用的变量先save,后clear 掉,需要时再读出来。

下面介绍一下关于clear、save、load的特殊用法,这对在for或while等多重循环里出现out of memory非常有效。for k = 1:N % N为循环次数

% ---------------------

var0 = k; % 获得变量var0

%----------------------

string = [sprintf('var_%d', k) ' = var0;' ];

eval(string); % 等价于 var_k = var0;

save(sprintf('var_%d.mat', k), sprintf('var_%d')); % 等价于 save var_k.mat var_k

clear(sprintf('var_%d')); % 等价于 clear var_k

end

如果要读取刚才存取的变量var_k, (k = 1,2, ..., N). 那么,可以使用如下用法:

for k = 1:N

load(sprintf('var_%d.mat', k)); % 等价于 load var_k.mat k = 1,2, ..., N

end

另外,还有一些非常有用的用法。如果用清除刚才读取的变量 var_k, k = 1, 2, ..., N

clear '-regexp' '^var_' % 清除所有以“ var_ ”开头的变量

还有很多关于save、clear、load等用法,具体help一下。

6. 使用单精度 single 短整数替代双精度 double

Matlab 默认的数字类型是双精度浮点数 (double),每个双浮点数占用 8 个字节。对于一些整数操作来说,使用双浮点数显得很浪费。在 Matlab 中可以在预先分配数组时指定使用的数字类型如以下命令:zero(10, 10, ‘uint8′) 。对于浮点数,在很多精度要求不高的情况下,可以使用4个字节的单浮点数(single),可以减少一半的内存。关于单、双浮点数的精度对照如下,以便根据需要选择使用:

single: 精度 (1.1921e-007) 最大数 (3.4028e+038)

double: 精度 (2.2204e-016) 最大数 (1.7977e+308)

7. 为矩阵变量预制内存而不是动态分配

在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block 的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。比较下面两个程序:

for k = 2:1000

x(k) = x(k-1) + 5;

end

x = zeros(1, 1000);

for k = 2:1000

x(k) = x(k-1) + 5;

end

显然,第二个更好!!!最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!!!

8. 尽量早的为大的矩阵变量预制内存

Matlab使用heap method管理内存。当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。比如:

a = rand(1e6,1);

b = rand(1e6,1);

使用大约15.4 MB RAM

c = rand(2.1e6,1);

使用近似16.4 MB RAM

a = rand(1e6,1);

b = rand(1e6,1);

clear

c = rand(2.1e6,1);

使用32.4 MB RAM

Matlab不能使用a、b被clear的空间,因为它们均小于2.1 MB,而同时它们也很可能是不连续的。最好的方法:c = rand(2.1e6,1);

clear

a = rand(1e6,1);

b = rand(1e6,1);

使用16.4 MB RAM

9. 如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。

Matlab中的保存数据语句比较

在Matlab中,我们经常遇到需要将一些中间数据或者最终结果保存为文本形式(*.txt);其中提供了多种保存数据的语句,应该如何选择喃?

在此,小弟在使用了fprintf、save、dlmwrite的基础上,对这三种方法进行了一个比较:

fprintf(fid, format, A, ...),将数据A以format表示的格式写入fid(文件)中,fid由fopen函数返回得到。

实例: x = 0:.1:1;

A = [x; exp(x)];

fid = fopen('exp.txt', 'wt');

fprintf(fid, '%6.2f %12.8f\n', A);

fclose(fid)

save filename.txt A -format,将数据A以format表示的格式写入filename文本文件中。

实例: x = 0:.1:1;

A = [x; exp(x)];

save data.txt A -ASCII

dlmwrite('filename.txt', A, 'D', R, C),从矩阵A的第R行、第C列开始,使用分隔符D分割数据(“\t”表示tab分割,“,”为默认分割符),存储到filename文本文件中。

实例: x = 0:.1:1;

A = [x; exp(x)];

dlmwrite(‘data.txt', A, 'delimiter', '\t', 'precision', 6);

使用时,save保存的数据是以科学计数法的方式存储的;fprintf和dlmwrite则是可以选择存储数据的方式,fprintf 的格式设置跟C语言中的用法一致,dlmwrite可以设置有效位位数,比如上面实例中6表示有效位位数是6位,dlmwrite中对数据中的小数就采用浮点数存储,整数就采用整型存储形式。

在使用时,可根据自己实际情况的需要选择适合的一种。个人觉得matlab本身的这种以科学计数法来表示数据,有时不方便于查看。还有一点就是fprintf是按照矩阵列存储。

MATLAB Out of memory问题总结(转载)

首先,我要声明,matlab自带的Help才是最权威的Matlab学习资料,如果有时间好好学习一下或是可以高效的使用的话,一定受益匪浅!比如说像 Out of Memory这个问题,最开始我都是用Help memory,几乎得不到任何信息;然后就是去网上搜索此类问题的解决方法,一般有这几种:

除了升级内存和升级64位系统外,下面几个方法也是解决之道。

# 增加虚拟内存

# 采用PACK (在命令行输入 pack 整理内存空间)

# 采用3GB 开关启动系统(修改 c盘根目录 boot.ini 启动选项加上 /3G 例如:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3G

# 优化程序,减少变量(使用稀疏矩阵 sparse ) save 保存变量 load 变量,需要时再读出来

# 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动(在快捷方式属性里面的 "..../matlab.exe")改为("...../matlab.exe" - nojvm)

#关闭Matlab Server

# 使用单精度 single 短整数替代双精度。

现在看来这些解决方法对于我的问题来说根本就是“治标不治本”,不能解决实际问题,后来在一个师兄的提醒下Help out of memory,终于找到了解决此类问题的方法。在此感谢这位师兄啊!

重申――Matlab的Help才是Matlab的最权威的指导材料!!!

其实我的所谓原创就是对Help out of memory的一些归纳总结而已,有兴趣的话大家可以自己去看!!!

问题一:Matlab是如何存储矩阵的

Matlab中矩阵是以Block,也就是块的形式存储的。也就是说,当Matlab在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存没有被完全使用,他还是会报告“Out of Memory”。

问题二:如何高效使用Memory

由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成“Out of Memory”。

1.为矩阵变量预制内存而不是动态分配

在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block 的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block 来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。比较下面两个程序:

for k = 2:1000

x(k) = x(k-1) + 5;

end

x = zeros(1, 1000);

for k = 2:1000

x(k) = x(k-1) + 5;

end

显然,第二个更好!!!最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!!!

1.尽量早的分配大的

Matlab使用heap method管理内存。当在Matlab heap中没有足够的内存使用时,它会向请求内存。但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。

比如:

a = rand(1e6,1);

b = rand(1e6,1);

使用大约15.4 MB RAM

c = rand(2.1e6,1);使用近似16.4 MB RAM:

a = rand(1e6,1);

b = rand(1e6,1);

clear

c = rand(2.1e6,1);

使用32.4 MB RAM。因为Matlab不能使用a、b被clear的空间,因为它们均小于2.1 MB,而同时它们也很可能是不连续的。

最好的方法:

c = rand(2.1e6,1);

clear

a = rand(1e6,1);

b = rand(1e6,1);

使用16.4 MB RAM

2.尽量避免产生大的瞬时变量,当它们不用的时候应该及时clear。

3.尽量的重复使用变量(跟不用的clear掉一个意思)

4.将矩阵转化成稀疏形式

如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。

例如:

1000×1000的矩阵X,它2/3的为0,使用两种存储方法的比较:

Name

Size

Bytes

Class

X

1000x1000

8000000

double array

Y

1000x1000

4004000

double array (sparse)

5.使用pack当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。

6.如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。

7.增大内存

问题三: Increase the size of the swap file.

wap space的与使用的操作系统有关,具体的如下:

1.UNIX

Information about swap space can be procured by typing pstat -s at the UNIX command prompt. For detailed information on changing swap space, ask your system administrator.

2.Linux

Swap space can be changed by using the mkswap and swapon commands. For more information on the above commands, type man followed by the command name at the Linux prompt.

3.Windows NT

Follow the steps shown here: Right-click the My Computer icon, and select Properties. Select the Performance tab and click the Change button to change the amount of virtual memory.

4.Windows 2000

右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。

5.Windows XP

右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。

问题四:尽量少时用系统资源(对于Windows)

Windows中字体、窗口等都是要占用系统资源的,所以在Matlab时尽量不要打开不用的窗口。

问题五:Reloading Variables on UNIX Systems

由于我不使用UNIX系统,这里不介绍,直接从Help中粘过来

On UNIX systems, MATLAB does not return memory to the operating system even after variables have been cleared. This is due to the manner in which UNIX manages memory. UNIX does not accept memory back from a program until the program has terminated. So, the amount of memory used in a MATLAB session is not returned to the operating system until you exit MATLAB.

To free up the memory used in your MATLAB session, save your workspace variables, exit MATLAB, and then load your variables back in.

MATLAB简介

MATLAB简介 MATLAB的名称源自Matrix Laboratory,它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对问题认识的同时,不断完善MATLAB产品以提高产品自身的竞争能力。 目前MATLAB产品族可以用来进行: ?数值分析 ?数值和符号计算 ?工程与科学绘图 ?控制系统的设计与仿真 ?数字图像处理 ?数字信号处理 ?通讯系统设计与仿真 ?财务与金融工程 MATLAB产品家族的构成见上图,下面对各个组成部分进行介绍: MATLAB是MATLAB产品家族的基础,它提供了基本的数学算法,例如矩阵运算、数值分析算法,MATLAB集成了2D和3D图形功能,以完成相应数值可视化的工作,并且提供了一种交互式的高级编程语言——M语言,利用M语言可以通过编写脚本或者函数文件实现用户自己的算法。

MATLAB Compiler是一种编译工具,它能够将那些利用MATLAB提供的编程语言——M语言编写的函数文件编译生成为函数库、可执行文件、COM 组件等等,这样就可以扩展MATLAB功能,使MATLAB能够同其他高级编程语言例如C/C++语言进行混合应用,取长补短,以提高程序的运行效率,丰富程序开发的手段。 利用M语言还开发了相应的MATLAB专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。目前MATLAB产品的工具箱有四十多个,分别涵盖了数据采集、科学计算、控制系统设计与分析、数字信号处理、数字图像处理、金融财务分析以及生物遗传工程等专业领域。 Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模、分析和仿真,它的建模围广泛,可以针对任何能够用数学来描述的系统进行建模,例如航空航天动力学系统、卫星控制制导系统、通讯系统、船舶及汽车动力学系统等等,其中包括连续、离散,条件执行,事件驱动,单速率、多速率和混杂系统等等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,而且Simulink还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到不书写一行代码完成整个动态系统的建模工作。 Stateflow是一个交互式的设计工具,它基于有限状态机的理论,可以用来对复杂的事件驱动系统进行建模和仿真。Stateflow与Simulink和MATL AB紧密集成,可以将Stateflow创建的复杂控制逻辑有效地结合到Simulink的模型中。 在MATLAB产品族中,自动化的代码生成工具主要有Real-Time Wor kshop(RTW)和Stateflow Coder,这两种代码生成工具可以直接将Simulink 的模型框图和Stateflow的状态图转换成高效优化的程序代码。利用RTW生成的

《应用计算方法教程》matlab作业二

6-1 试验目的计算特征值,实现算法 试验容:随机产生一个10阶整数矩阵,各数均在-5和5之间。 (1) 用MATLAB 函数“eig ”求矩阵全部特征值。 (2) 用幂法求A 的主特征值及对应的特征向量。 (3) 用基本QR 算法求全部特征值(可用MATLAB 函数“qr ”实现矩阵的QR 分解)。 原理 幂法:设矩阵A 的特征值为12n ||>||||λλλ≥???≥并设A 有完全的特征向量系12,,,n χχχ???(它们线性无关),则对任意一个非零向量0n V R ∈所构造的向量序列1k k V AV -=有11()lim ()k j k k j V V λ→∞ -=, 其中()k j V 表示向量的第j 个分量。 为避免逐次迭代向量k V 不为零的分量变得很大(1||1λ>时)或很小(1||1λ<时),将每一步的k V 按其模最大的元素进行归一化。具体过程如下: 选择初始向量0V ,令1max(),,,1k k k k k k k V m V U V AU k m +===≥,当k 充分大时1111,max()max() k k U V χλχ+≈ ≈。 QR 法求全部特征值: 111 11222 111 ,1,2,3,k k k k k A A Q R R Q A Q R k R Q A Q R +++==????==??=???? ??????==?? 由于此题的矩阵是10阶的,上述算法计算时间过长,考虑采用改进算法——移位加速。迭 代格式如下: 1 k k k k k k k k A q I Q R A R Q q I +-=?? =+? 计算k A 右下角的二阶矩阵() () 1,1 1,() (),1 ,k k n n n n k k n n n n a a a a ----?? ? ??? 的特征值()()1,k k n n λλ-,当()()1,k k n n λλ-为实数时,选k q 为()()1,k k n n λλ-中最接近(),k n n a 的。 程序

Matlab在物理上的应用举例

1. 单列波 %%单列波 t=0:0.001:10; A=input('振幅A='); w=input('频率w='); a=input('a='); y=A.*sin(w.*t+a); plot(t,y); pause(1),sound(y); ylabel('y'),xlabel('t') 2. %%光的单缝衍射现象 Lambda=500e-9; % a=input('a='); % 可取0.2e-3,1e-3,2e-3三种情况z=1 % ymax=3*Lambda*z/a; % Ny=51; % ys=linspace(-ymax,ymax,Ny); % NPoints=51; % yPoint=linspace(-a/2,a/2,NPoints); % for j=1:Ny % L=sqrt((ys(j)-yPoint).^2+z^2); % Phi=2*pi.*(L-z)./Lambda; % SumCos=sum(cos(Phi)); % SumSin=sum(sin(Phi)); % B(j)=(SumCos^2+SumSin^2)/NPoints^2; % end clf,plot(ys,B,'*',ys,B);grid; % 3. %%用毕奥-沙伐尔定律计算电流环产生的磁场 mu0=4*pi*1e-7; I0=5.0;Rh=1; C0=mu0/(4*pi)*I0; NGx=21;NGy=21; x=linspace(-Rh,Rh,NGx); y=linspace(-3,3,20);y=x; Nh=20; theta0=linspace(0,2*pi,Nh+1); theta1=theta0(1:Nh); y1=Rh*cos(theta1); z1=Rh*sin(theta1); theta2=theta0(2:Nh+1); y2=Rh*cos(theta2); z2=Rh*sin(theta2);

Matlab简介

MATLAB简介 MATLAB是一个集数值计算、符号分析、图象显示、文字处理于一体的大型集成化软件.它最初由美国的Cleve Moler博士所研制.其目的是为线性代数等课程中的矩阵运算提供一种方便可行的实验手段.经过十几年的市场竞争和发展,MATLAB已发展成为在自动控制、生物医学工程、信号分析处理、语言处理、图像信号处理、雷达工程、统计分析、计算机技术、金融界和数学界等各行各业中都有极其广泛应用的数学软件. 归纳起来,MATLAB具有以下几个特点:易学、适用范围广、功能强、开放性强、网络资源丰富. 由于MATLAB的强大功能,它能使使用者从繁重的计算工作中解脱出来,把精力集中于研究、设计以及基本理论的理解上,所以,MATLAB已成为在校大学生、硕士生、博士生所热衷的基本数学软件.在此,我们把MATLAB作为学习数学的工具介绍给读者,希望能有利于读者今后的学习. 一MATLAB的运行 启动MATLAB点击MATLAB图标,进入到MATLAB命令窗(MATLAB Command Window).在命令窗内,可以输入命令、编程、进行计算. 学会使用help命令在命令窗内输入help命令,再敲回车键.在屏幕上出现了在线帮助总览.(注意:MATLAB命令被输入后,必需敲回车键才能执行.为行文方便,以后不再每次

提醒“敲回车键”.)学会使用help命令,是学习MATLAB的有效方法.例如:要想知道MATLAB中的基本数学函数有哪些,可以在总览的第五行查到:MATLAB中的“基本数学函数”用elfun表示,于是,可进一步键入:“help elfun”,屏幕上将出现“基本数学函数”表.(注意:help elfun之间有空格,以后不再每次提醒.)如果想了解sin函数怎样使用,可进一步键入help sin.在工具栏中点击help按扭,或点击?号按扭,与上面获取帮助信息的方法是等效的. 学会使用demo命令在命令窗内输入demo命令,再敲回车,键屏幕上将出现演示窗口.(MATLAB Demo Window)一共有三个窗口,左边的窗口显示欲演示内容的大标题,选定其中一项,右下方的小窗口显示欲演示的具体内容,选中其中一栏,再点击run按扭,屏幕上将演示选定的演示程序.右上方的窗口显示关于大标题的一些说明.在命令窗内输入type (文件名),将显示演示程序的M文件,仔细研究演示程序的M文件,是学习MATLAB的又一有效方法. 进入演示窗还有另一方法:在工具栏中点击Help栏,下拉式菜单中点击examples and demos项,即可进入演示窗口. 退出在工具栏中点击File按钮,在下拉式菜单中单击Exit MATLAB项即可. 二变量、语句、矩阵与函数 1.变量

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

应用MATLAB求解经典物理若干典型问题_本科生毕业论文

应用MATLAB求解经典物理若干典型问题 大学本科生毕业论文 应用MATLAB求解经典物理若干典型问题The application of MATLAB in solving some classical physics questions

摘要 MATLAB是 MathWorks公司推出的一套科学计算软件,MATLAB的意思是矩阵实验室。MATLAB具有起点低、功能强大、易学易用以及兼有数值运算和符号运算功能的优点。利用MATLAB,绘图十分方便,它既可以绘制各种图形,包括二维图形和三维图形,还可以对图形进行修饰和控制。本文通过在MATLAB环境下编写通过科学计算解决经典物理问题,如力学、热学、电磁学中的一些常见问题。本文的思路主要是,先介绍经典物理习题,然后对习题进行分析,解答,再通过MATLAB 软件进行编程,模拟实验结果。通过多次验证。得到所需答案。再通过图形绘制,形象的描绘出图形,与预期结果进行比较、验证。作出总结。本文展示的MATLAB 软件在解决物理问题中的应用。 关键词:力学;热学;电磁学;MATLAB程序

ABSTRACT .MathWorks MATLAB is introduced in a scientific computing software, MATLAB means Matrix Laboratory . MATLAB has a low starting point, powerful, easy to use, and both numerical calculation and symbolic operation advantages. Using MATLAB, the drawing is very convenient, both to draw various graphics, including the two-dimensional graphics and three-dimensional graphics, graphics can also be modified and controlled. This article written by the MATLAB environment to solve by classical physics scientific computing problems, such as mechanical, thermal, electromagnetics some common problems. The main idea of this paper is to introduce classical physics problems, and then exercises to analyze, answer, and then programmed by MATLAB software to simulate the experimental results. Through multiple authentication. Get the answers you need. And through graphics rendering, the image depicts the graphics, compared with the expected results to verify. Conclusion. This article presents the MATLAB software to solve the problem of physics. Key Words:Mechanics;heat;electromagnetism,;MATLAB

MATLAB模块介绍$

MATLAB 模块介绍 -------- 数学 & 金融 u Curve Fitting Toolbox Curve Fitting Toolbox 扩展MATLAB 环境,集成数据管理,拟合,显示,检验和输入分析过程等功能。所有能通过GUI 使用的功能都可以通过命令行来进行。

u Database Toolbox ——与关系数据库交换数据 Database Toolbox提供了同任何支持ODBC/JDBC标准的数据库进行数据交换的能力。利用在工具箱中集成的Visual Query Builder工具,无需学习任何SQL语句就可以实现在数据库中查寻数据的功能。这样MATLAB就能够对存储在数据库中的数据进行各种各样的复杂分析。在MATLAB环境中,也可以使用SQL命令来进行如下操作: 对数据库数据进行读、写操作;应用简单或复杂的条件查询数据库中的内容。 特点: ?与支持ODBC/JDBC 数据库建立连接,包括Oracle 、Sybase SQL Server ,Sybase SQL Anywhere ,Microsoft SQL Sever ,Microsoft Access ,Informix Ingres 等。?支持SQL 语句,可以在MATLAB 环境下直接执行SQL 查询命令 ?动态数据调入:可以根据需要使用SQL 在MATLAB 中获取数据,本工具箱对某一种类型的数据库进行大量或小量的查询 ?数据类型保持:在MATLAB 中对数据的调入或调出操作都能保持原有的数据类型 ?多个对话能力,采用本工具箱可在MATLAB 中从一个数据库中调入数据,对那些数据进行分析,然后输出到另一个数据库中 ?处理大量数据的能力:采用本工具箱你可以一次或分几次处理大量的数据,这样能让你根据任务高效地进行数据处理 ?连续状态的数据库联接:一旦和某个数据库的联接建立起来后,数据库一直是打开的,除非你在MATLAB 中执行关闭语句。这提高了数据库的读取速度,减少了不必要的命令来调入、输出数据。 ?无需了解SQL 也能够对数据库数据进行查询。 功能: Database Toolbox 可以与流行的数据库交互数据,其中包括Oracle ,Sybase ,Microsoft SQL Server 及Informix 等。工具箱还允许在单个MATLAB 进程中对多个数据库进行操作,同时支持对大量数据处理。工具箱中包含的Visual Query Builder ,即使不知道SQL ,也能可视化地与数据库打交道。 u Financial Derivatives Toolbox Financial Derivatives Toolbox 用于分析金融衍生工具和投资。 特点 ?提供各种利息率模型 ?提供七种金融工具一系列计算的函数

MATLAB在物理中的应用(单摆).doc

<>课程论文 MATLAB在单摆实验中的应用 姓名蔡小强 学号:2010110102 专业:物理学 班级:10物理学 学院:物电学院 完成日期:2011/12/11

MATLAB在单摆实验中的应用 【摘要】借助MATLAB 计算软件, 研究无阻尼状态下单摆的大摆角运动, 给出了任意摆角下单摆运动周期的精确解。同时利用MATLAB 函数库中的ode45 函数, 求解出大摆角下的单摆的运动方程。并利用其仿真动画形象的展现出单摆的运动规律, 为单摆实验中大摆角问题的讲解提供了较好的教学辅助手段。 【关键字】单摆模型;周期;MATLAB 一、问题的提出 在工科物理教学中,物理实验极其重要,它担负着训练学生基本实验技能、验证学生所学知识、提高学生综合实力的重要职责。通过一系列的物理实验,学生可在一定程度上了解并掌握前人对一些典型物理量的经典测量方法和实验技术,并为以后的实验工作提供有价值的借鉴,进而培养学生的动手实践能力和综合创新能力。然而,物理实验的优劣很大程度受限于物理实验条件的制约。当前,受限于以下条件(很多情况下物理实验环境都是难以有效构造的),物理实验的效果并不理想:1)一些实验设备比较复杂并且昂贵,难以普及应用;2)有效实验环要求非常苛刻,是现实环境中难以模拟,甚至根本无法模拟;3)除此以外,有些实验的实验环境即使可以有效构造,它的实验结果却仍然是难以直接、完整观察获取的,如力场、电场、磁场中的分布问题等。鉴于以上原因,物理仿真实验已引起了大家的关注,出现了一些软件。但很多是基于Flash、Photoshop 、3D Studio MAX之类的图形图像软件制作。这些软件可以制作逼真的实验环境和生动的实验过程动画,还可以制作出实际实验所无法达到的效果。但这类软件本身是制作卡通动画的,对物理实验规律和过程很少涉及,很难做到真正的交互使用,及精确的计算分析同时开发也很困难。因此,基于这些软件的仿真在工科物理实验教学中应用很少。本文利用MATLAB 计算软件及其仿真功能对单摆实验过程进行模拟、仿真及后期分析,对物理实验教学改革提供一种新思路。 具体地,本文将描述一种新颖的单摆实验方法, 其主要的意义在于给学生以综合性实验技能训练。一个综合性实验, 它必须涉及多方面的知识和实验技能。本文描述的单摆实验方法即具备这样的特征。它的实验原理虽然简单, 但所涉及到的知识点极为丰富: 力学振动, 计算机编程等。学生通过这样的实验不仅可以得到综合性的实验技能训练, 而且可以在如何将现代技术改造传统实验、理论联系实际等方面得到很多启示。另外,本文引入计算机技术分析法, 对单摆实验进行了改造, 既实现了基础物理实验的现代化, 又为MATLAB课程实验提供了很好的应用落足点, 可以使学生得到多方面的实验技能训练。 二、方法概述 2.1问题描述 单摆问题是高中物理及大学普通物理实验教学中的一个基础问题。单摆在摆角比较小时,其运动规律近似为准简谐振动。但是当摆角比较大时, 即单摆在大摆角情况下运动时,这种近似已不再成立,其运动方程满足非线性微分方程。因此,对摆角大小的限制成为该实验中必须满足的条件。不同的实验条件下,最大摆角的取值不同,其中包括, ,,,甚至等。这就为在实验过程中对摆角的统一取值造成困难,给实验带来较大的误差。同时,学生对单摆在大摆角情况下运动时其运动周期及运动规律的理解也存在困难。利用先进的计算机仿真

matlab在计算物理中的应用

Matlab画图 单摆的动画化 clear clf plot([-0.2;0.2],[0;0],'y-', 'linewidth',10); hold on g=0.98; l=1; a0=pi/8 axis([-0.75,0.75,-1.25,0]); t=0; dt=0.1; m=moviein(1000); for i=1:1000 t=t+dt; a=a0*cos(sqrt(g/l)*t); x=sin(a); y=(-1)*cos(a); h(1)=plot(x,y,'r.','markersize',30); h(2)=plot([0;x],[0;y],'b-'); m(i)=getframe; delete(h);

end movie(m,2) 多边形 clear clf for n=3:11; t=linspace(0,2*pi,n+1); x=sin(t+pi/n+pi); y=cos(t+pi/n+pi); subplot(3,3,n-2); fill(x,y,'g') title(['正',num2str(n),'边形']); axis square; hold on; end 利萨如图形 >> t=0:pi/1000:2*pi; a=[0 4/pi 2/pi pi 0 4/pi 2/pi pi]; y=sin(t);

subplot(2,4,i) if i<5 n=1; x=cos(n*t+a(i)); plot(x,y) title(['n=1,a=',num2str(a(i))]) else n=2; x=cos(n*t+a(i)); plot(x,y) title(['n=2,a=',num2str(a(i))]) end end 线性方程组求解 clear a=input('please input a') b=input('please input b') [m,n]=size(a) B=[a b'] R1=rank(a)

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

matlab上机实践二(计算物理班)

实验二MATLAB程序设计 实验要求: 为达到理想的实验效果,同学们务必做到: (1)实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用 到的命令,想好编程的思路,做到胸有成竹,提高上机效率。 (2)实验过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕 信息的含义、出现的原因并提出解决办法。 (3)实验后认真总结,要总结本次实验有哪些收获,还存在哪些问题,并写 出实验报告。实验报告应包括实验目的、实验内容、流程图(较大程序)、程序(命令)清单、运行结果以及实验的收获与体会等内容。 同学们在上机过程中会碰到各种各样的问题,分析问题和解决问题的过程就是积累经验的过程。只要同学们按照上面3点要求去做,在学完本课程后就一定会有很大的收获。 实验仪器:计算机 实验时间:2018.4 实验原理: 1.M文件 命令文件;函数文件 命令文件直接运行,函数文件必须调用(不能直接运行)。2.matlab程序控制结构 (1)顺序结构 (2)选择结构:if语句;switch语句;try语句 (3)循环结构:for语句;while语句;循环嵌套 3.函数文件:function语句 4.函数调用:输出参数=函数名(输入参数)or函数名(输入参数)实验目的: 1.掌握建立和执行M文件的方法 2.掌握matlab的程序控制结构及其应用

3. 掌握matlab 函数文件和程序调试 实验内容: 1.建立M 文件,文件名自己选取,编写程序,建立向量G=[1,2,3,4,5];H=[5,4,3,2,1];利用向量G 、H 以及运算符产生下列向量。(要求只写出M 文件程序) a= 1 8 27 64 125 b= 0 0 1 0 0 c= 0 0 0 1 1 d= 1 1 1 0 0 2. 求分段函数的值。 32,13x 70,6980,652363≠?? ???--+≠<≤+--≠<-+=x x x x x x x x x x x y 及其它且且 建立M 文件(函数文件),用if 语句实现。调用函数,求出x=-5;-8;1;0时的 y 值。 3.已知f ()12233 4...(1)n n n =?+?+?++?+;1111g()...2222222n n = ++++???; 求(8)/(4)(4)(8) f g y f g =?。要求:建立两个函数文件(M 文件),函数名取为fff ,ggg ,编写程序分别用于求f (n ),g(n)(其中用for 循环求f (n ),g(n));调用这两个函数,计算y 。 4. 已知123d()...233445(1)(2)n n n n =++++???+?+,111y()3521 n n =++++; 建立两个M 文件(函数文件,分别用来求d(n)和y(n),用for 循环求和,文件名自由选取,可取fff3,ggg3),再建立一个函数文件(文件名选取kkk ),完成下列功能:当d(n)大于y(n)时,z=d(n)+y(n),当d(n)小于或等于y(n)时,z=d(n)/y(n),最后调用kkk 函数求出当n=3和10时的z 值。

数学物理方法matlab建模

数学物理建模与计算机仿真考试试题 (2011——2012第二学期) 1、 计算机仿真计算积分: (n 为自然数) ;积分方向为正方向(10分)。 解:利用留数定理计算闭合路径积分, 设g=1+z^n ,f=z^(2*n)/(1+z^n) 求出所有n 个奇点并放在矩阵A 中,A=solve(g) 再求出每个奇点k ∈A 对应的留数,Res(k)=limit(f*(z-A(k)),z,A(k)) 故所求的积分结果为:INT=2πi ∑Res(k) 对应程序为: n=input('n='); syms z g=1+z^n; f=z^(2*n)/(1+z^n); A=solve(g); sum=0; for k=1:n Res=limit(f*(z-A(k)),z,A(k)); sum=sum+Res; end int=2*pi*i*sum INT=simplify(int) 2、 在同一幅图中绘制函数 和平面 的图像 (10分)。 解:参照教材第二页,用cplxgrid 指令绘图,去掉投影,程序如下: function cplxmap2(z,w,B) blue = 0.2; x = real(z); 22 1n n z z dz z =+? 0x =253()f z z =-()()1d 2i Res ,n k C k f z z f z z π==????∑?

y = imag(z); u = real(w); v = imag(w); if nargin > 2 k = find((abs(w) > B) | isnan(abs(w))); if length(k) > 0 u(k) = B*sign(u(k)); v(k) = zeros(size(k)); v = v/max(max(abs(v))); v(k) = NaN*ones(size(k)); end end M = max(max(u)); m = min(min(u)); axis([-1 1 -1 1 m M]); caxis([-1 1]); s = ones(size(z)); surf(x,y,u,v); colormap(hsv(64)) 再参照第8页绘出2/(5-3z)的图像及x=0的图像,程序如下: z=cplxgrid(30); cplxmap2(z, 2./((5-3.*z)+eps*(z==5/3))); colorbar('vert') title('2/(5-3z)') hold on [y,z]=meshgrid(-1:0.01:1,-1:0.01:1); a=0; x2=a*ones(size(y)); mesh(x2,y,z); hold off 输出图像为:

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

matlab上机实践三(计算物理班)

实验三MATLAB绘图 实验要求: 为达到理想的实验效果,同学们务必做到: (1)实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用 到的命令,想好编程的思路,做到胸有成竹,提高上机效率。 (2)实验过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕 信息的含义、出现的原因并提出解决办法。 (3)实验后认真总结,要总结本次实验有哪些收获,还存在哪些问题,并写 出实验报告。实验报告应包括实验目的、实验内容、流程图(较大程序)、程序(命令)清单、运行结果以及实验的收获与体会等内容。 同学们在上机过程中会碰到各种各样的问题,分析问题和解决问题的过程就是积累经验的过程。只要同学们按照上面3点要求去做,在学完本课程后就一定会有很大的收获。 实验仪器:计算机 实验时间:2018.5. 实验原理: 1.绘制单根二维曲线: plot(x,y) x,y长度相同的向量;plot(x)x为实向量和复数向量;2.绘制多跟二维曲线: plot(x,y),(1)x为向量,y是有一维与x长度同的矩阵,(2)x,y 为同维矩阵; plot(x),x为实数矩阵,x为复数矩阵; 含多个输入参数的plot函数:plot(x1,y1,x2,y2,…xn,yn) 3.设置图形样式:线型,颜色,标记符号 4. 图形标注:插入标题,坐标说明,图形说明等 5.三维图形绘制:三维曲线和三维曲面 plot3(x,y,z);mesh(x,y,z);surf(x,y,z) 实验目的:

1.掌握绘制二维图形的方法 2.掌握绘制三维图形的方法 3.熟悉图像处理和动画制作 实验内容: 1. 绘图:2228x y x =- 程序: ezplot('x^2+8*x-2*y^2',[-8,8,-8,8]) 结果: 2. 已知 22sin()01ln(02 x x e y x x ?>??=??≤?? 在55≤≤-x 范围绘制函数曲线,加上横坐标说明x ,纵坐标说明y 。 程序:

物理实验数据的MATLAB图示处理法

26  2008年第6期(总第64期) E-mail:cmee@263.net 收稿日期:2008-02-29 作者简介:李小平,理学学士,副教授,程序员。*2007年株洲职业技术学院院级立项课题:编号ZZYKY0708名称《应用MATLAB辅助理工专业课程教学的研究》。 物理实验数据的MATLAB图示处理法* 李小平 株洲职业技术学院 湖南株洲 412001 摘 要:MATLAB语言是做数学实验的计算机语言[1-2],利用MATLAB函数绘图来处理大量的物理实验数据(本文叫做“MATLAB图示处理法”)是最理想的方法,全文用几个典型的实例来说明了它的实用价值。关键词:大学物理 实验数据 MATLAB 作图 大学物理实验课中有许多实验数据,处理实验数据的方法一般有作图法、平均法、线性回归法、逐差法等多种方法[3],我们平时都是用手工方法根据实验数据描点画图,但对于大量的实验数据,用手工描点画图就不理想了,尤其是画实验数据的三维空间图像,更是难上加难。 MATLAB软件主要用于数值计算和图形处理,它集数值分析、矩阵计算、信号处理和图形显示于一体[4],是处理实验数据的最理想的软件之一。 本文介绍用MATLAB作图函数绘图来处理大量的物理实验数据的方法,在实验课中可通过MATLAB图示法来探讨实验公式。 一、图示二维空间函数实例 当实验数据只两个变量时,其对应的图形是二维图形,我们通常用plot函数绘制实验图。 例1 用伏安法测电阻,以电阻的端电压V作为自变量测得一组对应的流经电阻的电流I,数据如表1[3]。表1 电压V和电流I的实验数据 MATLAB命令如下: >>V=[0,2.00,4.00,6.00,8.00,10.00];I=[0,3.85,8.15,12.05,15.80,19.90]; >>plot(V,I);xlabel('电压V'); ylabel('电流 I'); 结果见图1: 图1 观察图1,可知图形是“一条直线”,故实验结果与理论公式 不矛盾,电阻R是个常数,是定值。 例2 梁的弯曲实验,在矩形梁的中点加一定负载F=450g,根据梁的有效长度L的变化,测出对应的下垂量l,数据如表2[3]。 表2 梁的长度L和下垂量l的实验数据 MATLAB命令如下: >>L=[30.00,33.00,36.00,39.00,42.00,45.00,48.00,51.00]; >>namta=[0.5062,0.6737,0.8749,1.1122,1.3887,1.7085,2.0738,2.4878]; >>plot(L,namta);xlabel('梁的长度L');ylabel('下垂量namta '); 结果见图2:

matlab软件功能简要介绍及版本描述

MATLAB功能简介 MATLAB是“Matrix&Laboratory”两个词的组合,意为“矩阵实验室”。MATLAB 的主要功能有数值分析、数值与符号计算、数字图像和信号处理、工程与科学绘图、控制系统和通讯系统的设计和仿真等。 MATLAB版本描述 MATLAB的版本从1984年发布的MATLAB1.0发展到如今的MATLAB8.5。我们小组所用的版本是MATLAB7.0,故在此主要介绍MATLAB7.0版本。 MATLAB7.0在2004年发布,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB推荐理由 MATLAB和Mathematica、Maple并称为三大数学软件,基于其数值分析、数值与符号计算、数字图像与信号处理等各方面的强大功能,MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。 MATLAB作为强大的数学软件有其独特的优势特点。MATLAB是高级的矩阵语言,MATLAB的语言是基于最流行的C++语言基础上的,而且更加简单,更符合对数学表达式的书写格式,这种语言可移植性好,课拓性极强,也因此,MATLAB 比较适合我们学习、掌握并使用。再者,MATLAB高效的数值计算、符号计算功能,完备的图形处理功能,使我们从繁杂的数学运算中解脱出来,实现计算结果和编程的可视化。 MATLAB的功能强大而丰富,值得每一位同学去学习该软件的应用,并应用于解决实际生活中的问题。然而因为能力有限,故在此我们小组着重向同学们介绍MATLAB在曲线拟合方面的应用。 众所周知,对于我们大学生(特别是理工科的大学生)而言,我们需要在实验室中完成各种不同的实验,得到一组组的、众多的看似关系不明显的实验数据,而同学们对于这些数据的处理往往是最头疼的。那一个个看似无规律的数字的处理实在是让不少同学大伤脑筋,而往往实验最关键的部分就是对实验数据的处理,因此,一旦实验数据处理方法不理想,很有可能,由此得到的实验结论也会有较大的偏差。由此可见,对于实验数据的处理,对于我们大学生来说是一项多么重要的能力。所以,我们小组向各位强烈推荐MATLAB这款软件,MATLAB在曲线拟合方面的强大应用,极大地方便了我们对于实验数据的有效处理,并有助于我们

计算物理与matlab程序设计考试试卷

一、填空题: (一)当真值为=x 2.367时,近似值=*x 2.401有 2 位有效数字。 (二)向量T x )13,9,1,7(--=的范数=1x 30 ,=∞x 13 ; (三)矩阵???? ??????---=215114735A 的范数=1A 14 ,=∞A 15 。 (四)在Matlab 窗口中输入>> A = [1, 3, 3, 6; 5, 2, 6, 8; 9, 6, 2, 12]; >>x=min(A), m=A(:, 2), n=A(:, [2,3]),则输出x = [1 2 2 6] ,m= [3 2 6]’ ,n= [3 3;2 6;6 2] 。 (五)用二分法求非线性方程152)(2--=x x x f 在区间(-1,0)内的根时,在二分一步后得到的区间为 (-0.5,0) ,要求结果误差不超过0.005,至少需要二分次数为 7 。 (六)对于同一组数据点,采用拉格朗日插值方法和牛顿插值方法得到的多项式结果 相同 。(填相同或者不同) (七)用拉格朗日插值方法求插值多项式时,公式为)()(0x l a x L i n i i n ∑==,其中) (x l i = 。 (八)Lagrange 插值基函数满足()j i x l (j i =)= 1 。 (九)解非线性方程f(x)=0的牛顿迭代法在单根x *附近是 平方 收敛的。(填线性或者平方)(二阶收敛速度) (十)根据拉格朗日插值,由),(00y x ,),(11y x 写出线性插值公式 。 (十一)用迭代格式)()(1k k k k x f x x x λ-=+,求方程0945)(3=+-=x x x f 的单根时,使迭代序列{}k x 平方收敛,则=)(k x λ (牛顿法迭代) 。 二、简单计算:

相关文档