pleaseopen 发表于 2006-11-16 14:30

高手查问题

下面的程序为什么在K=9时,plot语句没有得到执行:
clear all
clc
xxx1=[];
xxx2=[];
kk=[];
for k=1:2:19
   XX1=[];
   XX2=[];
   x1(1)=0.5;
   x2(1)=0.7;
       for t=1:10
         x1(t+1)=sin(k*(x2(t)));
         x2(t+1)=cos(k*(x1(t)));
         XX1=;
         XX2=;
       end
         kk=;
      xxx1=;
      xxx2=;
       if   x1(10)==0.27041&&x2(10)==0.19767
       plot(x1(10),x2(10),'o');
       end
end

xjzuo 发表于 2006-11-16 14:44

回复

讲一下你要做什么吧. 要不然不好改.

eight 发表于 2006-11-16 14:52

原帖由 pleaseopen 于 2006-11-16 14:30 发表
下面的程序为什么在K=9时,plot语句没有得到执行:
clear all
clc
xxx1=[];
xxx2=[];
kk=[];
for k=1:2:19
   XX1=[];
   XX2=[];
   x1(1)=0.5;
   x2(1)=0.7;
       for t=1:10
          ...


plot语句的判断条件这么苛刻,恐怕根本不会执行

happy 发表于 2006-11-17 08:19

原帖由 eight 于 2006-11-16 14:52 发表



plot语句的判断条件这么苛刻,恐怕根本不会执行

同意这一观点,根本就不存在满足条件的结果

pleaseopen 发表于 2006-11-17 10:47

原帖由 eight 于 2006-11-16 14:52 发表



plot语句的判断条件这么苛刻,恐怕根本不会执行


请大家运行这个程序,该程序中的K=9,看看XXX1和XXX2的值为多少
clear all
clc
xxx1=[];
xxx2=[];
kk=[];
for k=9
   XX1=[];
   XX2=[];
   x1(1)=0.5;
   x2(1)=0.7;
       for t=1:10
         x1(t+1)=sin(k*(x2(t)));
         x2(t+1)=cos(k*(x1(t)));
         XX1=;
         XX2=;
       end
         kk=;
      xxx1=;
      xxx2=;
       if   x1(10)==0.27041&&x2(10)==0.19767
       plot(x1(10),x2(10),'o');
       end
end

pleaseopen 发表于 2006-11-17 10:50

原帖由 xjzuo 于 2006-11-16 14:44 发表
讲一下你要做什么吧. 要不然不好改.
我想在x1(10)和x2(10)满足一定的迭代结果时记住当时的参数值

eight 发表于 2006-11-17 10:54

原帖由 pleaseopen 于 2006-11-17 10:47 发表



请大家运行这个程序,该程序中的K=9,看看XXX1和XXX2的值为多少
clear all
clc
xxx1=[];
xxx2=[];
kk=[];
for k=9
   XX1=[];
   XX2=[];
   x1(1)=0.5;
   x2(1)=0.7;
       for t=1: ...


老兄,如果你有其他语言的编程经验,应该知道浮点数的比较和精度问题,一般不用==进行比较

happy 发表于 2006-11-17 10:55

原帖由 pleaseopen 于 2006-11-17 10:47 发表



请大家运行这个程序,该程序中的K=9,看看XXX1和XXX2的值为多少
clear all
clc
xxx1=[];
xxx2=[];
kk=[];
for k=9
   XX1=[];
   XX2=[];
   x1(1)=0.5;
   x2(1)=0.7;
       for t=1: ...


xxx1 = 0.27040982538973
xxx2 = 0.19767405894245

大致明白楼主的意思了,不过楼主对matlab中的变量不太了解
matlab中的变量运算的过程中实际上是双精度的,而楼主说说得只不过是显示精度,实际判断的时候采用的双精度

建议楼主修改一下程序中的判断语句
if   abs(x1(10)-0.27041)<1e-5&&abs(x2(10)-0.19767)<1e-5

eight 发表于 2006-11-17 11:03

原帖由 happy 于 2006-11-17 10:55 发表



xxx1 = 0.27040982538973
xxx2 = 0.19767405894245

大致明白楼主的意思了,不过楼主对matlab中的变量不太了解
matlab中的变量运算的过程中实际上是双精度的,而楼主说说得只不过是显示精度,实际判断的 ...

不止matlab如此吧?其他语言浮点数用 == 来比较好像也不行的

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

感谢happy教授和eight进士,谢谢,试一下,我想是这方面的问题,多年没有编程了,很不熟。

happy 发表于 2006-11-17 11:07

原帖由 eight 于 2006-11-17 11:03 发表


不止matlab如此吧?其他语言浮点数用 == 来比较好像也不行的

同意,一般在if中很少使用==的

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

xxx1 = 0.27040982538973
xxx2 = 0.19767405894245
二位怎么看到的,我的worksapce中只是显示了double,到小数后5位,向二位学习

eight 发表于 2006-11-17 11:11

原帖由 pleaseopen 于 2006-11-17 11:09 发表
xxx1 = 0.27040982538973
xxx2 = 0.19767405894245
二位怎么看到的,我的worksapce中只是显示了double,到小数后5位,向二位学习

先运行format long,没有记错的话

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

通过验证,谢谢。精度要求更高只要调节误差范围便可达到,对吧?

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

通过验证,谢谢。精度要求更高只要调节误差范围便可达到,对吧?多发了一遍,对不起,但感谢还是可以的
页: [1]
查看完整版本: 高手查问题