robinforever 发表于 2008-5-26 21:54

编程模拟遇到的一个问题

编程模拟碰到的一个问题,我对两个程序进行了对比,程序一是没有问题的:
程序一:
clear;
x=2.5;y=25;a=0.1;b=0.2;i=1;
while x>0
    z=a*y+b*x;
    x=x-a*z;
    y=b*(y-z+y;
    X(i)=x;
   Y(i)=y;
    i=i+1;
end
plot(X,Y)
但是程序二却不知道该怎么解决,该程序中第一个等式必须要先求出z,下面的运算才能进行下去,我尝试过用solve求z,但是不行,请求达人给予指点,可以联系我邮箱robinforever@zju.edu.cn真是感激不尽!
程序二:
clear;
x=2.5;y=25;a=0.1;b=0.2;i=1;
while x>0
    z=a*y+b*x+log(z);
    x=x-a*z;
    y=b*(y-z+y;
    X(i)=x;
   Y(i)=y;
    i=i+1;
end

sigma665 发表于 2008-5-26 22:07

回复 楼主 的帖子

y=b*(y-z+y;
你确定你能运行吗,第一个

robinforever 发表于 2008-5-26 22:17

我输入失误,括号少了半边,应该是y=b*(y-z)+y

sigma665 发表于 2008-5-27 07:41

先给个z初值
然后迭代呢

whatman 发表于 2008-5-27 09:39

你的程序一貌似是死循环啊,还是你没有把变量给全

robinforever 发表于 2008-5-27 14:07

程序一应该不是死循环啊,我自己也运行过,可以的;
程序二我笔算了一下应该也不是死循环,但是我不知道怎么把z求出来,相当于 z=a*y+b*x+log(z) 要循环求解了,用solve不行的,楼上说的用迭代我也试过了,没有成功,很烦啊,弄了很久了,貌似一个很简单的程序,就是不知道该怎么办…… 求达人详解迷津,不胜感激啊!

robinforever 发表于 2008-5-27 19:02

我已经找到程序二的解决方法了,我一个初学者为这个问题真是破费周折,最后一个朋友帮我解决了,现贴出来以饷和我一样的初学者,同时感谢对我的帖子表示关心的楼友!
clear;
x=2.5;y=25;a=0.1;b=0.2;i=1;
while x>0
   syms z
    z=a*y+b*x+log(z)-z;
    z=solve(z);
    z=eval(z);
    x=x-a*z;
    y=b*(y-z)+y;
    X(i)=x;
   Y(i)=y;
    i=i+1;
end
plot(X,Y)

ch_j1985 发表于 2008-5-27 19:21

原帖由 robinforever 于 2008-5-27 19:02 发表 http://www.chinavib.com/forum/images/common/back.gif
我已经找到程序二的解决方法了,我一个初学者为这个问题真是破费周折,最后一个朋友帮我解决了,现贴出来以饷和我一样的初学者,同时感谢对我的帖子表示关心的楼友!
clear;
x=2.5;y=25;a=0.1;b=0.2;i=1;
while x ...

请问您运行7楼的程序时,有没有报错?

robinforever 发表于 2008-5-27 23:20

抱歉,7楼程序y的赋值我弄错了,y=25导致程序没有解析解所以报错;程序本身没有问题
比如将赋值改为y=3,程序是可以运行的。
页: [1]
查看完整版本: 编程模拟遇到的一个问题