pleaseopen 发表于 2006-11-21 10:16

高手帮忙优化程序

下面的程序,在设定循环次数比较小的情况下,运行速度还可以,次数多的时候就非常的慢。请问
这程序是否可以改进。多谢。
目的是记录下满足特定结论(迭代结果)的各参数取值情况
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=;
             XX2=;
          end
          xxx1=;
          xxx2=;
       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=;
          ss=;
          hh=;
          xxx1=;
          xxx2=;
       end
   end
   end
end

[ 本帖最后由 pleaseopen 于 2006-11-23 13:51 编辑 ]

xjzuo 发表于 2006-11-21 10:49

回复

不明白你为何一直坚持要画那个点.
请稍微描述一下你想实现什么吧.

F117_ren_0 发表于 2006-11-21 10:55

我的做法是:既然已经给出
kk=[];
ss=[];
hh=[];
那么那三个for就可以不要,过多的循环使程序有点臃肿
因为不知道你
kk=[];
ss=[];
hh=[];
三个数组的数据什么样的,所以不敢确定,个人愚见

xjzuo 发表于 2006-11-21 11:00

回复

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

[ 本帖最后由 xjzuo 于 2006-11-21 11:05 编辑 ]

eight 发表于 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层循环,不慢才怪,呵呵

pleaseopen 发表于 2006-11-21 11:17

目的是记录下满足特定结论(迭代结果)的各参数取值情况
kk=[];
ss=[];
hh=[];
是参数的记录情况
plot是判定条件,看能否出现想要的结果

pleaseopen 发表于 2006-11-21 11:19

原帖由 xjzuo 于 2006-11-21 11:00 发表
没有听懂你说的.
你说说想实现什么吧. 想画什么图形?
目的不是画图,而是记录k,s,h的取值情况,plot是提示出现想要的结论

F117_ren_0 发表于 2006-11-21 18:59

原帖由 pleaseopen 于 2006-11-21 11:17 发表
目的是记录下满足特定结论(迭代结果)的各参数取值情况
kk=[];
ss=[];
hh=[];
是参数的记录情况
plot是判定条件,看能否出现想要的结果
就是啊,你既然给出参数的记录情况,就根据这个记录走就是了,还用那三个for干吗?

pleaseopen 发表于 2006-11-22 13:50

原帖由 F117_ren_0 于 2006-11-21 18:59 发表

就是啊,你既然给出参数的记录情况,就根据这个记录走就是了,还用那三个for干吗?
这只是一个例子,关键在于用来寻找参数,不是像你想得就为了那三个参数

xjzuo 发表于 2006-11-22 20:05

回复

三个参量直接取为向量,去掉循环,可加快速度.
另:请把问题一次说清楚些,这样别人就会知道你想要做什么了.

pleaseopen 发表于 2006-11-23 13:59

原帖由 xjzuo 于 2006-11-22 20:05 发表
三个参量直接取为向量,去掉循环,可加快速度.
另:请把问题一次说清楚些,这样别人就会知道你想要做什么了.
请指点如何具体实现,确实没有经验

happy 发表于 2006-11-23 17:35

你这个程序看着头晕

举一个简单的例子吧

for i=1:10
    z(i)=i+i*exp(i);
end

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

i=1:10;
z=i+i.*exp(i);
页: [1]
查看完整版本: 高手帮忙优化程序