声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1404|回复: 14

[编程技巧] 高手查问题

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

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

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

x
下面的程序为什么在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=[XX1,x1(t)];
         XX2=[XX2,x2(t)];
       end
         kk=[kk,k];
        xxx1=[xxx1,x1(10)];
        xxx2=[xxx2,x2(10)];
       if   x1(10)==0.27041&&x2(10)==0.19767
       plot(x1(10),x2(10),'o');
       end
end
回复
分享到:

使用道具 举报

发表于 2006-11-16 14:44 | 显示全部楼层

回复

讲一下你要做什么吧. 要不然不好改.
发表于 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语句的判断条件这么苛刻,恐怕根本不会执行

评分

1

查看全部评分

发表于 2006-11-17 08:19 | 显示全部楼层
原帖由 eight 于 2006-11-16 14:52 发表



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


同意这一观点,根本就不存在满足条件的结果
 楼主| 发表于 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=[XX1,x1(t)];
         XX2=[XX2,x2(t)];
       end
         kk=[kk,k];
        xxx1=[xxx1,x1(10)];
        xxx2=[xxx2,x2(10)];
       if   x1(10)==0.27041&&x2(10)==0.19767
       plot(x1(10),x2(10),'o');
       end
end
 楼主| 发表于 2006-11-17 10:50 | 显示全部楼层
原帖由 xjzuo 于 2006-11-16 14:44 发表
讲一下你要做什么吧. 要不然不好改.

我想在x1(10)和x2(10)满足一定的迭代结果时记住当时的参数值
发表于 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: ...



老兄,如果你有其他语言的编程经验,应该知道浮点数的比较和精度问题,一般不用==进行比较
发表于 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: ...


  1. xxx1 = 0.27040982538973
  2. xxx2 = 0.19767405894245
复制代码


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

建议楼主修改一下程序中的判断语句
  1. if   abs(x1(10)-0.27041)<1e-5&&abs(x2(10)-0.19767)<1e-5
复制代码
发表于 2006-11-17 11:03 | 显示全部楼层
原帖由 happy 于 2006-11-17 10:55 发表



xxx1 = 0.27040982538973
xxx2 = 0.19767405894245

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


不止matlab如此吧?其他语言浮点数用 == 来比较好像也不行的
 楼主| 发表于 2006-11-17 11:05 | 显示全部楼层
感谢happy教授和eight进士,谢谢,试一下,我想是这方面的问题,多年没有编程了,很不熟。
发表于 2006-11-17 11:07 | 显示全部楼层
原帖由 eight 于 2006-11-17 11:03 发表


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


同意,一般在if中很少使用==的
 楼主| 发表于 2006-11-17 11:09 | 显示全部楼层
xxx1 = 0.27040982538973
xxx2 = 0.19767405894245
二位怎么看到的,我的worksapce中只是显示了double,到小数后5位,向二位学习
发表于 2006-11-17 11:11 | 显示全部楼层
原帖由 pleaseopen 于 2006-11-17 11:09 发表
xxx1 = 0.27040982538973
xxx2 = 0.19767405894245
二位怎么看到的,我的worksapce中只是显示了double,到小数后5位,向二位学习


先运行format long,没有记错的话
 楼主| 发表于 2006-11-17 11:13 | 显示全部楼层
通过验证,谢谢。精度要求更高只要调节误差范围便可达到,对吧?
 楼主| 发表于 2006-11-17 11:13 | 显示全部楼层
通过验证,谢谢。精度要求更高只要调节误差范围便可达到,对吧?多发了一遍,对不起,但感谢还是可以的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-24 23:11 , Processed in 0.077477 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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