声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1192|回复: 5

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

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

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

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

x
function y=ya_100_100(x)
format long
eps=input('please input your accuracy:');
a=-5;
b=5;
x0=a+(b-a)*rand(1,100);
A=diag([1:1:100]);
m=1;
iterstep(1,:)=x;
while mod(m,2)~=0&&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
while mod(m,2)==0&&norm((x-x0)*A)>eps
    x1=iterstep(m-1,:);
    x2=iterstep(m,:);
    grad1=(x1-x0)*A;
    grad2=(x2-x0)*A;
    alpha1=grad1*grad1'/(grad1*A*grad1');
    alpha2=grad2*grad2'/(grad2*A*grad2');
    alpha=2/(sqrt((1/alpha1-1/alpha2)^2+4*norm(grad2)^2/norm(x2-x1)^2)+1/alpha1+1/alpha2);
    x2=x2-alpha*grad2;
    x=x2;
    iterstep(m+1,:)=x;
    m=m+1;
end


step=max(size(iterstep))-1
我想求出它的迭代步数来
但是出来的结果总是不对
循环体好像进行不下去
我也不知道哪里错了
先谢谢各位了!
回复
分享到:

使用道具 举报

发表于 2006-11-14 08:36 | 显示全部楼层

回复

eps改为epsi;
把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现.

评分

1

查看全部评分

 楼主| 发表于 2006-11-15 16:17 | 显示全部楼层
为什么要将eps改成epsi
发表于 2006-11-15 16:51 | 显示全部楼层
原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi



请help eps一下
发表于 2006-11-16 14:18 | 显示全部楼层
原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi


eps为matlab内置的一个参数,eps近似为2.2e-16
发表于 2006-11-16 16:27 | 显示全部楼层
原帖由 xjzuo 于 2006-11-14 08:36 发表
eps改为epsi;
把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现.

有道理啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 01:25 , Processed in 0.063155 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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