matlab_简明实例教程
- 格式:pdf
- 大小:367.52 KB
- 文档页数:72
MATLAB基础教程与实例解析第一章:MATLAB介绍与安装1.1 MATLAB的定义与特点1.2 MATLAB的应用领域1.3 MATLAB的安装与配置第二章:MATLAB语法与数据类型2.1 MATLAB的基本语法2.2 MATLAB的变量与赋值2.3 MATLAB的数据类型与操作第三章:向量与矩阵操作3.1 定义向量与矩阵3.2 向量与矩阵的运算3.3 向量与矩阵的索引与切片第四章:函数与脚本文件4.1 函数的定义与调用4.2 函数的输入与输出4.3 脚本文件的编写与执行第五章:图形绘制与可视化5.1 MATLAB的绘图函数与参数5.2 绘制二维图形5.3 绘制三维图形第六章:数据分析与处理6.1 数据导入与导出6.2 统计分析与拟合6.3 信号处理与滤波第七章:优化与线性方程求解7.1 优化理论与最优化问题7.2 MATLAB中的优化函数与工具箱7.3 线性方程组的求解第八章:数值计算与数值求解8.1 数值计算的原理与方法8.2 MATLAB中的数值计算函数与工具箱8.3 数值求解与数值积分第九章:图像处理与计算机视觉9.1 图像的读入与显示9.2 图像的灰度转换与增强9.3 图像的滤波与特征提取第十章:机器学习与深度学习10.1 机器学习与深度学习的基本概念10.2 MATLAB中的机器学习工具箱10.3 使用MATLAB进行数据建模与预测在MATLAB基础教程与实例解析中,我们将逐个章节的介绍MATLAB的各个方面,帮助读者建立起扎实的基础并掌握实际应用技能。
第一章中,我们将首先介绍MATLAB的定义与特点,帮助读者了解其在科学计算、数据分析和工程设计中的重要性。
然后,我们将详细介绍MATLAB的安装与配置过程,确保读者能够成功地将MATLAB部署在自己的计算机上。
在第二章中,我们将深入探讨MATLAB的语法与数据类型。
我们将从MATLAB的基本语法开始,包括语句的结束、注释的添加和变量的使用。
MATLAB常用函数的使用(解释加实例)1.常用数学函数:- `sqrt(x)`:求一个数的平方根。
例如,`sqrt(9)`的结果是3- `sin(x)`:计算角度x的正弦值。
例如,`sin(pi/2)`的结果是1- `cos(x)`:计算角度x的余弦值。
例如,`cos(pi/2)`的结果是0。
- `exp(x)`:计算e的x次方。
例如,`exp(1)`的结果是2.71832.数组操作函数:- `length(array)`:返回数组的长度。
例如,`length([1, 2, 3])`的结果是3- `sum(array)`:计算数组元素的和。
例如,`sum([1, 2, 3])`的结果是6- `max(array)`:找出数组中的最大值。
例如,`max([1, 2, 3])`的结果是3- `sort(array)`:对数组进行排序。
例如,`sort([3, 2, 1])`的结果是[1, 2, 3]。
3.矩阵操作函数:- `eye(n)`:生成一个n阶单位矩阵。
例如,`eye(3)`的结果是一个3x3的单位矩阵。
- `zeros(m, n)`:生成一个m行n列的全零矩阵。
例如,`zeros(2, 3)`的结果是一个2x3的全零矩阵。
- `ones(m, n)`:生成一个m行n列的全1矩阵。
例如,`ones(2, 3)`的结果是一个2x3的全1矩阵。
- `rand(m, n)`:生成一个m行n列的随机矩阵。
例如,`rand(2,3)`的结果是一个2x3的随机矩阵。
4.文件操作函数:- `load(filename)`:从文件中加载数据。
例如,`load('data.mat')`将从名为"data.mat"的文件中加载数据。
- `save(filename, data)`:将数据保存到文件中。
例如,`save('data.mat', x)`将变量x保存到名为"data.mat"的文件中。
MATLAB是一种用于数学计算、数据可视化和编程的高级技术计算语言和交互式环境。
它是许多工程和科学领域中的首选工具之一,能够帮助用户快速解决各种小问题。
本文将通过例子和代码,介绍MATLAB是如何解决小问题的。
1. 读取和绘制数据假设我们有一组实验数据,保存在一个名为"data.csv"的文件中。
我们可以使用MATLAB的csvread函数读取数据,然后使用plot函数绘制图形,如下所示:```matlabdata = csvread('data.csv'); % 读取数据plot(data(:,1), data(:,2)); % 绘制数据xlabel('x轴'); % 添加x轴标签ylabel('y轴'); % 添加y轴标签title('数据可视化'); % 添加标题```2. 拟合曲线现在我们想对这组数据进行曲线拟合,以便更好地理解数据的特征。
我们可以使用MATLAB的polyfit函数来进行多项式拟合,然后使用polyval函数绘制拟合曲线,如下所示:```matlabp = polyfit(data(:,1), data(:,2), 2); % 二次多项式拟合y_fit = polyval(p, data(:,1)); % 计算拟合曲线的值plot(data(:,1), data(:,2)); % 绘制原始数据hold on;plot(data(:,1), y_fit, 'r--'); % 绘制拟合曲线xlabel('x轴'); % 添加x轴标签ylabel('y轴'); % 添加y轴标签title('数据拟合'); % 添加标题legend('原始数据', '拟合曲线'); % 添加图例```3. 解方程假设我们需要解一个简单的方程,例如x^2-5x+6=0。
matlab简明教程matlab简明教程实际上,与c等高级语言相比,matlab是很容易上手的一门语言。
下面是店铺分享的一些相关资料,供大家参考。
一、简介Matlab(MATrix LABoratory)是美国MathWorks公司开发的科学计算软件,是为科学计算而设计的可视化计算器。
利用简单命令,可以完成其他高级语言只能通过复杂编程才能实现的数值计算和图形显示。
Matlab已发展称为适合多学科、多种工作平台的功能强大的大型软件。
成为线性代数、自动控制、数理统计、信号处理等课程的基本教学工具,为理工科大学生、硕士、博士必须掌握的基本技能。
在科研单位和工业部门,Matlab被广泛应用于科学研究。
二、简单使用指南1. 程序运行方式Matlab语言由一些简单的命令组成,执行方式有两种,一种是直接在命令窗口下执行,第二种是把程序以文本格式存放在.m文件中,执行文件时,只需在命令窗口下输入文件名(去掉.m后缀)即可。
第二种方式是更常用、也更为方便的一种方式。
2. 变量变量不需要定义,可以直接使用。
变量均代表一个矩阵(行向量可以看做是1×N矩阵,列向量可以看做是N×1的矩阵,一个数可以看做是1×1的矩阵)。
变量的定义有三种形式:(1)直接定义,如:a=1;b=[1 2 34 5 6];c=10:0.1:11;上述语句,生成a为一个数,数值为1;b为一个2×3的矩阵,c 为一个行向量,第一个和最后一个数值为10和11,每相邻两个数之间的差为0.1。
(2)从外部的数据文件输入,如:s=load('D:\MyDocuments\Data2.txt');文件Data.txt的内容如下,则执行上述语句后变量s为4×2的矩阵。
(3)从键盘输入,如:d=input('输入你的年龄:');运行以上语句,按屏幕提示,输入“30”,则变量d=30。
matlab十个简单案例编写1. 求解线性方程组线性方程组是数学中常见的问题之一,而MATLAB提供了用于求解线性方程组的函数。
例如,我们可以使用"linsolve"函数来求解以下线性方程组:2x + 3y = 74x - 2y = 2代码如下所示:A = [2, 3; 4, -2];B = [7; 2];X = linsolve(A, B);disp(X);解释:上述代码定义了一个2x2的矩阵A和一个2x1的矩阵B,分别表示线性方程组的系数矩阵和常数向量。
然后,使用linsolve函数求解线性方程组,结果存储在X中,并通过disp函数打印出来。
运行代码后,可以得到x=2和y=1的解。
2. 求解非线性方程除了线性方程组外,MATLAB还可以用于求解非线性方程。
例如,我们可以使用"fzero"函数求解以下非线性方程:x^2 + 2x - 3 = 0代码如下所示:fun = @(x) x^2 + 2*x - 3;x0 = 0;x = fzero(fun, x0);disp(x);解释:上述代码定义了一个匿名函数fun,表示非线性方程。
然后,使用fzero函数传入fun和初始值x0来求解非线性方程的根,并通过disp函数打印出来。
运行代码后,可以得到x=1的解。
3. 绘制函数图像MATLAB提供了强大的绘图功能,可以帮助我们可视化函数的形状和特征。
例如,我们可以使用"plot"函数绘制以下函数的图像:y = cos(x)代码如下所示:x = linspace(0, 2*pi, 100);y = cos(x);plot(x, y);解释:上述代码首先使用linspace函数生成一个从0到2π的100个等间距点的向量x,然后计算对应的cos值,并存储在向量y中。
最后,使用plot函数将x和y作为横纵坐标绘制出函数图像。
运行代码后,可以看到cos函数的周期性波动图像。
Matlab中的深度学习框架与实例教程深度学习作为一种强大的机器学习技术,已经在各个领域取得了许多突破性的进展。
而Matlab作为一种广泛使用的科学计算工具,在深度学习领域也有着强大的支持和应用。
本文将介绍Matlab中的深度学习框架与实例教程,帮助读者了解如何使用Matlab进行深度学习的研究和开发。
一、Matlab中的深度学习框架Matlab提供了强大的深度学习框架,使用户能够轻松地构建、训练和部署深度学习模型。
其中最重要的框架是深度学习工具箱(Deep Learning Toolbox),它提供了丰富的函数和工具,支持各种深度学习网络的构建和训练。
在深度学习工具箱中,最核心的对象是神经网络(neural network)对象。
通过定义一个神经网络对象,用户可以构建自己的深度学习网络模型。
Matlab提供了多种类型的神经网络层和激活函数,用户可以根据具体的任务需求选择合适的组合方式。
除了神经网络对象,深度学习工具箱还提供了其他重要的函数和工具。
例如,用户可以使用数据存储器(Datastore)对象来读取和预处理大规模数据集,通过迁移学习工作流(Transfer Learning Workflow),用户可以快速地将训练好的网络模型迁移到新任务上。
此外,深度学习工具箱还支持GPU加速,大大提高了深度学习训练和预测的速度。
二、深度学习实例教程为了帮助读者更好地理解和掌握Matlab中的深度学习框架,下面将介绍几个实例教程,其中涵盖了深度学习的常见应用场景。
1. 图像分类图像分类是深度学习中最常见的任务之一。
在Matlab中,可以使用深度学习工具箱构建一个图像分类网络。
用户可以选择使用预训练模型,也可以从头开始构建自己的网络。
首先,需要准备一个适当的图像数据集。
可以使用Datastore对象来读取和预处理图像数据。
然后,构建一个神经网络对象,并定义每个层次的结构和激活函数。
接下来,使用训练数据对网络进行训练,并使用测试数据对网络进行评估。
Matlab是一种高级的技术计算语言和交互式环境,它可以进行各种科学计算、数据分析和可视化操作。
Matlab类的使用是Matlab开发中的重要组成部分,它可以帮助我们更好地组织和管理程序代码,提高代码的复用性和可维护性。
在本文中,我们将介绍Matlab类的基本概念和使用方法,并通过实例演示其在实际开发中的应用。
一、Matlab类的基本概念1.1 类和对象在面向对象的程序设计中,类是一种抽象的数据类型,它定义了一组属性和方法,用来描述某一类对象的共性特征。
对象则是类的实例,它包含了类定义的属性和方法,并可以进行相应的操作。
1.2 类的定义在Matlab中,可以使用关键字class来定义一个类,然后在类定义中添加属性和方法。
类的定义通常保存在以类名命名的.m文件中,类文件的文件名必须与类名一致。
1.3 类的继承Matlab支持类的继承机制,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和重写。
继承可以帮助我们更好地组织和管理类,提高代码的复用性和可维护性。
1.4 类的实例化在Matlab中,可以使用构造函数来创建类的实例。
构造函数是一种特殊的方法,用来初始化类的实例,并可以接受参数进行定制化的初始化操作。
二、Matlab类的使用方法2.1 类的定义和属性定义一个简单的Matlab类,用来描述一个图形的基本属性和方法。
创建一个名为Shape的类,然后在类定义中添加属性和方法。
属性可以用来描述图形的颜色、形状等特征,方法可以用来计算图形的面积、周长等操作。
```matlabclassdef Shapepropertiescolorareaperimeterendmethodsfunction obj = Shape(color)obj.color = color;endfunction calculateArea(obj)计算图形的面积...endfunction calculatePerimeter(obj)计算图形的周长...endendend```2.2 类的继承和重写在上面的例子中,我们创建了一个基本的图形类Shape,现在我们需要创建一个具体的图形类,比如圆形类Circle。
Matlab 实例教程:PDE工具箱函数用法讲解Matlab工具箱中任何功能都能用命令行的形式解决,对于一些复杂的问题,gui形式是解决不了的,这时就必须用命令行形式自己编程来解决问题。
最近查看了一些pde工具箱中的函数,对两个函数的用法做一些说明。
PDE解决问题流程与一般的fam方法一样,先画出几何模型,再画网格,加边界、载荷,求解。
MATLAB中的画几何命令有两种方式,其中一种方式是自己编写m文件,MATLAB中的命令是pdegeom,实际上这不是一个命令,而是要用户自己编写的一个几何m文件。
在网上找了半天,也没见有人介绍过这个函数的用法,网上大多数只是列出pde中的函数而已,感叹一下….这个函数名可以任意,假设为tt,参数有两个(bs,s)如果输入参数为0,1时,函数也必须要能有返回值。
函数的意义为:参数为0个,即没有参数时,返回边界总共段数。
参数为1个是,即只有bs,返回边界指定段的参变量范围。
参数为2个时,返回每段边界长度为s时的坐标。
函数参数意义bs表示几何边界段数,如矩形,边界为四段,三角开边界肯定为三段….s为第bs段时的长度,bs与s可以为向量,但是要一一对应,即bs为几个值,s也得为几个值。
下面具体来讲下函数如何实现当参数为2时的返回值。
其实函数中实现的内容是指用一个参变量来控制指定段的边界坐标,也就是说对任意一段边界,上面的坐标设为参变量的函数,假设参变量为t,则对任一边界,坐标为(x(t),y(t)),参变量的范围由用户自己定义。
由以上可以看出,参变量其实有无穷多种取法,看自己怎么设定而已。
例如:一个矩形,四条边,返回每一段对应长度的坐标,m文件为:function [x,y]=tt(bs,s);ux=1;uy=1;nbs=4; //表示有四段if nargin==0x=nbs;returnenddl=[0,0,0,0; //参变量t范围,第一行为起始值,第二行为结束值,这两个值理论3,1,2,3; //可以任意设置,只要后面能对应求出边界上坐标(x(t),y(t))就行1,1,1,1; //第三行指面积在边界左侧0,0,0,0,]; //第四行指面积在边界右侧if nargin==1x=dl(:,bs);return;endx=zeros(size(s));y=zeros(size(s));[m,n]=size(bs);if m==1 & n==1bs=bs*ones(size(s));endii=find(bs==1);if ~isempty(ii)x(ii)=interp1([dl(1,1),dl(2,1)],[0 3],s(ii));y(ii)=interp1([dl(1,1),dl(2,1)],[0,0],s(ii));//其实这一段是一条水平直线,//x=(3-0)/(dl(2,1)-dl(1,1))*s(1)=s(1)//y=(0-0)/(dl(2,1)-dl(1,1))*s(1)=0,//如果dl(2,1)由3变成1,那么//x(ii)=interp1([dl(1,1),dl(2,1)],[0 3],s(ii));结果也是一样的。
数学建模竞赛培训之编程MATLAB实用教程在当今的学术和工程领域,数学建模竞赛越来越受到重视,而MATLAB 作为一款强大的数学计算和编程软件,在其中发挥着至关重要的作用。
如果你正在为数学建模竞赛做准备,那么掌握 MATLAB 的编程技巧将为你在竞赛中取得优异成绩提供有力的支持。
接下来,让我们一起开启 MATLAB 编程的实用教程之旅。
一、MATLAB 基础首先,我们来了解一下 MATLAB 的基本操作界面。
当你打开MATLAB 时,会看到一个命令窗口,这是我们输入命令和查看结果的地方。
变量是编程中的重要概念,在 MATLAB 中,变量无需事先声明类型,直接赋值即可使用。
例如,我们可以输入`x = 5` ,此时`x` 就被赋值为 5 。
MATLAB 支持多种数据类型,如数值型(包括整数和浮点数)、字符型、逻辑型等。
二、矩阵操作矩阵在数学建模中经常用到,MATLAB 对矩阵的操作非常方便。
可以通过直接输入元素来创建矩阵,比如`A = 1 2 3; 4 5 6` 就创建了一个 2 行 3 列的矩阵`A` 。
矩阵的运算也十分简单,加法、减法、乘法等都有相应的运算符。
例如,两个矩阵相加可以直接使用`A + B` 。
三、函数的使用MATLAB 拥有丰富的内置函数,大大提高了编程效率。
比如求矩阵的行列式可以使用`det()`函数,求矩阵的逆可以使用`inv()`函数。
我们还可以自己定义函数,语法如下:```matlabfunction output_args = function_name(input_args)%函数体end```四、绘图功能在分析数据和展示结果时,绘图是必不可少的。
MATLAB 能够绘制各种类型的图形,如折线图、柱状图、饼图等。
以绘制简单的折线图为例,使用`plot()`函数,如`plot(x,y)`,其中`x` 和`y` 是数据向量。
五、数值计算在数学建模中,常常需要进行数值计算,如求解方程、求积分等。
实验一特殊函数与图形一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景与实验目的著名的Riemann函数大家都很熟悉了,但是关于它的图像你是否清楚呢?除了最上面那几点,其他都很难画吧?你想不想看看下面那些“挤在一起”的点是怎样分布的呢?还有几何中的马鞍面、单叶双曲面等是怎样由直线生成的,是不是也想目睹一下呢?这些,都离不开绘图.实际上绘图一直是数学中的一种重要手段,借助图形,往往可以化繁为简,使抽象的对象得到明白直观的体现.比如函数的基本性质,一个图形常可以使之一目了然,非常有效.它虽不能代替严格的分析与证明,但在问题的研究过程中,可以帮助研究人员节约相当一部分精力.此外,它还可以使计算、证明、建模等的结果得到更明白易懂的表现,有时,这比科学论证更有说服力.同时,数学的教学与学习过程也离不开绘图.借助直观的图形,常可以使初学者更容易接受新知识.如数学分析中有不少函数,其解析式着实让人望而生畏,即使对其性质作了详尽的分析,还是感到难明就里;但如果能看到它的图形,再配合理论分析,则问题可以迎刃而解.又如在几何的学习中,会遇到大量的曲线与曲面,也离不开图形的配合.传统的手工作图,往往费力耗时,效果也不尽理想.计算机恰恰弥补了这个不足,使你可以方便地指定各种视角、比例、明暗,从各个角度进行观察.本实验通过对函数的图形表示和几个曲面(线)图形的介绍,一方面展示它们的特点,另一方面,也将就Matlab软件的作图功能作一个简单介绍.大家将会看到,Matlab 的作图功能非常强大.二、相关函数(命令)及简介1.平面作图函数:plot,其基本调用形式:plot(x,y,s)以x作为横坐标,y作为纵坐标.s是图形显示属性的设置选项.例如:x=-pi:pi/10:pi;y=sin(x);plot(x,y,'--rh','linewidth',2,'markeredgecolor','b','markerfacecolor','g')图1在使用函数plot时,应当注意到当两个输入量同为向量时,向量x与y必须维数相同,而且必须同是行向量或者同是列向量.绘图时,可以制定标记的颜色和大小,也可以用图形属性制定其他线条特征,这些属性包括:linewidth 指定线条的粗细.markeredgecolor 指定标记的边缘色markerfacecolor 指定标记表面的颜色.markersize 指定标记的大小.若在一个坐标系中画几个函数,则plot的调用格式如下:plot(x1,y1,s1,x2,y2,s2,……)2.空间曲线作图函数:plot3,它与plot相比,只是多了一个维数而已.其调用格式如下:plot3(x,y,z,s).例如:x=0:pi/30:20*pi;y=sin(x);z=cos(x);plot3(x,y,z)得到三维螺旋线:图23.空间曲面作图函数:(1)mesh函数.绘制彩色网格面图形.调用格式:mesh(z),mesh(x,y,z)和mesh(x,y,z,c).其中,mesh(x,y,z,c)画出颜色由c指定的三维网格图.若x、y均为向量,则length(x)=n,length(y)=m,[m,n]=size(z).(2)surf在矩形区域内显示三维带阴影曲面图.调用格式与mesh类似.(3)ezmesh用符号函数作三维曲面网格图.调用格式:ezmesh(x,y,z)其中x = x(s,t), y = y(s,t),z = z(s,t).画图区域默认为:-2*pi < s < 2*pi 且-2*pi < t < 2*pi.或者用格式:ezmesh(x,y,z,[smin,smax,tmin,tmax])(4)ezsurf用符号函数作三维曲面图.调用格式与ezmesh类似.(5)sphere画球体命令.4.meshgrid,调用格式:[x,y]=meshgrid(m,n),这里的m,n为给定的向量,可以定义网格划分区域和划分方法.矩阵x和矩阵y是网格划分后的数据矩阵.5.图像的修饰与其他函数:(1)axis equal 控制各个坐标轴的分度,使其相等;(2)colormap设置绘图颜色.调用格式:colormap([r g b])其中r,g,b都是0-1之间的数.或者用格式:colormap(s)s(3(4)find找出符合条件的元素在数组中的位置.调用格式:y=find(条件)例如:输入:a=[4 5 78 121 4 665 225 4 1];b=find(a>7)输出:b =3 4 6 7三、实验内容数学分析中,特别是积分部分,我们接触了不少有趣的函数,由于其中有的不是一一对应的,用上面的方法无法画出它们的图像,这时就只能用参数了.此外还有些图形只能用参数来画,比如空间曲线,在计算机上不接受“两个曲面的交线”这种表示,所以也只能用参数来实现.用参数方式作图的关键在于找出合适的参数表示,尤其是不能有奇点,最好也不要用到开方.所以要找的参数最好是有几何意义的.当然这也不可一概而论,需要多积累经验.1.利用函数plot在一个坐标系中画以下几个函数图像,要求采用不同颜色、不同线形、不同的符号标记.函数为:.程序如下:t=0:pi/20:2*pi;x=sin(t);y=cos(t);z=sin(2*t);plot(t, x, '--k*', t, y, '-rs', t, z, ':bo')图像如下:图32.绘制类似田螺线的一条三维螺线(方程自己设计).程序如下:t=0:.1:30;x=2*(cos(t)+t.*sin(t));y=2*(sin(t)-t.*cos(t));z=1.5*t;plot3(x,y,-z) %取–z 主要是为了画图看起来更清楚axis equal图像如下:图43.利用函数,绘制一个墨西哥帽子的图形.程序如下:[a,b]=meshgrid(-8:.5:8); %先生成一个网格c=sqrt(a.^2+b.^2)+eps;z=sin(c)./c;mesh(a,b,z)axis square图像如下:图5思考:这里的eps 是什么?其作用是什么?4.利用surf绘制马鞍面图形(函数为:).程序如下:[x,y]=meshgrid(-25:1:25,-25:1:25);z=x.^2/9-y.^2/4;surf(x,y,z)title('马鞍面')grid off图像如下:5.分别用ezmesh和ezsurf各绘制一个圆环面,尝试将两个圆环面放在一个图形界面内,观察它们有什么不同之处.提示:圆环面的方程为:,而圆环面的参数方程为:程序参见附录1.图像如下:图76.绘制黎曼函数图形,加深对黎曼函数的理解.说明:黎曼函数的定义为程序参见附录2.图像如下:四、自己动手1.作出下图所示的三维图形:图9提示:图形为圆环面和球面的组合.2.作出下图所示的墨西哥帽子及其剪裁图形:图103.画出球面、椭球面、双叶双曲面、单叶双曲面.4.若要求田螺线的一条轴截面的曲边是一条抛物线:时.试重新设计田螺线的参数方程,并画出该田螺线.5.作出下图所示的马鞍面(颜色为灰色,并有一个标题:“马鞍面”):图116.绘制图8所示的黎曼函数图形,要求分母的最大值的数值由键盘输入(提示:使用input语句).回目录下一页实验二定积分的近似计算一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容1.矩形法2.梯形法3.抛物线法4. 直接应用Matlab命令计算结果四、自己动手一、问题背景与实验目的利用牛顿—莱布尼兹公式虽然可以精确地计算定积分的值,但它仅适用于被积函数的原函数能用初等函数表达出来的情形.如果这点办不到或者不容易办到,这就有必要考虑近似计算的方法.在定积分的很多应用问题中,被积函数甚至没有解析表达式,可能只是一条实验记录曲线,或者是一组离散的采样值,这时只能应用近似方法去计算相应的定积分.本实验将主要研究定积分的三种近似计算算法:矩形法、梯形法、抛物线法.对于定积分的近似数值计算,Matlab有专门函数可用.二、相关函数(命令)及简介1.sum(a):求数组a的和.2.format long:长格式,即屏幕显示15位有效数字.(注:由于本实验要比较近似解法和精确求解间的误差,需要更高的精度).3.double():若输入的是字符则转化为相应的ASCII码;若输入的是整型数值则转化为相应的实型数值.4.quad():抛物线法求数值积分.格式:quad(fun,a,b) ,注意此处的fun是函数,并且为数值形式的,所以使用*、/、^等运算时要在其前加上小数点,即.*、./、.^等.例:Q = quad('1./(x.^3-2*x-5)',0,2);5.trapz():梯形法求数值积分.格式:trapz(x,y)其中x为带有步长的积分区间;y为数值形式的运算(相当于上面介绍的函数fun)例:计算x=0:pi/100:pi;y=sin(x);trapz(x,y)6.dblquad():抛物线法求二重数值积分.格式:dblquad(fun,xmin,xmax,ymin,ymax),fun可以用inline定义,也可以通过某个函数文件的句柄传递.例1:Q1 = dblquad(inline('y*sin(x)'), pi, 2*pi, 0, pi)顺便计算下面的Q2,通过计算,比较Q1 与Q2结果(或加上手工验算),找出积分变量x、y的上下限的函数代入方法.Q2 = dblquad(inline('y*sin(x)'), 0, pi, pi, 2*pi)例2:Q3 = dblquad(@integrnd, pi, 2*pi, 0, pi)这时必须存在一个函数文件integrnd.m:function z = integrnd(x, y)z = y*sin(x);7.fprintf(文件地址,格式,写入的变量):把数据写入指定文件.例:x = 0:.1:1;y = [x; exp(x)];fid = fopen('exp.txt','w'); %打开文件fprintf(fid,'%6.2f %12.8f\n',y); %写入fclose(fid) %关闭文件8.syms 变量1 变量2 …:定义变量为符号.9.sym('表达式'):将表达式定义为符号.解释:Matlab中的符号运算事实上是借用了Maple的软件包,所以当在Matlab 中要对符号进行运算时,必须先把要用到的变量定义为符号.10.int(f,v,a,b):求f关于v积分,积分区间由a到b.11.subs(f,'x',a):将a 的值赋给符号表达式f 中的x,并计算出值.若简单地使用subs(f),则将f的所有符号变量用可能的数值代入,并计算出值.三、实验内容1.矩形法根据定积分的定义,每一个积分和都可以看作是定积分的一个近似值,即在几何意义上,这是用一系列小矩形面积近似小曲边梯形的结果,所以把这个近似计算方法称为矩形法.不过,只有当积分区间被分割得很细时,矩形法才有一定的精确度.针对不同的取法,计算结果会有不同,我们以为例(取),(1)左点法:对等分区间,在区间上取左端点,即取,0.78789399673078,理论值,此时计算的相对误差(2)右点法:同(1)中划分区间,在区间上取右端点,即取,0.78289399673078,理论值,此时计算的相对误差(3)中点法:同(1)中划分区间,在区间上取中点,即取,0.78540024673078,理论值,此时计算的相对误差如果在分割的每个小区间上采用一次或二次多项式来近似代替被积函数,那么可以期望得到比矩形法效果好得多的近似计算公式.下面介绍的梯形法和抛物线法就是这一指导思想的产物.2.梯形法等分区间,相应函数值为().曲线上相应的点为()将曲线的每一段弧用过点,的弦(线性函数)来代替,这使得每个上的曲边梯形成为真正的梯形,其面积为,.于是各个小梯形面积之和就是曲边梯形面积的近似值,,即,称此式为梯形公式.仍用的近似计算为例,取,0.78539399673078,理论值,此时计算的相对误差很显然,这个误差要比简单的矩形左点法和右点法的计算误差小得多.3.抛物线法由梯形法求近似值,当为凹曲线时,它就偏小;当为凸曲线时,它就偏大.若每段改用与它凸性相接近的抛物线来近似时,就可减少上述缺点,这就是抛物线法.将积分区间作等分,分点依次为,,对应函数值为(),曲线上相应点为().现把区间上的曲线段用通过三点,,的抛物线来近似代替,然后求函数从到的定积分:由于,代入上式整理后得同样也有……将这个积分相加即得原来所要计算的定积分的近似值:,即这就是抛物线法公式,也称为辛卜生(Simpson)公式.仍用的近似计算为例,取,=0.78539816339745,理论值,此时计算的相对误差4. 直接应用Matlab命令计算结果(1)数值计算方法1:int('1/(1+x^2)','x',0,1) (符号求积分)方法2:quad('1./(1+x.^2)',0,1) (抛物线法求数值积分)方法3:x=0:0.001:1;y=1./(1+x.^2);trapz(x,y) (梯形法求数值积分)(2)数值计算方法1:int(int('x+y^2','y',-1,1),'x',0,2) (符号求积分)方法2:dblquad(inline('x+y^2'),0,2,-1,1) (抛物线法二重数值积分)四、自己动手1.实现实验内容中的例子,即分别采用矩形法、梯形法、抛物线法计算,取,并比较三种方法的精确程度.2.分别用梯形法与抛物线法,计算,取.并尝试直接使用函数trapz()、quad()进行计算求解,比较结果的差异.3.试计算定积分.(注意:可以运用trapz()、quad()或附录程序求解吗?为什么?)4.将的近似计算结果与Matlab中各命令的计算结果相比较,试猜测Matlab中的数值积分命令最可能采用了哪一种近似计算方法?并找出其他例子支持你的观点.5.通过整个实验内容及练习,你能否作出一些理论上的小结,即针对什么类型的函数(具有某种单调特性或凹凸特性),用某种近似计算方法所得结果更接近于实际值?6.学习fulu2sum.m的程序设计方法,尝试用函数sum 改写附录1和附录3的程序,避免for 循环.上一页回目录下一页实验三求代数方程的近似根(解)一、问题背景和实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景和实验目的求代数方程的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当是一次多项式时,称为线性方程,否则称之为非线性方程.当是非线性方程时,由于的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间,或给出某根的近似值.在实际问题抽象出的数学模型中,可以根据物理背景确定;也可根据的草图等方法确定,还可用对分法、迭代法以及牛顿切线法大致确定根的分布情况.通过本实验希望你能:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.二、相关函数(命令)及简介1.abs( ):求绝对值函数.2.diff(f):对独立变量求微分,f 为符号表达式.diff(f, 'a'):对变量a求微分,f 为符号表达式.diff(f, 'a', n):对变量a 求n 次微分,f 为符号表达式.例如:syms x tdiff(sin(x^2)*t^6, 't', 6)ans=720*sin(x^2)3.roots([c(1), c(2), …, c(n+1)]):求解多项式的所有根.例如:求解:.p = [1 -6 -72 -27];r = roots(p)r =12.1229-5.7345-0.38844.solve('表达式'):求表达式的解.solve('2*sin(x)=1')ans =1/6*pi5.linsolve(A, b):求线性方程组A*x=b 的解.例如:A= [9 0; -1 8]; b=[1; 2];linsolve(A, b)ans=[ 1/9][19/72]6.fzero(fun, x0):在x0附近求fun 的解.其中fun为一个定义的函数,用“@函数名”方式进行调用.例如:fzero(@sin, 3)ans=3.14167.subs(f, 'x ', a):将a 的值赋给符号表达式f 中的x,并计算出值.例如:subs('x^2 ', 'x ', 2)ans = 4三、实验内容首先,我们介绍几种与求根有关的方法:1.对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设在上连续,,即,或,.则根据连续函数的介值定理,在内至少存在一点,使.下面的方法可以求出该根:(1)令,计算;(2)若,则是的根,停止计算,输出结果.若,则令,,若,则令,;.……,有、以及相应的.(3) 若(为预先给定的精度要求),退出计算,输出结果;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列,在中含有方程的根.当区间长很小时,取其中点为根的近似值,显然有以上公式可用于估计对分次数.分析以上过程不难知道,对分法的收敛速度与公比为的等比级数相同.由于,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值.2. 迭代法1)迭代法的基本思想:由方程构造一个等价方程从某个近似根出发,令,可得序列,这种方法称为迭代法.若收敛,即,只要连续,有即可知,的极限是的根,也就是的根.当然,若发散,迭代法就失败.以下给出迭代过程收敛的一些判别方法:定义:如果根的某个邻域中,使对任意的,迭代过程,收敛,则称迭代过程在附近局部收敛.定理1:设,在的某个邻域内连续,并且,,则对任何,由迭代决定的序列收敛于.定理2:条件同定理1,则定理3:已知方程,且(1) 对任意的,有.(2) 对任意的,有,则对任意的,迭代生成的序列收敛于的根,且.以上给出的收敛定理中的条件要严格验证都较困难,实用时常用以下不严格的标准:当根区间较小,且对某一,明显小于1时,则迭代收敛(参见附录3).2) 迭代法的加速:a) 松弛法:若与同是的近似值,则是两个近似值的加权平均,其中称为权重,现通过确定看能否得到加速.迭代方程是:其中,令,试确定:当时,有,即当,时,可望获得较好的加速效果,于是有松弛法:,松弛法的加速效果是明显的(见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken方法:松弛法要先计算,在使用中有时不方便,为此发展出以下的Altken 公式:,是它的根,是其近似根.设,,因为,用差商近似代替,有,解出,得由此得出公式;;,这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)1) 牛顿法的基本思想:是非线性方程,一般较难解决,多采用线性化方法.记:是一次多项式,用作为的近似方程.的解为记为,一般地,记即为牛顿法公式.2) 牛顿法的收敛速度:对牛顿法,迭代形式为:注意分子上的,所以当时,,牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值要求较严,要求相当接近真值.因此,常用其他方法确定初值,再用牛顿法提高精度.4. 求方程根(解)的其它方法(1) solve('x^3-3*x+1=0')(2) roots([1 0 -3 1])(3) fzero('x^3-3*x+1', -2)(4) fzero('x^3-3*x+1', 0.5)(5) fzero('x^3-3*x+1', 1.4)(6) linsolve([1, 2, 3; 4, 5, 6; 7, 8, 0], [1, 2, 3]')体会一下,(2)(5) 用了上述1 3 中的哪一种方法?以下是本实验中的几个具体的实验,详细的程序清单参见附录.具体实验1:对分法先作图观察方程:的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.输入以下命令,可得的图象:f='x^3-3*x+1';g='0';ezplot(f, [-4, 4]);hold on;ezplot(g, [-4, 4]); %目的是画出直线y=0,即x 轴grid on;axis([-4 4 -5 5]);hold off具体实验2:普通迭代法采用迭代过程:求方程在0.5 附近的根,精确到第4 位小数.构造等价方程:用迭代公式:,用Matlab 编写的程序参见附录2.请利用上述程序填写下表:分析:将附录2第4行中的分别改为以及,问运行的结果是什么?你能分析得到其中的原因吗?看看下面的“具体实验3”是想向你表达一个什么意思.用Matlab 编写的程序参见附录3.具体实验3:收敛/发散判断设方程的三个根近似地取,和,这些近似值可以用上面的对分法求得.迭代形式一:收敛(很可能收敛,下同)不收敛(很可能不收敛,下同)不收敛迭代形式二:收敛不收敛不收敛迭代形式三:不收敛收敛收敛具体实验4:迭代法的加速1——松弛迭代法,,迭代公式为程序参见附录4.具体实验5:迭代法的加速2——Altken迭代法迭代公式为:,,程序参见附录5.具体实验6:牛顿法用牛顿法计算方程在-2到2之间的三个根.提示:,迭代公式:程序参见附录6 (牛顿法程序).具体实验7:其他方法求下列代数方程(组)的解:(1)命令:solve('x^5-x+1=0')(2)命令:[x, y]=solve('2*x+3*y=0', '4*x^2+3*y=1')(3) 求线性方程组的解,已知,命令:for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'linsolve(m, b)思考:若,或是类似的但阶数更大的稀疏方阵,则应如何得到?四、自己动手1.对分法可以用来求偶重根附近的近似解吗? 为什么?2.对照具体实验2、4、5,你可以得出什么结论?3.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和Altken 迭代法.求解方程在 1.4 附近的根,精确到4位小数,请注意迭代次数的变化.4.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)上一页回目录下一页。
MATLAB的基本使用教程详解MATLAB(Matrix Laboratory,矩阵实验室)是一种用于数值计算和可视化的编程环境。
它提供了强大的数值计算功能、丰富的数学函数库、快捷的可视化工具和易于使用的编程语言。
以下是关于MATLAB基本使用的一些教程:1. 安装和启动MATLAB:- 访问MATLAB官方网站下载并安装MATLAB。
- 安装完成后,在桌面上找到MATLAB图标并点击启动。
2. 创建一个新的MATLAB文件:- 在MATLAB界面,点击“新建”按钮,选择“新建图形”,或者使用快捷键Ctrl+N。
3. 基本的MATLAB命令:- 在命令窗口中输入命令并按Enter键执行。
例如,输入`1+2`并按Enter 键,将显示结果`3`。
- 可以使用括号对表达式进行组包。
例如,输入`(1+2)*3`并按Enter键,将显示结果`9`。
- 在MATLAB中,可以使用逗号将多个命令分开执行。
例如,输入`a = 1,b = 2,c = a+b`,将依次执行这三个命令并显示结果。
4. 变量和数组:- 在MATLAB中,可以使用`a = 1`的形式创建一个变量a并将其值设为1。
- 数组是一种可以存储多个相同类型数据的数据结构。
例如,可以使用`A = [1,2,3;4,5,6]`创建一个包含两行三列的数组。
5. 数学函数:- MATLAB提供了丰富的数学函数库,例如可以使用`sin(pi/2)`计算sin(π/2)的值。
- 可以同时使用多个函数对同一组输入参数进行操作。
例如,可以使用`c = a*b; d = log(a/b); e = sin(a)+cos(b)`同时对变量a、b进行多种操作。
6. 控制结构:- 可以使用`if`、`else`和`end`关键字创建条件语句。
例如,输入`if a > b, a = b; end`将使a的值等于b的值(如果a大于b)。
- 可以使用`for`循环遍历数组或向量。
Matlab 实例教程:PDE工具箱函数用法讲解Matlab工具箱中任何功能都能用命令行的形式解决,对于一些复杂的问题,gui形式是解决不了的,这时就必须用命令行形式自己编程来解决问题。
最近查看了一些pde工具箱中的函数,对两个函数的用法做一些说明。
PDE解决问题流程与一般的fam方法一样,先画出几何模型,再画网格,加边界、载荷,求解。
MATLAB中的画几何命令有两种方式,其中一种方式是自己编写m文件,MATLAB中的命令是pdegeom,实际上这不是一个命令,而是要用户自己编写的一个几何m文件。
在网上找了半天,也没见有人介绍过这个函数的用法,网上大多数只是列出pde中的函数而已,感叹一下….这个函数名可以任意,假设为tt,参数有两个(bs,s)如果输入参数为0,1时,函数也必须要能有返回值。
函数的意义为:参数为0个,即没有参数时,返回边界总共段数。
参数为1个是,即只有bs,返回边界指定段的参变量范围。
参数为2个时,返回每段边界长度为s时的坐标。
函数参数意义bs表示几何边界段数,如矩形,边界为四段,三角开边界肯定为三段….s为第bs段时的长度,bs与s可以为向量,但是要一一对应,即bs为几个值,s也得为几个值。
下面具体来讲下函数如何实现当参数为2时的返回值。
其实函数中实现的内容是指用一个参变量来控制指定段的边界坐标,也就是说对任意一段边界,上面的坐标设为参变量的函数,假设参变量为t,则对任一边界,坐标为(x(t),y(t)),参变量的范围由用户自己定义。
由以上可以看出,参变量其实有无穷多种取法,看自己怎么设定而已。
例如:一个矩形,四条边,返回每一段对应长度的坐标,m文件为:function [x,y]=tt(bs,s);ux=1;uy=1;nbs=4; //表示有四段if nargin==0x=nbs;returnenddl=[0,0,0,0; //参变量t范围,第一行为起始值,第二行为结束值,这两个值理论3,1,2,3; //可以任意设置,只要后面能对应求出边界上坐标(x(t),y(t))就行1,1,1,1; //第三行指面积在边界左侧0,0,0,0,]; //第四行指面积在边界右侧if nargin==1x=dl(:,bs);return;endx=zeros(size(s));y=zeros(size(s));[m,n]=size(bs);if m==1 & n==1bs=bs*ones(size(s));endii=find(bs==1);if ~isempty(ii)x(ii)=interp1([dl(1,1),dl(2,1)],[0 3],s(ii));y(ii)=interp1([dl(1,1),dl(2,1)],[0,0],s(ii));//其实这一段是一条水平直线,//x=(3-0)/(dl(2,1)-dl(1,1))*s(1)=s(1)//y=(0-0)/(dl(2,1)-dl(1,1))*s(1)=0,//如果dl(2,1)由3变成1,那么//x(ii)=interp1([dl(1,1),dl(2,1)],[0 3],s(ii));结果也是一样的。