声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1480|回复: 11

[编程技巧] 高手帮忙优化程序

[复制链接]
发表于 2006-11-21 10:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
下面的程序,在设定循环次数比较小的情况下,运行速度还可以,次数多的时候就非常的慢。请问
这程序是否可以改进。多谢。
目的是记录下满足特定结论(迭代结果)的各参数取值情况
kk=[];
ss=[];
hh=[];
是参数的记录情况
plot是判定条件,看能否出现想要的结果

目的不是画图,而是记录k,s,h的取值情况,plot是提示出现想要的结论

clear all
clc
format long;
xxx1=[];
xxx2=[];
kk=[];
ss=[];
hh=[];
for k=1:2:19
   for s=1:1:6
     for h=1.5:0.1:3.6
         XX1=[];
         XX2=[];
         x1(1)=0.5;
         x2(1)=0.7;
          for t=1:10
             x1(t+1)=h*x1(t)+s*sin(k*(x2(t)));
             x2(t+1)=h*x2(t)+s*cos(k*(x1(t)));
             XX1=[XX1,x1(t)];
             XX2=[XX2,x2(t)];
          end
          xxx1=[xxx1,x1(10)];
          xxx2=[xxx2,x2(10)];
       if abs(x1(10)-219.02)<1e-2&&abs(x2(10)-79.669)<1e-2   %%% 此时k=5;s=3;h=1.8;
          plot(x1(10),x2(10),'o');
          kk=[kk,k];
          ss=[ss,s];
          hh=[hh,h];
          xxx1=[xxx1,x1(10)];
          xxx2=[xxx2,x2(10)];
       end
     end
   end
end

[ 本帖最后由 pleaseopen 于 2006-11-23 13:51 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-11-21 10:49 | 显示全部楼层

回复

不明白你为何一直坚持要画那个点.
请稍微描述一下你想实现什么吧.
发表于 2006-11-21 10:55 | 显示全部楼层
我的做法是:既然已经给出
kk=[];
ss=[];
hh=[];
那么那三个for就可以不要,过多的循环使程序有点臃肿
因为不知道你
kk=[];
ss=[];
hh=[];
三个数组的数据什么样的,所以不敢确定,个人愚见
发表于 2006-11-21 11:00 | 显示全部楼层

回复

没有听懂你说的.
你说说想实现什么吧. 想画什么图形?

[ 本帖最后由 xjzuo 于 2006-11-21 11:05 编辑 ]
发表于 2006-11-21 11:01 | 显示全部楼层
原帖由 pleaseopen 于 2006-11-21 10:16 发表
下面的程序,在设定循环次数比较小的情况下,运行速度还可以,次数多的时候就非常的慢。请问
这程序是否可以改进。多谢。
clear all
clc
format long;
xxx1=[];
xxx2=[];
kk=[];
ss=[];
hh=[];
for k=1 ...



4层循环,不慢才怪,呵呵
 楼主| 发表于 2006-11-21 11:17 | 显示全部楼层
目的是记录下满足特定结论(迭代结果)的各参数取值情况
kk=[];
ss=[];
hh=[];
是参数的记录情况
plot是判定条件,看能否出现想要的结果
 楼主| 发表于 2006-11-21 11:19 | 显示全部楼层
原帖由 xjzuo 于 2006-11-21 11:00 发表
没有听懂你说的.
你说说想实现什么吧. 想画什么图形?

目的不是画图,而是记录k,s,h的取值情况,plot是提示出现想要的结论
发表于 2006-11-21 18:59 | 显示全部楼层
原帖由 pleaseopen 于 2006-11-21 11:17 发表
目的是记录下满足特定结论(迭代结果)的各参数取值情况
kk=[];
ss=[];
hh=[];
是参数的记录情况
plot是判定条件,看能否出现想要的结果

就是啊,你既然给出参数的记录情况,就根据这个记录走就是了,还用那三个for干吗?
 楼主| 发表于 2006-11-22 13:50 | 显示全部楼层
原帖由 F117_ren_0 于 2006-11-21 18:59 发表

就是啊,你既然给出参数的记录情况,就根据这个记录走就是了,还用那三个for干吗?

这只是一个例子,关键在于用来寻找参数,不是像你想得就为了那三个参数
发表于 2006-11-22 20:05 | 显示全部楼层

回复

三个参量直接取为向量,去掉循环,可加快速度.
另:请把问题一次说清楚些,这样别人就会知道你想要做什么了.
 楼主| 发表于 2006-11-23 13:59 | 显示全部楼层
原帖由 xjzuo 于 2006-11-22 20:05 发表
三个参量直接取为向量,去掉循环,可加快速度.
另:请把问题一次说清楚些,这样别人就会知道你想要做什么了.

请指点如何具体实现,确实没有经验
发表于 2006-11-23 17:35 | 显示全部楼层
你这个程序看着头晕

举一个简单的例子吧

  1. for i=1:10
  2.     z(i)=i+i*exp(i);
  3. end
复制代码


这个你就可以写成向量运算的形式

  1. i=1:10;
  2. z=i+i.*exp(i);
复制代码
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 18:20 , Processed in 0.084150 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表