数学建模套用网上的matlab代码后要如何修改成自己的代码

数学建模套用网上的matlab代码后要如何修改成自己的代码,第1张

三次数模国奖路过,曾经单挑过两次国赛(第三次有一个负责编程的同学给予我很大的帮助)。稍微谈谈编程这一块的经验吧,现在临近美赛,时间也不多了。最高票回答适合长时间准备(至少有一个从校内赛到国赛的周期,我就谈谈只剩下一个月不到应该如何准备编程这一块工作吧)。

编程的同学,主要是把建模同学的思想给生产出结果,也就是输出一定的东西,可以是图,可以是表可以是数据等等。当你随便打开一本数模书(比如司守奎老师写的《数学建模算法与应用》这本书),你会被里面的Matlab,lingo等代码吓住,尤其是以前不怎么编程的同学来说更为如此。所以数模三个部分,很多同学会觉得编程非常难以上手。

其实,负责编程的同学,并不是说比谁代码写得长,谁代码写得好,而是应该为建模的同学提供一个结果(只从数模拿奖(功利的角度出发)无论结果的好坏,甚至是否有结果,在比赛即将结束的时刻,都应该给建模队友一个所得过去的“答案”),所以可以在做一些数模问题的时候,用一些较为“傻瓜”的软件,比如SPSS,这个软件可以解决统计学中的很多问题,比如2012年的国赛葡萄酒评价问题,这道题就是使用SPSS的代表。所以说,以其说是会编程,不如说是应该会使用相关软件,让所建模型输出一个不错的结果。还有作图软件Origin,在进行一些简单的作图时候,可以使用Origin而没有必要去使用Matlab进行画图,一般情况下,在问题不太复杂的时候,是没有必要使用Matlab的。还有一款软件叫做Visio,这款软件是画流程图的利器,比如说写完一段程序附上程序框图,或者用系统动力学解决一个问题时画的系统流图,得到的效果都是非常棒的(PS:初次学习建模的同学,无论如何一定要在Matlab上面下一点功夫,即使没有办法掌握,也需要知道如何修改别人的优秀程序,为我所用)。

如果真的想短期学会一个真正需要编程的语言,还是选Matlab吧,虽然在短时间之类,你是无法把这门语言学到精通,但是只要知道Matlab的语法规律,以及一些基本功能,一些基本的工具箱就足够了,这里推荐两本书,一本是《Matlab完全自学一本通》这本书上面基本上包含了可以用得到的功能,至少是基础功能。在数模上面,可以司守奎老师写的《数学建模算法与应用》这本书,一般常用模型的代码都给出来了。还有一个最关键的是,比赛前,多看看别人写的优秀论文。不管是国赛还是美赛,都有着优秀论文集,看看别人写的论文还有别人的代码,争取找到一些灵感。

在比赛的过程中,如果什么地方卡住了,一定不要蒙着头想,应该即使去相关论坛查找一些使用技巧,当然Matlab自身的帮助文档也是挺不错的。

多说一句话,LaTeX是写作排版用的,虽然也是类似于编程语言,不建议编程的人去学习,应该去鼓励写作的同学学习LaTeX,编程的同学应该和建模的同学好好合作,合力把比赛题目拿下。

看到数学建模老司机(国一优秀论文获得者,深圳杯获得者,SAS大赛冠军)的回答了,SPSS在这几年的国赛的赛题(2014,2015,2016)当中确实比较难使用了,问题基本上都是纯物理类问题(2014航天,2015球面天文学,2016受力分析)而且SPSS还有一个非常强大的竞争对手SAS的存在。至少是国赛A题,一般都是需要自己踏踏实实建模,最后使用Matlab实现。但是,A题由于过于考察建模的实力,因此一些非理工科的学生往往望而怯步。

R,Python以及SAS作为数据分析时代的新兴语言,大家可以有空的时候学一学。由于现在有一个SAS数据分析大赛(由汇丰银行赞助,SAS公司主办)搞的还不错,大家可以学一学SAS然后去这个比赛中练一练手。参加过蛮多的比赛,还是发现SAS举办的这个数据分析竞赛(尤其是决赛)给我的参赛体验非常地好。

其实,如果单纯从拿奖的角度来说,某些问题,尤其是国赛B题, 美赛E、F题对于程序要求不高的情况下,可以适当地使用现有的模型理论对具体问题进行分析。但是,从2014年开始每一年国赛A题基本上都很难找到可以直接套用的模型(虽然2016年的系泊系统在知网上面有很多现成的研究结果,但是往往不是太复杂,就是和题目分析的背景有点不太一样),这也是我前面说为什么对于没有经历过理工科训练的学生很容易望而怯步的原因。所以,我觉得如果你想做好A题,在近些年A题越来越需要自己建模,自己使用一定的软件实现的大环境下,建议有一定改编现有程序的能力。

1 基本原理

