数据建模常规方法的Matlab实现(实例)
数学建模常用方法MATLAB求解
数学建模常用方法MATLAB求解数学建模是通过数学方法对实际问题进行数学描述、分析和求解的过程。
MATLAB是一款功能强大的数学软件,广泛用于数学建模中的问题求解。
在数学建模中,常用的方法有数值求解、优化求解和符号计算。
下面将介绍MATLAB在数学建模中常用的方法和求解示例。
1.数值求解方法:数值求解是利用数值计算方法来近似求解实际问题的数学模型。
MATLAB提供了许多数值求解函数,如方程求根、解线性方程组、曲线拟合、积分和微分等。
以方程求根为例,可以使用fsolve函数来求解非线性方程。
示例:求解非线性方程sin(x)=0.5```matlabx0=0;%初始点x = fsolve(fun,x0);```2.优化求解方法:优化求解是在给定约束条件下,寻找使目标函数取得最优值的变量值。
MATLAB提供了许多优化求解函数,如线性规划、二次规划、非线性规划、整数规划等。
以线性规划为例,可以使用linprog函数来求解线性规划问题。
示例:求解线性规划问题,目标函数为max(3*x1+4*x2),约束条件为x1>=0、x2>=0和2*x1+3*x2<=6```matlabf=[-3,-4];%目标函数系数A=[2,3];%不等式约束的系数矩阵b=6;%不等式约束的右端向量lb = zeros(2,1); % 变量下界ub = []; % 变量上界x = linprog(f,A,b,[],[],lb,ub);```3.符号计算方法:符号计算是研究数学符号的计算方法,以推导或计算数学表达式为主要任务。
MATLAB提供了符号计算工具箱,可以进行符号计算、微积分、代数运算、求解方程等。
以符号计算为例,可以使用syms函数来定义符号变量,并使用solve函数求解方程。
示例:求解二次方程ax^2+bx+c=0的根。
```matlabsyms x a b c;eqn = a*x^2 + b*x + c == 0;sol = solve(eqn, x);```以上是MATLAB在数学建模中常用的方法和求解示例,通过数值求解、优化求解和符号计算等方法,MATLAB可以高效地解决各种数学建模问题。
Matlab中的数学建模方法
Matlab中的数学建模方法引言在科学研究和工程领域,数学建模是一种重要的方法,它可以通过数学模型来描述和解释真实世界中的现象和问题。
Matlab是一款强大的数值计算和数据可视化工具,因其灵活性和易用性而成为数学建模的首选工具之一。
本文将介绍一些在Matlab中常用的数学建模方法,并以实例来展示其应用。
一、线性回归模型线性回归是最常见的数学建模方法之一,用于解决变量之间呈现线性关系的问题。
在Matlab中,可以使用regress函数来拟合线性回归模型。
例如,假设我们想要分析学生的身高和体重之间的关系,并建立一个线性回归模型来预测学生的体重。
首先,我们需要收集一组已知的身高和体重数据作为训练集。
然后,可以使用regress函数来计算回归模型的参数,并进行预测。
最后,通过绘制散点图和回归直线,可以直观地观察到身高和体重之间的线性关系。
二、非线性回归模型除了线性回归外,有时数据之间的关系可能是非线性的。
在这种情况下,可以使用非线性回归模型来建立更准确的数学模型。
在Matlab中,可以使用curvefit工具箱来拟合非线性回归模型。
例如,假设我们想要分析一组实验数据,并建立一个非线性模型来描述数据之间的关系。
首先,可以使用curvefit工具箱中的工具来选择最适合数据的非线性模型类型。
然后,通过调整模型的参数,可以用最小二乘法来优化模型的拟合效果。
最后,可以使用拟合后的模型来进行预测和分析。
三、最优化问题最优化是数学建模的关键技术之一,用于在给定的限制条件下找到使目标函数取得最大或最小值的变量取值。
在Matlab中,可以使用fmincon函数来求解最优化问题。
例如,假设我们要最小化一个复杂的目标函数,并且有一些约束条件需要满足。
可以使用fmincon函数来设定目标函数和约束条件,并找到最优解。
通过调整目标函数和约束条件,以及设置合适的初始解,可以得到问题的最优解。
四、概率统计模型概率统计模型用于解决随机性和不确定性问题,在许多领域都得到广泛应用。
matlab数学建模100例
matlab数学建模100例Matlab是一种强大的数学建模工具,广泛应用于科学研究、工程设计和数据分析等领域。
在这篇文章中,我们将介绍100个使用Matlab进行数学建模的例子,帮助读者更好地理解和应用这个工具。
1. 线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合直线。
2. 多项式拟合:使用Matlab拟合一组数据点,得到最佳拟合多项式。
3. 非线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合曲线。
4. 插值模型:使用Matlab根据已知数据点,估计未知数据点的值。
5. 数值积分:使用Matlab计算函数的定积分。
6. 微分方程求解:使用Matlab求解常微分方程。
7. 矩阵运算:使用Matlab进行矩阵的加减乘除运算。
8. 线性规划:使用Matlab求解线性规划问题。
9. 非线性规划:使用Matlab求解非线性规划问题。
10. 整数规划:使用Matlab求解整数规划问题。
11. 图论问题:使用Matlab解决图论问题,如最短路径、最小生成树等。
12. 网络流问题:使用Matlab解决网络流问题,如最大流、最小费用流等。
13. 动态规划:使用Matlab解决动态规划问题。
14. 遗传算法:使用Matlab实现遗传算法,求解优化问题。
15. 神经网络:使用Matlab实现神经网络,进行模式识别和预测等任务。
16. 支持向量机:使用Matlab实现支持向量机,进行分类和回归等任务。
17. 聚类分析:使用Matlab进行聚类分析,将数据点分成不同的类别。
18. 主成分分析:使用Matlab进行主成分分析,降低数据的维度。
19. 时间序列分析:使用Matlab进行时间序列分析,预测未来的趋势。
20. 图像处理:使用Matlab对图像进行处理,如滤波、边缘检测等。
21. 信号处理:使用Matlab对信号进行处理,如滤波、频谱分析等。
22. 控制系统设计:使用Matlab设计控制系统,如PID控制器等。
Matlab技术数学建模实战教程
Matlab技术数学建模实战教程近年来,随着计算机技术的飞速发展,数学建模在科学研究和工程实践中发挥着越来越重要的作用。
而Matlab作为一款功能强大、易于使用的数学建模工具,备受科研工作者和工程师的喜爱。
本文将为大家呈现一篇关于Matlab技术数学建模实战教程,帮助读者更好地掌握这一工具并在实践中取得更好的效果。
一、Matlab的基本操作和编程语言首先,我们来了解一下Matlab的基本操作。
作为一款交互式软件,Matlab的命令行界面(Command Window)是最常用的工作环境。
在这个界面上,用户可以直接输入命令并查看结果。
比如,我们可以输入"2+2"并执行命令,Matlab便会给出结果"4"。
除了命令行界面,Matlab还提供了图形用户界面(Graphical User Interface,GUI)来方便用户进行操作。
通过GUI,用户可以通过按钮、菜单等进行图形化操作,进一步简化了使用过程。
另外,在Matlab中,用户也可以编写脚本(Script)和函数(Function)来实现更复杂的计算任务。
脚本是一系列的命令集合,可以按照特定顺序自动执行。
而函数则是一个封装了一系列操作的模块,可以通过输入参数获取输出结果。
对于Matlab的编程语言,它采用了矩阵和数组为基本数据结构,并提供了丰富的数值计算函数和工具箱。
用户可以通过这些函数和工具箱实现各种数学和工程计算任务,比如线性代数运算、数值积分、优化算法等。
二、数学建模实战案例:鱼群行为模拟为了更好地理解Matlab在数学建模中的应用,我们以鱼群行为模拟为例进行实战演示。
鱼群模型是一种经典的生物群体运动模型,通过模拟鱼群中每只鱼的运动规律,可以研究鱼群的集群行为和群体动力学特性。
首先,我们需要确定鱼群模型的基本参数,比如鱼的个数、鱼的初始位置和速度等。
这些参数可以通过随机生成函数在Matlab中快速生成。
matlab数学建模程序代码
matlab数学建模程序代码
当进行数学建模时,MATLAB是一个强大的工具,用于实现和测试模型。
下面是一个简单的MATLAB代码示例,演示如何使用MATLAB进行一维线性回归建模:
```matlab
%生成示例数据
x=[1,2,3,4,5];
y=[2.8,3.9,4.8,5.5,6.3];
%进行一维线性回归
coefficients=polyfit(x,y,1);
slope=coefficients(1);
intercept=coefficients(2);
%绘制原始数据和回归线
scatter(x,y,'o','DisplayName','原始数据');
hold on;
plot(x,polyval(coefficients,x),'r-','DisplayName','回归线');
hold off;
%添加标签和图例
xlabel('X轴');
ylabel('Y轴');
title('一维线性回归建模示例');
legend('show');
%输出回归方程的系数
fprintf('回归方程:y=%.2fx+%.2f\n',slope,intercept);
```
此代码生成了一些示例数据,然后使用一维线性回归对数据进行建模。
回归方程的系数将被计算,并且原始数据与回归线将在图上显示。
请注意,这只是一个简单的示例,实际上,你可能需要根据你的具体问题修改代码。
数学建模 第3讲 MATLAB的具体实例
解答
用MATLAB优化工具箱解线性规划
1、模型: min z=cX s.t. AX b 命令:x=linprog(c,A,b)
2、模型:min z=cX s.t. AX b Aeq X beq 命令:x=linprog(c,A,b,Aeq,beq)
AX b 存在,则令A=[ ],b=[ ]. 注意:若没有不等式:
三、模型的建立与分析
1.总体风险用所投资的Si中最大的一个风险来衡量,即max{ qixi|i=1,2,…n}
2.购买 Si 所付交易费是一个分段函数,即 pixi xi>ui 交易费 = piui xi≤ui 而题目所给定的定值 ui(单位:元)相对总投资 M 很小, piui 更小, 可以忽略不计,这样购买 Si 的净收益为(r i-pi)xi
五、 结果分析 1.风险大,收益也大。
2.当投资越分散时,投资者承担的风险越小,这与题意一致。即: 冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资。
3.曲线上的任一点都表示该风险水平的最大可能收益和该收益要求的最 小风险。对于不同风险的承受能力,选择该风险水平下的最优投资组合。 4.在a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长 很快。在这一点右边,风险增加很大时,利润增长很缓慢,所以对于风险和 收益没有特殊偏好的投资者来说,应该选择曲线的拐点作为最优投资组合, 大约是a*=0.6%,Q*=20% ,所对应投资方案为: 风险度 收益 x0 x1 x2 x3 x4 0.0060 0.2019 0 0.2400 0.4000 0.1091 0.2212
8 4 x1 8 3 x2 32 x1 24 x2
因检验员错检而造成的损失为:
如何用MATLAB进行数学建模
如何用MATLAB进行数学建模下面是一个关于如何用MATLAB进行数学建模的文章范例:MATLAB是一种强大的数学软件工具,广泛应用于各种数学建模问题的解决。
通过合理利用MATLAB的功能和特性,可以更加高效地进行数学建模,并得到准确的结果。
本文将介绍如何使用MATLAB进行数学建模,并给出一些实际例子。
一、数学建模的基本步骤数学建模是指将实际问题转化为数学模型,并利用数学方法对其进行求解和分析的过程。
在使用MATLAB进行数学建模之前,我们需要明确问题的具体要求,然后按照以下基本步骤进行操作:1. 理解问题:深入了解问题背景、影响因素以及目标要求,确保对问题有一个清晰的认识。
2. 建立模型:根据问题的特性,选择合适的数学模型,并将问题转化为相应的数学表达式。
3. 编写MATLAB代码:利用MATLAB的计算功能和算法库,编写用于求解数学模型的代码。
4. 数据处理和结果分析:在获得计算结果后,根据需要进行数据处理和结果分析,评估模型的准确性和可行性。
二、MATLAB的数学建模工具MATLAB提供了一系列用于数学建模的工具箱和函数,这些工具可以帮助我们快速构建数学模型,并进行求解。
下面是一些常用的数学建模工具:1. 符号计算工具箱:MATLAB的符号计算工具箱可以实现符号运算,用于建立和求解复杂的数学表达式。
2. 优化工具箱:优化工具箱可以用于求解多种优化问题,如线性规划、非线性规划、整数规划等。
3. 数值解工具箱:数值解工具箱提供了各种数值方法和算法,用于求解微分方程、积分方程、差分方程等数学问题。
4. 统计工具箱:统计工具箱可以进行统计建模和分析,包括假设检验、回归分析、时间序列分析等。
5. 控制系统工具箱:控制系统工具箱用于建立和分析控制系统模型,包括经典控制和现代控制方法。
三、数学建模实例为了更好地展示使用MATLAB进行数学建模的过程,我们给出一个实际的数学建模例子:求解物体的自由落体运动。
数据建模常规方法的Matlab实现(实例)
MATLAB(liti21)
3)运算结果为: f =0.0043 0.0051 0.0056 0.0059
0.0062 0.0062 0.0063 0.0063 x = 0.0063 -0.0034 0.2542
0.0061 0.0063
4)结论:a=0.0063, b=-0.0034, k=0.2542
的。
1. lsqcurvefit
已知数据点: xdata=(xdata1,xdata2,…,xdatan),
ydata=(ydata1,ydata2,…,ydatan) lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T 中的参变量x(向量),使得
6 0.28 15
-0.02
解:(1)画出散点图: x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6; 14.4;15]; y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02]; plot(x,y,'r*')
matlab数学建模pdf
matlab数学建模pdfMATLAB是一种高级编程语言和交互式环境,主要用于数值计算、数据分析和可视化。
它在数学建模方面具有广泛的应用,因为它提供了一个方便的编程环境,支持矩阵和数组操作、函数和方程求解、数据分析和可视化等功能。
以下是一些使用MATLAB进行数学建模的示例:1.线性回归模型:MATLAB提供了一个名为`fitlm`的函数,用于拟合线性回归模型。
以下是一个简单的示例:```matlab%创建自变量和因变量数据x=[1,2,3,4,5];y=[2.2,2.8,3.6,4.5,5.1];%拟合线性回归模型lm=fitlm(x,y);%显示模型摘要summary(lm)```2.非线性最小二乘法拟合:MATLAB提供了一个名为`fitnlm`的函数,用于拟合非线性最小二乘法模型。
以下是一个简单的示例:```matlab%创建自变量和因变量数据x=[1,2,3,4,5];y=[1.2,2.5,3.7,4.6,5.3];%定义非线性模型函数modelfun=@(params,xdata) params(1)*exp(-params(2)*xdata)+params(3); %拟合非线性最小二乘法模型startPoint=[1,1,1];%初始参数值options=optimset('Display','off');%不显示优化过程信息lm=fitnlm(x,y,modelfun,startPoint,options); %显示模型摘要summary(lm)```3.微分方程求解:MATLAB提供了一个名为`ode45`的函数,用于求解常微分方程。
以下是一个简单的示例:```matlab%定义微分方程dy/dx=f(x,y)f=@(x,y)-0.5*y;%初始条件和时间跨度y0=1;tspan=[0,10];%使用ode45进行求解[t,y]=ode45(f,tspan,y0);%可视化结果plot(t,y(:,1))%y是解的矩阵,(:,1)表示取第一列数据作为纵坐标进行绘图xlabel('Time(s)')ylabel('Solution')```。
Matlab在数学建模中的应用(模型求解)
qk,t与 Q(k,t)间的绝对误差
e Qt qt
e=Q-q(1:length(Q));
相对误差
E
e
Qt
E=e./Q;
整理一下
停车场问题 (MCM 87B题)
在新英格兰 地区一个镇上,位 于街角处的一个 停车场的场主要 设计停车场的安 排,即设计”在地 上的线应怎样划 法”。这个停车场 是长方形的,长 200英尺,宽100 英尺。
怎样用matlab求解这个模型呢??
分析:对如上面的线形规划问题,可用linprog()函数求解。
模型
Max S 5x 6y s.t. 2x 3y 1400
x 6y 2400 4x 2y 2000 x 0, y 0, x, y z
对应matlab语句
f=[-5,-6]; A=[2 3 b=[1400
n
for d=2:length(Q);
Q1n Qi
Q1=cumQs(udm)=(QQ)(d-1)+Q(d);
i 1
得到
end
1 2
Q12
Q11 ,1
1 2
Q13
Q12 ,1
B ...............................
...............................
甲、乙产品各多少件),使获得利润最大,并求出最大利
润。
品 原材料 能源消耗 劳动力 利润
种 (千克) (百元) (人) (千元)
甲2
1
4
5
乙3
6
2
6
解:设安排生产甲产品x 件,乙产品y 件,相应的利 润为S。则此问题的数学模型为:
Max S 5x 6 y s.t. 2x 3y 1400
MATLAB数据分析与可视化案例展示
MATLAB数据分析与可视化案例展示概述:在如今的数据驱动时代,数据分析和可视化成为了重要的技能。
MATLAB作为一款强大的数学建模和计算软件,提供了丰富的功能来帮助研究人员、工程师和科学家进行数据分析和可视化。
本文将以实际案例为基础,展示MATLAB在数据分析和可视化方面的强大能力。
案例一:销售数据分析假设我们是一家电子产品公司,我们拥有一定数量的销售数据,包括销售额、产品种类、销售地区等信息。
现在,我们希望通过分析这些数据来了解产品的销售情况,并制定相关策略。
首先,我们可以使用MATLAB的数据导入功能导入销售数据,并进行初步的数据清洗。
接下来,我们可以使用MATLAB的数据统计和可视化工具来进行分析。
例如,我们可以通过绘制销售额的时间序列图来观察销售趋势。
MATLAB提供了丰富的绘图函数,可以根据需要选择合适的图表类型,并进行个性化设置。
通过观察时间序列图,我们可以发现销售额的季度波动和增长趋势,进而为制定销售策略提供参考。
另外,我们还可以利用MATLAB的统计分析功能对销售数据进行更深入的分析。
例如,我们可以使用MATLAB的线性回归模型拟合销售数据,预测未来销售额,并评估拟合程度。
此外,我们还可以通过绘制散点图来观察销售额与其他因素(如产品种类、销售地区)之间的关系,进一步挖掘潜在的市场机会和问题。
通过以上分析,我们可以得出一些有益的结论和建议,如推出针对不同地区和产品种类的定制化销售策略,加强对新增潜在市场的开拓,优化产品组合等。
案例二:气象数据分析与可视化气象数据是一种典型的多维数据,其中包括温度、湿度、气压等多种观测指标。
使用MATLAB可以对气象数据进行分析和可视化,进而深入了解气象变化规律,为气象预测、灾害预警等提供支持。
首先,我们可以使用MATLAB的数据导入工具导入气象观测数据,并进行数据清洗和预处理。
接下来,我们可以使用MATLAB的绘图函数来绘制各种气象图表。
例如,我们可以使用MATLAB的等值线图来展示温度分布情况。
如何使用Matlab进行系统建模和仿真
如何使用Matlab进行系统建模和仿真一、引言在现代科学和工程领域,系统建模和仿真是解决实际问题和优化设计的重要手段之一。
Matlab作为一种功能强大的工具,被广泛应用于系统建模和仿真。
本文将介绍如何使用Matlab进行系统建模和仿真的基本步骤,并通过实例演示其应用。
二、系统建模系统建模是将实际系统抽象成数学或逻辑模型的过程。
在Matlab中,可以使用符号表达式或差分方程等方式对系统进行建模。
1. 符号表达式建模符号表达式建模是一种基于符号计算的方法,可以方便地处理复杂的数学运算。
在Matlab中,可以使用符号工具箱来进行符号表达式建模。
以下是一个简单的例子:```matlabsyms xy = 2*x + 1;```在上述例子中,定义了一个符号变量x,并使用符号表达式2*x + 1建立了y的表达式。
通过符号工具箱提供的函数,可以对y进行求导、积分等操作,从而分析系统的特性。
2. 差分方程建模差分方程建模是一种基于离散时间的建模方法,适用于描述离散时间系统。
在Matlab中,可以使用差分方程来描述系统的行为。
以下是一个简单的例子:```matlabn = 0:10;x = sin(n);y = filter([1 -0.5], 1, x);```在上述例子中,定义了一个离散时间信号x,通过filter函数可以求得系统响应y,其中[1 -0.5]表示系统的差分方程系数。
三、系统仿真系统仿真是利用计算机模拟系统的运行过程,通过数值计算得到系统的输出响应。
在Matlab中,可以使用Simulink工具箱进行系统仿真。
1. 搭建系统框图在Simulink中,我们可以使用各种模块来搭建系统的框图。
例如,可以使用连续时间积分器模块和乘法器模块来构建一个简单的比例积分控制器:![control_system](control_system.png)在上图中,积分器模块表示对输入信号积分,乘法器模块表示对输入信号进行放大。
利用Matlab解决常见数学问题的案例分析
利用Matlab解决常见数学问题的案例分析概述:Matlab是一款流行的科学软件,广泛应用于数学建模、数据分析、图像处理等领域。
本文将通过几个实际案例,介绍如何利用Matlab解决常见的数学问题,并分析其解决方法和效果。
案例一:线性方程组的求解线性方程组是数学中常见的问题之一。
假设有如下线性方程组:3x + 2y = 14x - 3y = 5可以使用Matlab中的线性方程组求解函数`linsolve`来求解。
首先,定义系数矩阵A和常数矩阵b,并调用`linsolve`函数求解方程组:```matlabA = [3 2; 4 -3];b = [1; 5];x = linsolve(A, b);```运行上述代码后,可以得到方程组的解x为:x = 3y = -2案例二:函数曲线绘制Matlab具有强大的绘图功能,可以绘制各种函数曲线。
例如,我们可以绘制正弦函数sin(x)在区间[-2π,2π]上的曲线。
首先,定义x的取值范围,并计算对应的y 值:```matlabx = -2*pi:0.1:2*pi;y = sin(x);```接下来,使用`plot`函数将曲线绘制出来:```matlabplot(x, y);```运行代码后,可以得到正弦函数的曲线图。
案例三:最小二乘拟合最小二乘拟合是一种常见的曲线拟合方法,用于将一组数据拟合成一条曲线。
假设有一组离散的数据点,我们希望找到一个曲线来拟合这些数据。
在Matlab中,可以使用`polyfit`函数进行最小二乘拟合。
例如,假设有一组数据:x = [1 2 3 4 5];y = [0.5 2.5 2 4 3.5];可以使用`polyfit`函数进行线性拟合:```matlabp = polyfit(x, y, 1);```其中,第一个参数x是自变量的取值,第二个参数y是因变量的取值,第三个参数1表示进行一次多项式拟合。
拟合的结果保存在向量p中,p(1)为拟合曲线的斜率,p(2)为截距。
matlab数学建模实例
m a t l a b数学建模实例集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#第四周3.function y=mj()for x0=0::8x1=x0^*x0^2+*;if (abs(x1)<x0endend4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度(分别取10-3、10-5、10-8)。
简单迭代法:function y=jddd(x0)x1=(20+10*x0-2*x0^2-x0^3)/20;k=1;while (abs(x1-x0)>=x0=x1;x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1;endx1k埃特金法:function y=etj(x0)x1=(20-2*x0^2-x0^3)/10;x2=(20-2*x1^2-x1^3)/10;x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=1;while (abs(x3-x0)>=x0=x3;x1=(20-2*x0^2-x0^3)/10;x2=(20-2*x1^2-x1^3)/10;x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1;endx3k牛顿法:function y=newton(x0)x1=x0-fc(x0)/df(x0);k=1;while (abs(x1-x0)>=x0=x1;x1=x0-fc(x0)/df(x0);k=k+1;endx1kfunction y=fc(x)y=x^3+2*x^2+10*x-20;function y=df(x)y=3*x^2+4*x+10;第六周1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。
消去法:x=a\d或[L,U]=lu(a);x=inv(U)inv(L)dJacobi迭代法:function s=jacobi(a,d,x0)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);C=inv(D);B=C*(L+U);G=C*d;s=B*x0+G;n=1;while norm(s-x0)>=x0=s;s=B*x0+G;n=n+1;endnSeidel迭代法:function s=seidel(a,d,x0)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);C=inv(D-L);B=C*U;G=C*d;s=B*x0+G;n=1;while norm(s-x0)>=x0=s;s=B*x0+G;n=n+1;endn松弛法:function s=loose(a,d,x0,w)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);C=inv(D-w*L);B=C*((1-w)*D+w*U);G=w*C*d;s=B*x0+G;n=1;while norm(s-x0)>=x0=s;s=B*x0+G;n=n+1;endn2.练习MATLAB的常用矩阵语句,就龙格现象函数(p88)练习插值语句interp, spline,并比较。
MATLAB中的数学建模方法及应用
MATLAB中的数学建模方法及应用引言数学建模作为一门重要的学科,已经成为了现代科学研究和工程实践中不可或缺的一部分。
而在数学建模过程中,数值计算和数据分析是关键步骤之一。
MATLAB作为一种强大的数学计算软件,在数学建模领域得到了广泛应用。
本文将介绍MATLAB中常用的数学建模方法,并探讨一些实际应用案例。
一、线性模型线性模型是数学建模中最基础的一种模型,它假设系统的响应是线性的。
在MATLAB中,我们可以通过矩阵运算和线性代数的知识来构建和求解线性模型。
例如,我们可以使用MATLAB中的线性回归函数来拟合一条直线到一组数据点上,从而得到一个线性模型。
二、非线性模型与线性模型相对应的是非线性模型。
非线性模型具有更强的表达能力,可以描述更为复杂的系统。
在MATLAB中,我们可以利用优化工具箱来拟合非线性模型。
例如,我们可以使用MATLAB中的非线性最小二乘函数来优化模型参数,使得模型与实际数据拟合程度最好。
三、微分方程模型微分方程模型在科学研究和工程实践中广泛应用。
在MATLAB中,我们可以使用ODE工具箱来求解常微分方程(ODE)。
通过定义初始条件和微分方程的表达式,MATLAB可以使用多种数值方法来求解微分方程模型。
例如,我们可以利用MATLAB中的欧拉法或者龙格-库塔法来求解微分方程。
四、偏微分方程模型偏微分方程(PDE)模型是描述空间上的变化的数学模型。
在MATLAB中,我们可以使用PDE工具箱来求解常见的偏微分方程模型。
通过定义边界条件和初始条件,MATLAB可以通过有限差分或有限元等方法来求解偏微分方程模型。
例如,我们可以利用MATLAB中的热传导方程求解器来模拟物体的温度分布。
五、曲线拟合与数据插值曲线拟合和数据插值是数学建模过程中常见的任务。
在MATLAB中,我们可以使用拟合和插值工具箱来实现这些任务。
通过输入一系列数据点,MATLAB可以通过多项式拟合或者样条插值等方法来生成一个模型函数。
MATLAB数学建模14个范例
1.整数规划的蒙特卡洛解法2015-06-10 (2)2. 罚函数法 2015-06-11 (3)3. 层次分析 2015-06-12 (4)4. 粒子群优化算法的寻优算法--非线性函数极值寻优 2015-06-13 (5)5有约束函数极值APSO寻优 2015-06-14 (12)6.模拟退火算法 TSP问题2015-06-15 (17)7. 右端步连续微分方程求解2015-06-16 (19)8. 多元方差分析 2015-06-17 (22)9. 基于MIV的神经网络变量筛选 2015-06-18 (25)10. RBF网络的回归--非线性函数回归的实现 2015-06-19 (29)11. 极限学习机在回归拟合中的应用 2015-06-20 (32)12. 极限学习机在分类中的应用 2015-06-21 (34)13. 基于PSO改进策略 2015-06-22 (37)14. 神经网络遗传算法函数极值寻优 2015-06-23 (46)1.1.整数规划的蒙特卡洛解法2015-06-10 已知非线性整数规划为:⎪⎪⎪⎩⎪⎪⎪⎨⎧≤++≤++≤++++≤++++=≤≤-----++++=200520062800622400)5,....,1(9902328243max 54233216432154321543212524232221x x x x x x x x x x x x x x x x i x x x x x x x x x x x z i如果用显枚举试探,共需要计算100^5=10^10个点,其计算量非常大。
然而应用蒙特卡洛去随机模拟计算10^6个点,便可以找到满意解,那么这种方法的可信度究竟怎么样呢? 下面就分析随机采样10^6个点计算时,应用概率理论估计下可信度。
不是一般性,假设一个整数规划的最优点不是孤立的奇点。
假设目标函数落在高值区的概率分别为0.01,0.00001,则当计算10^6个点后,有任一个点落在高值区的概率分别为:1-0.99^1000000=0.99...99(100多位) 1-0.99999^1000000=0.999954602解 (1)首先编写M 文件 mengte.m 定义目标函数f 和约束向量g,程序如下:function [f,g]=mengte(x);f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-... x(4)-2*x(5); g=[sum(x)-400x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800 2*x(1)+x(2)+6*x(3)-200 x(3)*x(3)+x(4)+5*x(5)-200];(2)编写M 文件mainint.m 如下求问题的解: rand('state',sum(clock)); p0=0; ticfor i=1:10^5x=99*rand(5,1);x1=floor(x);%向下取整 x2=ceil(x);%向上取整 [f,g]=mengte(x1); if sum(g<=0)==4 if p0<=f x0=x1; p0=f; end end[f,g]=mengte(x2); if sum(g<=0)==4 if p0<=fx0=x2; p0=f; end end end x0,p0Matlab 求解整数规划祥见第二章(优秀教材)2.罚函数法 2015-06-11利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因而也称这种方法为系列无约束最小化技术,简记为SUMT 。
数学建模30种经典模型matlab
一、概述数学建模是数学与实际问题相结合的产物,通过建立数学模型来解决现实生活中的复杂问题。
Matlab作为一个强大的数学计算工具,在数学建模中具有重要的应用价值。
本文将介绍30种经典的数学建模模型,以及如何利用Matlab对这些模型进行建模和求解。
二、线性规划模型1. 线性规划是数学建模中常用的一种模型,用于寻找最优化的解决方案。
在Matlab中,可以使用linprog函数对线性规划模型进行建模和求解。
2. 举例:假设有一家工厂生产两种产品,分别为A和B,要求最大化利润。
产品A的利润为$5,产品B的利润为$8,而生产每单位产品A 和B分别需要8个单位的原料X和10个单位的原料Y。
此时,可以建立线性规划模型,使用Matlab求解最大化利润。
三、非线性规划模型3. 非线性规划是一类更加复杂的规划问题,其中目标函数或约束条件存在非线性关系。
在Matlab中,可以使用fmincon函数对非线性规划模型进行建模和求解。
4. 举例:考虑一个有约束条件的目标函数,可以使用fmincon函数在Matlab中进行建模和求解。
四、整数规划模型5. 整数规划是一种特殊的线性规划问题,其中决策变量被限制为整数。
在Matlab中,可以使用intlinprog函数对整数规划模型进行建模和求解。
6. 举例:假设有一家工厂需要决定购物哪种机器设备,以最大化利润。
设备的成本、维护费用和每台设备能生产的产品数量均为已知条件。
可以使用Matlab的intlinprog函数对该整数规划模型进行建模和求解。
五、动态规划模型7. 动态规划是一种数学优化方法,常用于多阶段决策问题。
在Matlab 中,可以使用dynamic programming toolbox对动态规划模型进行建模和求解。
8. 举例:考虑一个多阶段生产问题,在每个阶段都需要做出决策以最大化总利润。
可以使用Matlab的dynamic programming toolbox对该动态规划模型进行建模和求解。
数学建模案例MATLAB实用程序百例
实例1:三角函数曲线(1)function shili01h0=figure('toolbar','none',... 'position',[19856 350 300],...'name','实例01');h1=axes('parent',h0,...'visible','off');x=-pi:0.05:pi; y=sin(x);plot(x,y);xlabel('自变量X');ylabel('函数值Y');title('SIN( )函数曲线'); grid on实例2:三角函数曲线(2)function shili02h0=figure('toolbar','none',... 'position',[200 150 450 350],...'name','实例02');x=-pi:0.05:pi;y=sin(x)+cos(x);plot(x,y,'-*r','linewidth',1); grid onxlabel('自变量X'); ylabel('函数值Y');title('三角函数');实例3:图形的叠加function shili03h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例03');x=-pi:0.05:pi; y1=sin(x); y2=cos(x); plot(x,y1,...'-*r',...x,y2,...'--og');grid on xlabel('自变量X');ylabel('函数值Y');title('三角函数');实例4:双y轴图形的绘制function shili04h0=figure('toolbar','none',... 'position',[200 150 450 250],...'name','实例04'); x=0:900;a=1000;b=0.005;y1=2*x; y2=cos(b*x);[haxes,hline1,hline2]=plotyy(x,y1,x,y2,'semilogy','plot'); axes(haxes(1))ylabel('semilog plot');axes(haxes(2)) ylabel('linear plot');实例5:单个轴窗口显示多个图形function shili05h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例05'); t=0:pi/10:2*pi; [x,y]=meshgrid(t); subplot(2,2,1)plot(sin(t),cos(t)) axis equal subplot(2,2,2) z=sin(x)-cos(y);plot(t,z)axis([0 2*pi -2 2]) subplot(2,2,3) h=sin(x)+cos(y); plot(t,h)axis([0 2*pi -2 2]) subplot(2,2,4) g=(sin(x).^2)-(cos(y).^2);plot(t,g)axis([0 2*pi -1 1])实例6:图形标注function shili06h0=figure('toolbar','none',...'position',[200 150 450 400],...'name','实例06'); t=0:pi/10:2*pi; h=plot(t,sin(t));xlabel('t=0到2\pi','fontsize',16); ylabel('sin(t)','fontsize',16);title('\it{从0to2\pi 的正弦曲线}','fontsize',16) x=get(h,'xdata');y=get(h,'ydata'); imin=find(min(y)==y); imax=find(max(y)==y); text(x(imin),y(imin),...['\leftarrow最小值=',num2str(y(imin))],... 'fontsize',16)text(x(imax),y(imax),...['\leftarrow最大值=',num2str(y(imax))],... 'fontsize',16)实例7:条形图形function shili07h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例07');tiao1=[562 548 224 545 41 445 745 512];tiao2=[47 48 57 58 54 52 65 48]; t=0:7;bar(t,tiao1) xlabel('X轴'); ylabel('TIAO1值');h1=gca; h2=axes('position',get(h1,'position'));plot(t,tiao2,'linewidth',3)set(h2,'yaxislocation','right','color','none','xticklabel',[])实例8:区域图形function shili08h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例08');x=91:95;profits1=[88 75 84 93 77];profits2=[51 64 54 56 68];profits3=[42 54 34 25 24];profits4=[26 38 18 15 4];area(x,profits1,'facecolor',[0.5 0.9 0.6],... 'edgecolor','b',...'linewidth',3) hold onarea(x,profits2,'facecolor',[0.9 0.85 0.7],... 'edgecolor','y',...'linewidth',3) hold onarea(x,profits3,'facecolor',[0.3 0.6 0.7],... 'edgecolor','r',...'linewidth',3) hold onarea(x,profits4,'facecolor',[0.6 0.5 0.9],... 'edgecolor','m',...'linewidth',3) hold offset(gca,'xtick',[91:95])set(gca,'layer','top') gtext('\leftarrow第一季度销量')gtext('\leftarrow第二季度销量') gtext('\leftarrow第三季度销量')gtext('\leftarrow第四季度销量') xlabel('年','fontsize',16);ylabel('销售量','fontsize',16);实例9:饼图的绘制function shili09h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例09'); t=[54 21 35; 68 54 35;45 25 12;48 68 45;68 54 69];x=sum(t);h=pie(x); textobjs=findobj(h,'type','text');str1=get(textobjs,{'string'});val1=get(textobjs,{'extent'}); oldext=cat(1,val1{:}); names={'商品一:';'商品二: ';'商品三:'}; str2=strcat(names,str1);set(textobjs,{'string'},str2) val2=get(textobjs,{'extent'}); newext=cat(1,val2{:}); offset=sign(oldext(:,1)).*(newext(:,3)-oldext(:,3))/2;pos=get(textobjs,{'position'});textpos=cat(1,pos{:}); textpos(:,1)=textpos(:,1)+offset;set(textobjs,{'position'},num2cell(textpos,[3,2]))实例10:阶梯图function shili10h0=figure('toolbar','none',...'position',[200 150 450 400],...'name','实例10'); a=0.01;b=0.5; t=0:10;f=exp(-a*t).*sin(b*t); stairs(t,f)hold on plot(t,f,':*') hold offglabel='函数e^{-(\alpha*t)}sin\beta*t的阶梯图'; gtext(glabel,'fontsize',16)xlabel('t=0:10','fontsize',16)axis([0 10 -1.2 1.2])实例11:枝干图function shili11h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例11'); x=0:pi/20:2*pi; y1=sin(x);y2=cos(x); h1=stem(x,y1+y2); hold onh2=plot(x,y1,'^r',x,y2,'*g'); hold offh3=[h1(1);h2];legend(h3,'y1+y2','y1=sin(x)','y2=cos(x)') xlabel('自变量X'); ylabel('函数值Y'); title('正弦函数与余弦函数的线性组合'); 实例12:罗盘图function shili12h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例12'); winddirection=[54 24 65 84256 12 235 62125 324 34 254];windpower=[2 5 5 36 8 127 6 14 10 8];rdirection=winddirection*pi/180;[x,y]=pol2cart(rdirection,windpower); compass(x,y);desc={'风向和风力', '北京气象台', '10月1日0:00到', '10月1日12:00'};gtext(desc)实例13:轮廓图function shili13h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例13'); [th,r]=meshgrid((0:10:360)*pi/180,0:0.05:1); [x,y]=pol2cart(th,r);z=x+i*y;f=(z.^4-1).^(0.25);contour(x,y,abs(f),20) axis equalxlabel('实部','fontsize',16);ylabel('虚部','fontsize',16);h=polar([0 2*pi],[0 1]); delete(h)hold on contour(x,y,abs(f),20)实例14:交互式图形function shili14h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例14');axis([0 10 0 10]);hold on x=[];y=[]; n=0;disp('单击鼠标左键点取需要的点'); disp('单击鼠标右键点取最后一个点');but=1;while but==1[xi,yi,but]=ginput(1);plot(xi,yi,'bo') n=n+1;disp('单击鼠标左键点取下一个点'); x(n,1)=xi;y(n,1)=yi;end t=1:n;ts=1:0.1:n;xs=spline(t,x,ts); ys=spline(t,y,ts); plot(xs,ys,'r-'); hold off实例14:交互式图形function shili14 h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例14'); axis([0 10 0 10]);hold on x=[];y=[]; n=0;disp('单击鼠标左键点取需要的点'); disp('单击鼠标右键点取最后一个点');but=1;while but==1[xi,yi,but]=ginput(1);plot(xi,yi,'bo') n=n+1;disp('单击鼠标左键点取下一个点'); x(n,1)=xi;y(n,1)=yi;end t=1:n;ts=1:0.1:n;xs=spline(t,x,ts); ys=spline(t,y,ts); plot(xs,ys,'r-'); hold off实例15:变换的傅立叶函数曲线function shili15h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例15'); axis equal m=moviein(20,gcf);set(gca,'nextplot','replacechildren')h=uicontrol('style','slider','position',...[100 10 500 20],'min',1,'max',20)for j=1:20plot(fft(eye(j+16))) set(h,'value',j)m(:,j)=getframe(gcf);end clf;axes('position',[0 0 1 1]); movie(m,30)实例16:劳伦兹非线形方程的无序活动function shili15 h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例15'); axis equal m=moviein(20,gcf);set(gca,'nextplot','replacechildren')h=uicontrol('style','slider','position',...[100 10 500 20],'min',1,'max',20)for j=1:20plot(fft(eye(j+16)))set(h,'value',j)m(:,j)=getframe(gcf);end clf;axes('position',[0 0 1 1]); movie(m,30)实例17:填充图function shili17h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例17');t=(1:2:15)*pi/8; x=sin(t);y=cos(t); fill(x,y,'r') axis square offtext(0,0,'STOP',... 'color',[1 1 1],...'fontsize',50,... 'horizontalalignment','center')实例18:条形图和阶梯形图function shili18h0=figure('toolbar','none',... 'position',[200 150 450 250],...'name','实例18'); subplot(2,2,1)x=-3:0.2:3;y=exp(-x.*x); bar(x,y)title('2-D Bar Chart') subplot(2,2,2)x=-3:0.2:3;y=exp(-x.*x);bar3(x,y,'r')title('3-D Bar Chart') subplot(2,2,3)x=-3:0.2:3;y=exp(-x.*x); stairs(x,y) title('Stair Chart') subplot(2,2,4)x=-3:0.2:3;y=exp(-x.*x); barh(x,y)title('Horizontal Bar Chart')实例19:三维曲线图function shili19h0=figure('toolbar','none',...'position',[200 150 450 400],...'name','实例19'); subplot(2,1,1) x=linspace(0,2*pi); y1=sin(x);y2=cos(x); y3=sin(x)+cos(x);z1=zeros(size(x)); z2=0.5*z1;z3=z1; plot3(x,y1,z1,x,y2,z2,x,y3,z3) grid onxlabel('X轴');ylabel('Y轴');zlabel('Z轴'); title('Figure1:3-D Plot') subplot(2,1,2)x=linspace(0,2*pi);y1=sin(x);y2=cos(x); y3=sin(x)+cos(x); z1=zeros(size(x)); z2=0.5*z1;z3=z1; plot3(x,z1,y1,x,z2,y2,x,z3,y3) grid onxlabel('X轴');ylabel('Y轴');zlabel('Z轴'); title('Figure2:3-D Plot')实例20:图形的隐藏属性function shili20h0=figure('toolbar','none',...'position',[200 150 450 300],...'name','实例20'); subplot(1,2,1) [x,y,z]=sphere(10); mesh(x,y,z)axis off title('Figure1:Opaque') hidden on subplot(1,2,2)[x,y,z]=sphere(10); mesh(x,y,z) axis off title('Figure2:Transparent') hidden off实例21PEAKS函数曲线function shili21h0=figure('toolbar','none',...'position',[200 100 450 450],...'name','实例21');[x,y,z]=peaks(30); subplot(2,1,1) x=x(1,:);y=y(:,1);i=find(y>0.8&y<1.2); j=find(x>-0.6&x<0.5);z(i,j)=nan*z(i,j); surfc(x,y,z)xlabel('X轴');ylabel('Y轴');zlabel('Z轴'); title('Figure1:surfc函数形成的曲面')subplot(2,1,2) x=x(1,:);y=y(:,1);i=find(y>0.8&y<1.2); j=find(x>-0.6&x<0.5); z(i,j)=nan*z(i,j); surfl(x,y,z) xlabel('X轴');ylabel('Y轴');zlabel('Z轴'); title('Figure2:surfl函数形成的曲面')实例22:片状图function shili22h0=figure('toolbar','none',...'position',[200 150 550 350],...'name','实例22'); subplot(1,2,1) x=rand(1,20);y=rand(1,20); z=peaks(x,y*pi); t=delaunay(x,y)trimesh(t,x,y,z) hidden offtitle('Figure1:Triangular Surface Plot'); subplot(1,2,2)x=rand(1,20);y=rand(1,20); z=peaks(x,y*pi); t=delaunay(x,y); trisurf(t,x,y,z) title('Figure1:Triangular Surface Plot');实例23:视角的调整function shili23h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例23');x=-5:0.5:5;[x,y]=meshgrid(x); r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r;subplot(2,2,1) surf(x,y,z) xlabel('X-axis')ylabel('Y-axis')zlabel('Z-axis') title('Figure1') view(-37.5,30)subplot(2,2,2) surf(x,y,z) xlabel('X-axis')ylabel('Y-axis')zlabel('Z-axis') title('Figure2') view(-37.5+90,30)subplot(2,2,3) surf(x,y,z)xlabel('X-axis')ylabel('Y-axis')zlabel('Z-axis') title('Figure3') view(-37.5,60)subplot(2,2,4) surf(x,y,z)xlabel('X-axis')ylabel('Y-axis')zlabel('Z-axis') title('Figure4') view(180,0)实例24:向量场的绘制function shili24h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例24'); subplot(2,2,1) z=peaks;ribbon(z) title('Figure1')subplot(2,2,2) [x,y,z]=peaks(15); [dx,dy]=gradient(z,0.5,0.5); contour(x,y,z,10) hold on quiver(x,y,dx,dy) hold off title('Figure2') subplot(2,2,3) [x,y,z]=peaks(15);[nx,ny,nz]=surfnorm(x,y,z); surf(x,y,z)hold on quiver3(x,y,z,nx,ny,nz) hold off title('Figure3') subplot(2,2,4) x=rand(3,5);y=rand(3,5);z=rand(3,5);c=rand(3,5);fill3(x,y,z,c) grid on title('Figure4')实例25:灯光定位function shili25h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例25'); vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;12 2;2 2 2;2 1 2];fac=[1 2 3 4;2 6 7 3;4 3 7 8;15 8 4;1 2 6 5;5 6 7 8];grid off sphere(36)h=findobj('type','surface'); set(h,'facelighting','phong',... 'facecolor',...'interp',...'edgecolor',[0.4 0.4 0.4],... 'backfacelighting',...'lit') hold onpatch('faces',fac,'vertices',vert,... 'facecolor','y');light('position',[1 3 2]);light('position',[-3 -1 3]); material shinyaxis vis3d off hold off 实例26:柱状图function shili26h0=figure('toolbar','none',...'position',[200 50 450 450],...'name','实例26'); subplot(2,1,1)x=[5 2 18 7 39 8 65 5 54 3 2];bar(x) xlabel('X轴');ylabel('Y轴');title('第一子图'); subplot(2,1,2) y=[5 2 18 7 39 8 65 5 54 3 2];barh(y) xlabel('X轴');ylabel('Y轴');title('第二子图');实例27:设置照明方式function shili27h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例27'); subplot(2,2,1)sphere shading flat camlight leftcamlight right lighting flat colorbaraxis off title('Figure1') subplot(2,2,2) sphereshading flat camlight left camlight right lighting gouraud colorbar axis off title('Figure2') subplot(2,2,3) sphereshading interp camlight right camlight left lighting phongcolorbar axis offtitle('Figure3') subplot(2,2,4) sphereshading flat camlight left camlight right lighting none colorbaraxis off title('Figure4')实例28:羽状图function shili28h0=figure('toolbar','none',...'position',[200 150 450 350],...'name','实例28'); subplot(2,1,1) alpha=90:-10:0;r=ones(size(alpha)); m=alpha*pi/180; n=r*10; [u,v]=pol2cart(m,n);feather(u,v) title('羽状图') axis([0 20 0 10]) subplot(2,1,2) t=0:0.5:10;x=0.05+i;y=exp(-x*t); feather(y)title('复数矩阵的羽状图')实例29:立体透视(1)function shili29h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例29'); [x,y,z]=meshgrid(-2:0.1:2,...-2:0.1:2,...-2:0.1:2);v=x.*exp(-x.^2-y.^2-z.^2); grid onfor i=-2:0.5:2;h1=surf(linspace(-2,2,20),...linspace(-2,2,20),... zeros(20)+i);rotate(h1,[1 -1 1],30)dx=get(h1,'xdata');dy=get(h1,'ydata');dz=get(h1,'zdata'); delete(h1)slice(x,y,z,v,[-2 2],2,-2) hold on slice(x,y,z,v,dx,dy,dz) hold off axis tightview(-5,10) drawnowend实例30:立体透视(2)function shili30h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例30'); [x,y,z]=meshgrid(-2:0.1:2,...-2:0.1:2,...-2:0.1:2);v=x.*exp(-x.^2-y.^2-z.^2); [dx,dy,dz]=cylinder; slice(x,y,z,v,[-2 2],2,-2) for i=-2:0.2:2h=surface(dx+i,dy,dz); rotate(h,[1 0 0],90)xp=get(h,'xdata');yp=get(h,'ydata');zp=get(h,'zdata'); delete(h)hold on hs=slice(x,y,z,v,xp,yp,zp); axis tightxlim([-3 3])view(-10,35) drawnow delete(hs)hold offend实例31:表面图形function shili31h0=figure('toolbar','none',...'position',[200 150 550 250],...'name','实例31'); subplot(1,2,1) x=rand(100,1)*16-8;y=rand(100,1)*16-8; r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r;xlin=linspace(min(x),max(x),33); ylin=linspace(min(y),max(y),33); [X,Y]=meshgrid(xlin,ylin); Z=griddata(x,y,z,X,Y,'cubic'); mesh(X,Y,Z)axis tight hold onplot3(x,y,z,'.','Markersize',20) subplot(1,2,2)k=5;n=2^k-1;theta=pi*(-n:2:n)/n; phi=(pi/2)*(-n:2:n)'/n; X=cos(phi)*cos(theta); Y=cos(phi)*sin(theta); Z=sin(phi)*ones(size(theta));colormap([0 0 0;1 1 1]) C=hadamard(2^k); surf(X,Y,Z,C)axis square实例32:沿曲线移动的小球h0=figure('toolbar','none',...'position',[198 56 408 468],...'name','实例32');h1=axes('parent',h0,... 'position',[0.15 0.45 0.7 0.5],...'visible','on'); t=0:pi/24:4*pi; y=sin(t); plot(t,y,'b') n=length(t);h=line('color',[0 0.5 0.5],...'linestyle','.',... 'markersize',25,...'erasemode','xor'); k1=uicontrol('parent',h0,...'style','pushbutton',...'position',[80 100 50 30],...'string','开始',...'callback',[...'i=1;',...'k=1;,',...'m=0;,',...'while 1,',...'if k==0,',...'break,',...'end,',...'if k~=0,',... 'set(h,''xdata'',t(i),''ydata'',y(i)),',... 'drawnow;,',... 'i=i+1;,',...'if i>n,',...'m=m+1;,',...'i=1;,',...'end,',...'end,',...'end']); k2=uicontrol('parent',h0,...'style','pushbutton',...'position',[180 100 50 30],...'string','停止',...'callback',[...'k=0;,',...'set(e1,''string'',m),',...'p=get(h,''xdata'');,',...'q=get(h,''ydata'');,',... 'set(e2,''string'',p);,',... 'set(e3,''string'',q)']); k3=uicontrol('parent',h0,... 'style','pushbutton',...'position',[280 100 50 30],...'string','关闭',...'callback','close');e1=uicontrol('parent',h0,... 'style','edit',...'position',[60 30 60 20]); t1=uicontrol('parent',h0,...'style','text',...'string','循环次数',...'position',[60 50 60 20]); e2=uicontrol('parent',h0,...'style','edit',... 'position',[180 30 50 20]);t2=uicontrol('parent',h0,... 'style','text',...'string','终点的X坐标值',... 'position',[155 50 100 20]);e3=uicontrol('parent',h0,... 'style','edit',... 'position',[300 30 50 20]); t3=uicontrol('parent',h0,... 'style','text',...'string','终点的Y坐标值',... 'position',[275 50 100 20]);实例33:曲线转换按钮h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例33'); x=0:0.5:2*pi;y=sin(x);h=plot(x,y);grid on huidiao=[...'if i==1,',...'i=0;,',...'y=cos(x);,',...'delete(h),',... 'set(hm,''string'',''正弦函数''),',...'h=plot(x,y);,',...'grid on,',...'else if i==0,',...'i=1;,',...'y=sin(x);,',... 'set(hm,''string'',''余弦函数''),',...'delete(h),',...'h=plot(x,y);,',... 'grid on,',...'end,',... 'end'];hm=uicontrol(gcf,'style','pushbutton',... 'string','余弦函数',... 'callback',huidiao);i=1;set(hm,'position',[250 20 60 20]);set(gca,'position',[0.2 0.2 0.6 0.6]) title('按钮的使用')hold on实例34:栅格控制按钮h0=figure('toolbar','none',... 'position',[200 150 450 250],...'name','实例34'); x=0:0.5:2*pi;y=sin(x);plot(x,y)huidiao1=[...'set(h_toggle2,''value'',0),',... 'grid on,',...];huidiao2=[...'set(h_toggle1,''value'',0),',... 'grid off,',...];h_toggle1=uicontrol(gcf,'style','togglebutton',... 'string','grid on',... 'value',0,...'position',[20 45 50 20],... 'callback',huidiao1);h_toggle2=uicontrol(gcf,'style','togglebutton',... 'string','grid off',... 'value',0,...'position',[20 20 50 20],... 'callback',huidiao2);set(gca,'position',[0.2 0.2 0.6 0.6]) title('开关按钮的使用')实例35:编辑框的使用h0=figure('toolbar','none',...'position',[200 150 350 250],...'name','实例35'); f='Please input the letter'; huidiao1=[...'g=upper(f);,',... 'set(h2_edit,''string'',g),',...];huidiao2=[...'g=lower(f);,',... 'set(h2_edit,''string'',g),',...];h1_edit=uicontrol(gcf,'style','edit',... 'position',[100 200 100 50],...'HorizontalAlignment','left',... 'string','Please input theletter',... 'callback','f=get(h1_edit,''string'');',...'background','w',...'max',5,...'min',1); h2_edit=uicontrol(gcf,'style','edit',...'HorizontalAlignment','left',... 'position',[100 100 100 50],...'background','w',...'max',5,...'min',1); h1_button=uicontrol(gcf,'style','pushbutton',...'string','小写变大写',...'position',[100 45 100 20],...'callback',huidiao1);h2_button=uicontrol(gcf,'style','pushbutton',...'string','大写变小写',...'position',[100 20 100 20],...'callback',huidiao2);实例36:弹出式菜单h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例36'); x=0:0.5:2*pi; y=sin(x);h=plot(x,y); grid onhm=uicontrol(gcf,'style','popupmenu',... 'string',...'sin(x)|cos(x)|sin(x)+cos(x)|exp(-sin(x))',... 'position',[250 20 50 20]);set(hm,'value',1) huidiao=[...'v=get(hm,''value'');,',... 'switch v,',... 'case 1,',...'delete(h),',...'y=sin(x);,',...'h=plot(x,y);,',... 'grid on,',...'case 2,',...'delete(h),',...'y=cos(x);,',...'h=plot(x,y);,',...'grid on,',...'case 3,',...'delete(h),',...'y=sin(x)+cos(x);,',...'h=plot(x,y);,',... 'grid on,',...'case 4,',...'delete(h),',... 'y=exp(-sin(x));,',...'h=plot(x,y);,',... 'grid on,',... 'end'];set(hm,'callback',huidiao) set(gca,'position',[0.2 0.2 0.6 0.6]) title('弹出式菜单的使用')hold on实例37:滑标的使用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例37'); [x,y]=meshgrid(-8:0.5:8); r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r;h0=mesh(x,y,z);h1=axes('position',... [0.2 0.2 0.5 0.5],...'visible','off'); htext=uicontrol(gcf,...'units','points',...'position',[20 30 45 15],...'string','brightness',...'style','text'); hslider=uicontrol(gcf,...'units','points',...'position',[10 10 300 15],...'min',-1,...'max',1,...'style','slider',... 'callback',...'brighten(get(hslider,''value''))');实例38:多选菜单h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例38'); [x,y]=meshgrid(-8:0.5:8); r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r;h0=mesh(x,y,z); hlist=uicontrol(gcf,'style','listbox',...'string','default|spring|summer|autumn|winter',... 'max',5,...'min',1,...'position',[20 20 80 100],...'callback',[... 'k=get(hlist,''value'');,',... 'switch k,',...'case 1,',...'colormap default,',...'case 2,',...'colormap spring,',...'case 3,',...'colormap summer,',...'case 4,',...'colormap autumn,',...'case 5,',...'colormap winter,',...'end']);实例39:菜单控制的使用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例39'); x=0:0.5:2*pi;y=cos(x);h=plot(x,y); grid onset(gcf,'toolbar','none') hm=uimenu('label','example'); huidiao1=[...'set(hm_gridon,''checked'',''on''),',...'set(hm_gridoff,''checked'',''off''),',... 'grid on'];huidiao2=[...'set(hm_gridoff,''checked'',''on''),',...'set(hm_gridon,''checked'',''off''),',... 'grid off'];hm_gridon=uimenu(hm,'label','grid on',... 'checked','on',... 'callback',huidiao1); hm_gridoff=uimenu(hm,'label','grid off',... 'checked','off',... 'callback',huidiao2);实例40:UIMENU菜单的应用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例40');h1=uimenu(gcf,'label','函数');h11=uimenu(h1,'label','轮廓图',... 'callback',[...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off''),',...'[x,y,z]=peaks;,',...'contour3(x,y,z,30)']);h12=uimenu(h1,'label','高斯分布',... 'callback',[...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off''),',... 'mesh(peaks);,',...'axis tight']); h13=uimenu(h1,'label','Sinc函数',...'callback',[... 'set(h31,''checked'',''on''),',...。
matlab数学建模
利用多元线性回归研究水稻各品种的抗旱生理指标摘要在我国北方水源不足的条件下,大面积发展水稻生产受到了很大限制,因此采用抗旱品种,节水种稻,越来越为广大农业科学工作者所重视。
目前评价水稻品种的抗旱性方法和指标的研究工作还处于摸索阶段,先用综合的生理指标来反映水稻品种的抗旱性,为此进行本实验。
综合性的抗旱生理指标是由质膜透性,呼吸强度,脯氨酸含量,离体24小时的叶片含水量,气孔阻力,叶片生长速度,成活率7项组成。
该实验所用供试品种有26个(包括陆稻,水稻,湿润稻),由河北大学生物性提供,在中国农业科学院品种资源研究所培育,日平均温度为28℃,夜间温度为20℃,自然光照下,所得的实验数据均出于该研究所。
回归分析是研究随机现象中变量之间关系的一种统计方法,而这种统计规律称为变量之间的回归关系。
本文利用matlab对数据进行多元线性回归分析,先用regress函数进行回归,初步拟合出回归方程,然后再对其进行方差分析。
由于本实验变量较多,但并不是所有的变量都是显著的,故用逐步回归法对其进行分析,剔除不显著的变量,然后再用regress对剔除某些变量后拟合出来的方程进行检验。
通过比较两种不同方法,最终确定回归方程。
1.1实验数据实验数据见附表。
ShuidaoData.m 水稻数据文件见附页1.2多元线性回归——regress在命令窗口输入:X=[diandao,huxi,shengzhangv,pro,H2O,chenghuo,qikong,k];Y=zongjibie;[b,bint,r,rint,stats]=regress(Y,X,0.05);rcoplot(r,rint);由此模拟出来的回归方程如下所示:Y=0.2488*X(1)+0.2332*X(2)+0.2643*X(3)+0.1745*X(4)+0.1545*X(5) +0.2506*X(6)+0.1625*X(7)-1.6882所得统计量如下所示:由R2=0.9262 较大,且p值趋近于0,故可知回归的线性拟合较好。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读取的格式 读取2行数据
%将Matlab数据写入记事本 fid= fopen('tp.txt','wt'); %文件扩展名可以为:*.dat或*.xls fprintf(fid,'This is the database of class 1.\n'); name='Sally';types=1;x=3.1;y=45;answer='Yes'; fprintf(fid,'% s Type %u %f %u %s \n',name,types,x,y,answer); name='Tom';types=2;x=2.5;y=20;answer='No'; fprintf(fid,'% s Type %u %f %u %s \n',name,types,x,y,answer); fclose(fid);
1)编写M文件 curvefun1.m function f=curvefun1(x,tdata) f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a; x(2)=b;x(3)=k;
2)输入命令 tdata=100:100:1000; cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10, 6.26,6.39,6.50,6.59]; x0=[0.2,0.05,0.05]; x=lsqcurvefit ('curvefun1',x0,tdata,cdata) f= curvefun1(x,tdata) plot(tdata,cdata,'o',tdata,f,'r-')
的。
1. lsqcurvefit
已知数据点: xdata=(xdata1,xdata2,…,xdatan),
ydata=(ydata1,ydata2,…,ydatan) lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T 中的参变量x(向量),使得
(2)对应函数形式为 f t acosktewt ,进行拟合.
程序如下: syms t
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6; 14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
运行结果:P = 0.1481 -1.4030 1.8537 8.2698(降幂排)
2.图形窗口的多项式拟合
画出数据点: >> x=[1 2 3 4 5 6 7 8 9];y=[9 7 6 3 -1 2 5 7
20];plot(x,y,'r*'); 在图形窗口中单击Tools-Basic Fitting,打
2)输入命令: x0=[0.2,0.05,0.05]; x=lsqnonlin('curvefun2',x0) f= curvefun2(x)
MATLAB(liti22)
3)运算结果为 f =1.0e-003 *(0.2322 -0.1243 -0.2495 -0.2413 -0.1668
-0.0724 0.0241 0.1159 0.2030 0.2792 x =0.0063 -0.0034 0.2542
开对话框。
1.2.2 指定函数拟合
例2:在某次阻尼振荡实验中测得18组数据点。
x 0 0.4 1.2 y 1 0.85 0.29 x 7.2 8 9.2
2 -0.27 10.4
2.8 -0.53 11.6
3.6 -0.4 12.4
4.4 -0.12 13.6
5.2 0.17 14.4
y 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015
合函数f来拟合数据x,y.此处数据必须是列向量的形式.
1.2.3 曲线拟合工具箱
MATLAB主窗口左下角: start→toolboxes→CurveFitting→Curve Fitting Tool (cftool)
练习:
1、有一只对温度敏感的电阻,已经测得一组温度t 和电阻R数据: R() 20.5 32.7 51.0 73.0 95.7 t( o C) 765 826 873 942 1032
t 0 0.5
1.0
1.5
2.0
2.5
3.0
v 0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411
s 1 1.5
2
2.5
3
3.5
4
1、解答:
R与t大致呈 直线关系, 即
R at b
2、Matlab运行程序:
从图形上看,次数越高拟合程度越好。
3、Matlab运行程序:
1.1.1 Excel与MATLAB的数据交互
首先要安装Excel和MATLAB。 第一,打开Excel的工具→宏→安全性→安全级(中) 第二,打开Excel的工具→加载宏→浏览→
安装MATLAB的目录→toolbox →exlink →excllink.xla →确定,得到如下的工具条(即可使用):
function f=curvefun2(x) 应将cdata tdata的值写在
tdata=100:100:1000;
curvefun2.m中
cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,
6.10,6.26,6.39,6.50,6.59];
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata;
解法2 : 用命令lsqnonlin
f(x)=F(x,tdata,ctada)=(a be0.02kt1 c1,L , a be0.02kt10 c1)T
x=(a,b,k)
函数curvefun2的自变量是x,
1)编写M文件 curvefun2.m
cdata和tdata是已知参数,故
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a' ,'k','w'});
cfun=fit(x,y,f) %显示拟合函数
xi=0:.1:20;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-') 说明:fittype是自定义拟合函数,cfun=fit(x,y,f)是根据自定义的拟
=F(x,xdatai)-ydatai
输入格式为: 1) x=lsqnonlin(‘fun’,x0); 2)x=lsqnonlin(‘fun’,x0,options); 3)x= lsqnonlin(‘fun’,x0,options‘grad’); 4)[x,options]=lsqnonlin (‘fun’,x0,…); 5)[x,options,funval]=lsqnonlin(‘fun’x0,…);
1.1.2 记事本与MATLAB的数据交互
%从记事本t.txt中读取数据 load(‘filename.***’) %记事本中记录的全是数据 [name,type, x,y,answer]=textread(‘t.txt’,‘%s Type %n %f %n
%s’,2)
每一列要保存的变量名
保存的文件名
ydata=(ydata1,ydata2,…,ydatan) lsqnonlin用以求含参量x(向量)的向量值函数 f(x)=(f1(x),f2(x),…,fn(x))T 中的参量x,使得
f T (x) f (x) f1(x)2 f2 (x)2 fn (x)2
最小. 其中 fi(x)=f(x,xdatai,ydatai)
说明:x= lsqnonlin (‘fun’,x0,options);
fun是一个事先建立的 定义函数f(x)的M文件, 自变量为x
迭代初值
所有优 化函数
解法1. 用命令lsqcurvefit
F(x,tdata)= (a be0.02kt1 ,L , a be0.02kt10 )T ,x=(a,b,k)
1.3.2 薄膜渗透率的测定
下面用Matlab软件进行计算。
补充:用MATLAB作非线性最小二乘拟合
MATLAB提供了两个求非线性最小二乘拟合的函数: lsqcurvefit和lsqnonlin.两个命令都要先建立M文件 fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同
拟合引例中电阻R与温度t之间的关系R=at+b。
2、x为0到1之间的数,间隔0.1,y为-0.447,1.978, 3.28,6.16,7.08,7.34,7.66,9.56,9.48, 9.30,11.2,分别用二次、五次和十次拟合曲线 来拟合这组数据,并进行比较。
3、已知在某实验中测的某质点的位移和速度随时 间的变化如下,求质点的速度与位移随时间的 变化曲线以及位移随速度的变化曲线。
n
2
(F(x, xdatai ) ydatai ) 最小
i 1
说明:x=lsqcurvefit(‘fun’,x0,xdata,ydata,options);
fun是一个事先建立的 定义函数F(x,xdata) 的 M文件, 自变量为x和 xdata