[已解决] 大神帮我看看我的x计算了一次怎么不继续计算了,装不到H的矩阵里面,工作空间的x值在第二次运算的时候已经更新

[复制链接]
大脸猫d 发表于 2019-6-5 16:21:28
t=0.324;
U0=0.5;
N=1000;
U(1)=U0;
b=1;
i=1;
n=1;
H=zeros(1,101);
x=-1;
for n=n+1;
while(abs(b)>0.0001)
i=i+1;
U(i)=0.5+sin(pi.*(x-U(i-1).*t));
b=U(i)-U(i-1);
if(i>N);
    error('溢出');
end
end
U=U(i);
H(1,n)=U;
x=x+0.02;
end

点击运行后是这样子

点击运行后是这样子

最佳答案


TouAkira 发表于 2019-6-5 17:46:01
大脸猫d 发表于 2019-6-5 05:32
首先谢谢您的回复,我测试之后,x循环的问题解决了,但是在   
Up=U(i);
    H(1,n)=Up;

1.我根本看不懂你的代码到底想干啥
2.你的代码缺乏对b数值的重置,导致第一次while循环之后,b的绝对值被迭代小于判断条件后,即abs(b)<=0.0001,下一次的for循环中b值仍然有abs(b)<=0.0001,所以while循环被跳过了,i值也就不会变化,于是无论n值如何在for循环中增加,H(1,n)=U(i)实际都是同一个数值
3.我建议老老实实画个流程图,比如第一步那些变量被赋值,第二步执行什么样的条件判断,对不同判定结果在第三步分支有哪些处理,等等,你目前的代码实在是逻辑混乱。

6 条回复


大脸猫d 发表于 2019-6-5 16:23:24
想实现,每次一个x值得到一个H值,都装到H里面得到一系列值

TouAkira 发表于 2019-6-5 17:16:50
  1. for n=n+1;
复制代码

这里不对,导致for只执行一次
  1. t=0.324;
  2. U0=0.5;
  3. N=1000;
  4. U(1)=U0;
  5. b=1;
  6. i=1;
  7. n=1;
  8. H=zeros(1,101);
  9. x=-1;
  10. for n = 2:1:101
  11.     while(abs(b)>0.0001)
  12.         i=i+1;
  13.         U(i)=0.5+sin(pi.*(x-U(i-1).*t));
  14.         b=U(i)-U(i-1);
  15.         if (i>N)
  16.             error('溢出');
  17.         end
  18.     end
  19.     Up=U(i);
  20.     H(1,n)=Up;
  21.     x=x+0.02;
  22. end
复制代码

大脸猫d 发表于 2019-6-5 17:32:02
TouAkira 发表于 2019-6-5 17:16
这里不对,导致for只执行一次

首先谢谢您的回复,我测试之后,x循环的问题解决了,但是在   
Up=U(i);
    H(1,n)=Up;
是不是导致H的所有值都被赋为第一次计算的结果,我运行之后发现确实如此,也就是说x虽然循环了但每次H值仍为第一次计算值1.4999,就这个问题能不能再指导鄙人一些。
231.jpg
211.jpg

TouAkira 发表于 2019-6-5 17:46:01
大脸猫d 发表于 2019-6-5 05:32
首先谢谢您的回复,我测试之后,x循环的问题解决了,但是在   
Up=U(i);
    H(1,n)=Up;

1.我根本看不懂你的代码到底想干啥
2.你的代码缺乏对b数值的重置,导致第一次while循环之后,b的绝对值被迭代小于判断条件后,即abs(b)<=0.0001,下一次的for循环中b值仍然有abs(b)<=0.0001,所以while循环被跳过了,i值也就不会变化,于是无论n值如何在for循环中增加,H(1,n)=U(i)实际都是同一个数值
3.我建议老老实实画个流程图,比如第一步那些变量被赋值,第二步执行什么样的条件判断,对不同判定结果在第三步分支有哪些处理,等等,你目前的代码实在是逻辑混乱。
回复此楼

大脸猫d 发表于 2019-6-5 18:21:16
TouAkira 发表于 2019-6-5 17:46
1.我根本看不懂你的代码到底想干啥
2.你的代码缺乏对b数值的重置,导致第一次while循环之后,b的绝对值被 ...

感谢你的建议,我在循环后将b放大重置,使while的运行每次都能满足条件:handshake

大脸猫d 发表于 2019-6-5 18:22:36
TouAkira 发表于 2019-6-5 17:46
1.我根本看不懂你的代码到底想干啥
2.你的代码缺乏对b数值的重置,导致第一次while循环之后,b的绝对值被 ...

问题已经解决
1412.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表