加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数学建模(贺明峰老师)实践作业

(2010-09-27 08:51:34)
标签:

it

数学建模作业

作业1

       对x[n+1]=k*x[n]*(1-x[n]),x[0]=0.618 k=1,2,3,3.4,3.56,分别作迭代图像,迭代1000次,作出的散n-x[n]的点图和连线图。

解:方法实现:用C语言编程计算迭代数据,保存为**.txt文件,然后用matlab调用画图。

具体操作:C程序如下:

#include"stdio.h"

void main()

  FILE *fpt; 

int n;

float k=1x[1001];

x[0]=0.618;    

for(n=0;n<1000;n++)

x[n+1]=k*x[n]*(1-x[n]);

    fpt fopen("hundun11.txt","w");//打开文档,写入数据

for(n=1;n<=1000;n++)

    fprintf(fpt,"%-10d%f\n",n,x[n]); //两列数据

    fclose(fpt); 

  //注:黑色加粗字体1k的取值,改变它们的值以得到不同结果。

把得到的文本文件复制到matlab/work目录下,运行matlab,输入如下命令:

>>data11=load('hundun11.txt')

>>x=data11(:,1)

>>y=data11(:,2)

>>plot(x,y,'.')

>>plot(x,y)

得到图像1-1散点图和1-2连线图。


                      图像1-1                                     图像1-2

 

重复上述步骤,得到k=2,k=3,k=3.4,k=3.56分别对应的图像2345

 

作业2:以作业1中的迭代数列,作费根鲍姆图,取横轴为k,纵轴为x,k取步长0.01,0<=k<=4,对每个k值迭代2000次,取后1000次的数值标在相应的竖线上。

解:实现方法如作业一;

具体步骤:考虑到在C语言中分配过大数组容易出错,故把数据分成四段,即取k0~11~2,2~3,3~4,依次作出图像,并保存上一步图像,最后得到完整图像。

C程序如下:

#include"stdio.h"

void main()

{

    FILE *fpt;

int m,n;

float k=0.0,x[100][2001];//之后k值取1.0,2.0,3.0

for(m=0;m<100;m++)

 for(n=0,x[m][0]=0.618;n<2001;n++)  

x[m][n+1]=k*x[m][n]*(1-x[m][n]);

   k=k+0.01;  }

    fpt fopen("hundun0.txt","w");//打开文档,写入 数据

for(m=0;m<100;m++)

 for(n=1001;n<2001;n++)

        fprintf(fpt,"%-10f",x[m][n]);

    fprintf(fpt,"\n");  }

    fclose(fpt); 

  //注:依次改变黑体字部分得到四组数据,把文本文件复制到matlab/work目录下,运行matlab,输入如下命令:

>>data0=load('hundun0.txt')

>>k0=0.01:.01:1

>>plot(k0,data0)

>>hold on              //依次改变黑体字部分,得到完整图像

http://s1/middle/6a3f6e61491332bc9e900&690&690

http://s5/middle/6a3f6e61491332bb13a94&690&690

http://s3/middle/6a3f6e61491332bbaa2f2&690&690

http://s1/middle/6a3f6e61491332bb33760&690&690

http://s11/middle/6a3f6e61491332bb263aa&690&690



                            

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有