ActiveX自动化是基于组件对象模型COM(Component Object Model)的技术,允许应用程序或组件控制另一

个应用程序或组件的运行,它包括自动化服务器和自动化控制器。MATLAB支持ActiveX自动化技术。通过使用

MATLAB自动化服务器功能,可以在其它应用程序中执行MATLAB命令,并与MATLAB的工作空间进行数据交换。因此

可以借助这一特性,把LabVIEW与MATLAB结合,充分利用MATLAB提供的大量高效可靠的算法和LabVIEW的图形化编

程能力,混合开发出功能强大的应用软件。

2 应用举例

在混合编程中,通常用LabVIEW设计用户图形界面,负责数据采集和网络通信;MATLAB在后台提供大型算法供

LabVIEW调用。

21 方法一:使用MATLAB Script节点

为了简化调用过程,LabVIEW提供了MATLAB Script节点。LabVIEW使用ActiveX技术执行该节点,启动一个

MATLAB进程。这样用户就可以很方便地在自己的LabVIEW应用程序中使用MATLAB,包括执行MATLAB命令、使用功能

丰富的各种工具箱,如神经网络工具箱(Neural Network Toolbox)、优化工具箱(Optimization Toolbox)。

值得注意的是:LabVIEWgn MATLAB之间的数据通信仅支持Real、RealVector、RealMatrix、Complex、

VectorComplex、Matrix六种格式的数据,且必须根据具体情况进行选择。

当开发涉及工业控制的应用程序时,常常由于控制参数的非线性变化,而无法建立合适的模型。由于此类问

题,神经网络提供了一条有效的解决途径。

在LabVIEW开发环境下新建一个三层BP神经网络的VI程序,程序框图见图1。网络结构部分主要设置隐层

(Hidelay)神经元的个数、传递函数(Transfer Function)以及网络训练算法(Algorithm)。经过样本数据

(Training Data)训练过的网络,即可进行仿真测试了。MATLAB脚本程序可以在MATLAB环境下调试,再使用

MATLAB Script节点导入MATLAB脚本;也可以直接在MATLAB Script节点中编写。位于

Function>>Mathematics>>Formula模板中的MATLAB Script节点可以导入MATLAB脚本。图1中的脚本程序使用CASE

语句进行传递函数和训练算法的选择。MATLAB Script节点中神经网络的输入层和隐层之间的权值矩阵inweight应

指定为RealMatrix,在LabVIEW中对应的数据类型是二维实数据组NetI-Weight。各变量数据类型见表1。

表1 MATLAB Script节点输入、输出变量的数据类型

变量名 LabVIEW数据类型 MATLAB数据类型

size of algorithm Double floating point numeric Real

t outweight hideb outb result 1D array double floating numeric Real Vector

p data inweight Multidimensional array double floating point numeric Real Matrix

在此程序中,得到的BP网络各层的权值矩 阵、阈值向量和传递函数三类参非常有用的,它们决定了神经网络

的结构与特性。因此当神经网络训练好后,可以直接使用这些参数处理新的数据,得到预测值,而不必重新调用

MATLAB。这样程序的运行效率会更高。另一方面,将调试好的神经网络VI创建成一个子VI,作为模块保存,当需

要更新网络时,可以随时调用。

虽然通过MATLAB Script节点进行通信比较易于实现,但以这种方式调用MATLAB时,在任务栏中将出现一个

MATLAB图标,单击该图形会打开MATLAB窗口,在其中可以任意输入。通常,这会干扰前台程序的运行,甚至造成

程序的崩溃。另一方面,当MATLAB Script节点中的脚本执行完后,MATLAB也不能自动关闭。

基坑降水引起地面沉降的BP神经网络预测模型建模过程如下:

(1)样本选择

因基坑降水引起的地面沉降量和距离基坑的距离关系密切,因此建模选用“基坑降水引起沉降工程数据(第二类)”(见表41)中的相关数据作为样本进行学习训练和检验。

(2)BP神经网络结构设计

对于BP网络,对于任何在闭区间内的一个连续函数都可以用单隐层的BP网络逼近,因而一个三层BP网络就可以完成任意的n维到m维的映射。根据网络结构简单化的原则,确定采用三层BP网络结构,即输入层为沉降点距基坑的距离L(m)、等效压缩模量E(MPa)、水位降深H(m)和支护刚度n四个参数,输出层为地面累积沉降量(mm),隐层层数为1层。隐层的神经元数目选择是一个十分复杂的问题,往往需要根据设计者的经验和多次实验来确定,因而不存在一个理想的解析式来表示。隐单元的数目与问题的要求,与输入、输出单元的数目有直接的关系。隐单元数目太多会导致学习时间过长,误差不一定最佳,也会导致容错性差、不能识别以前没有看到的样本,因此一定存在一个最佳的隐单元数。研究通过一次编程比较了隐层神经元个数分别为5、10、15、20、25、30、40时训练速度及检验精度。

