声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1207|回复: 7

[编程技巧] 这个程序错在哪里了?

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

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

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

x
这是一个迭代的程序,我输入x=[0,0]以后,在运行过程中一直busy,按说这个不是非常大阿
是不是我的循环体有问题啊
请各位大虾指点!
function y=bb2_2_10(x)
format short
eps=input('please input your accuracy:');
a=-5;
b=5;
x0=a+(b-a)*rand(1,2);
A=diag([1:9:10]);
m=1;
iterstep(1,:)=x;
while m==1
   while norm((x-x0)*A)>eps
     grad=(x-x0)*A;
     alpha=grad*grad'/(grad*A*grad');
     x=x-alpha*grad;
     iterstep(m+1,:)=x;
     m=m+1;
  end
end
while m>=2
   while norm((x-x0)*A)>eps
    x1=iterstep(m-1,:);
    x2=iterstep(m,:);
    grad1=(x1-x0)*A;
    grad2=(x2-x0)*A;
    alpha=grad1*grad1'/(grad1*A*grad1');
    x2=x2-alpha*grad2;
    x=x2;
    iterstep(m+1,:)=x;
    m=m+1;
   end
end


step=max(size(iterstep))-1
x
iterstep
回复
分享到:

使用道具 举报

发表于 2006-11-9 08:20 | 显示全部楼层

回复

你的程序问题出在两个while外循环,稍作修改,可以很快得出结果.

评分

1

查看全部评分

发表于 2006-11-9 09:15 | 显示全部楼层
eps是MATLAB中常量的名称,eps=2.2204e-016。因此不合适作为变量的名称。

评分

1

查看全部评分

 楼主| 发表于 2006-11-9 20:03 | 显示全部楼层

请教二楼

我是一个新手
请帮忙告之如何修改!
谢谢!
谢谢三楼
发表于 2006-11-10 12:45 | 显示全部楼层
判断条件有问题

while m>=2
这一句表示只要m>=2就运行循环中的语句

而在你的循环中
和m相关的只有 m=m+1;

也就是说每运行一次m增加1,永远都满足m>=2这个条件,程序也就无限循环下

建议先搞清楚程序的逻辑关系,给出程序运行结束的条件
 楼主| 发表于 2006-11-10 22:09 | 显示全部楼层
我说来
发表于 2006-11-11 14:13 | 显示全部楼层
原帖由 changyl01 于 2006-11-10 22:09 发表
我说来


????
 楼主| 发表于 2006-11-12 00:26 | 显示全部楼层
大错了
呵呵
不好意思
谢谢特聘教授!
您是哪里的?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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