图42 BP神经网络程序框图

(3)网络训练及检验

BP网络采用梯度下降法来降低网络的训练误差,考虑到基坑降水地面沉降范围内沉降量变化幅度较小的特点,训练时以训练目标取0001为控制条件,考虑到网络的结构比较复杂,神经元个数比较多,需要适当增加训练次数和学习速率,因此初始训练次数设为10000次,学习速率取01,中间层的神经元传递函数采用S型正切函数tansig,传输函数采用logsig,训练函数采用trainlm,选用38组数据中的33组作为训练样本,5组作为检验样本。

(4)网络实现及检验效果

使用MATLAB60编程建立基于BP神经网络的基坑降水地面沉降预测模型(程序代码见附件1),其训练误差及检验效果如下:

图43 训练误差曲线

图44 预测误差曲线

由图43、图44可见:样本数据收敛,训练误差较小,中间层神经单元个数为10时预测精度较好,误差小于20%,误差满足工程需求。

问题一:流程图写程序 怎么写呀 #includevoid main(){

int a,b,x;

printf(Please input a b x values:);

scanf(%d %d %d,&a,&b,&x);

printf(a=%d,b=%d,x=%d,a,b,x);

if(a>1&&b==0){

x=x/a;

printf(x=%d,x);

}else{

printf(x=%d,x);

if(a==2||x>1){

x=x+1;

printf(x=%d,x);

}else {

printf(x=%d,x);

}

}

}

流程图菱形表示判断,y表示yes,n表示no

具体的变化条件要怎么写楼主自己定了,不清楚留言说明

问题二:写程序步骤 手把手教你写程序

内容:从最简单的程序入手,手把手教你写程序,让同学们拿到一个复杂的程序或者任务,能快速找到切入点,写出程序,再在此基础上优化程序。当拿到一个单片机任务时,不要急于动手写程序,先仔细分析它的以下几个点:

1、它要单片机整体实现什么功能

2、功能细分(模块化),先干什么,再干什么,最后干什么

3、画初步流程图,(把几个模块画出即可)

4、模块之间的分析:一个模块到另一个模块之间,怎么变换,怎么连接(优化流程图)5、单个模块分析:每个模块要做什么(流程图细化)

6、所有模块结合连接,细化所有流程图

7、分析单个模块每步要用到的方法或者指令

8、总流程图定型

9、纸上写程序,对照流程图分析其可行性,若不可行则返回

10、上机调试,加注释

以上十步,缺一不可(小程序列外)

切记:流程图的确定很重要,需反复修改

大忌:拿到任务,不仔细分析就写程序。即使是小程序,我们也要养成良好的编程习惯,不要一味的追求结果。写小程序可能比别人快,若是大程序,一旦出现思维混乱,或者出现程序调试不出结果,那么你花在调试上的时间,要比别人的多。 !!!!!!磨刀不误砍柴工!!!!!!

程序的优化:属于后期工作,只有调试出来后,才去优化,如果一开始优化和写程序同时进行,一是加重你的思考量,二是出现问题无从下手。无疑增加了写程序的难度。对于一个初学者,写一个程序,本身头脑就处于紧张的状态,思考的问题就很多,如果此时把优化程序也考虑进去,你脑袋的负荷无疑加重,若你头脑精明,你可以把优化的地方,先在纸上记下来,等到调试结果正常,再把你想到的,优化的地方加进去。

问题三:看流程图写程序: s=2n+1;

while(s 问题四:编程序,实现:1+2+3+……+100,要求:画流程图,写完整程序。 #include

void main()

{

int sum=0;

for(int i=1;i!=101;++i)

sum+=i;

printf(sum :%d\n,sum);

}

流程图自己画,简单得很。

问题五:根据流程图编写程序 #include int main(void){ int i,a,b,sum; a=1;b=50;sum=0;i=a; while(i 问题六:为什么编写程序前,一般要先编制流程图? 由于对程序的流程或逻辑关

问题七:JAVA程序的流程图该怎么写啊?? public class mt{

public static void main(String args[])

{

int k=9;

for (in i=1;i 问题八:用MATLAB如何写流程图相应程序(流程图如下) 你的V初和V末是什么?V1和V2吗?

I=abs(J-J)(v1-v0)/(rt);if I 问题九:怎样给以下的C语言程序写流程图 很高兴为您解答!

采纳后自动发送密码

问题十:根据程序代码画流程图和根据流程图自动写代码的程序 怎么做 这种东西一般都需要第三方控件,自己做的话只有在WPF里可以实现

以上就是关于数学建模套用网上的matlab代码后要如何修改成自己的代码全部的内容,包括:数学建模套用网上的matlab代码后要如何修改成自己的代码、labview和matlab是如何结合的、建立BP神经网络地面沉降预测模型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9317465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存