我试着按照我的老师模型做一个简单的假位置代码,但是无法让它真正发挥作用。不确定我的if - there是否正确,或者它只说了什么,Method Failed,但我知道应该有P=3.0571和i=16的答案。编程和matlab都是全新的,因此任何帮助都将得到极大的重视。谢谢
%False Position
%(x^2-4x+4-lnx=0 for 2<=x<=4)
p0=2; p1=4; TOL=10^-6; N=100;
q0=p0^2-4*p0+4-log(p0);
q1=p1^2-4*p1+4-log(p1);
i=2;
while i<=N
p=p1-q1*(p1-p0)/(q1-q0);
if abs(p-p1)<TOL
disp('False Position')
p
i
break
end
i=i+1;
q=p^2-4*p+4-log(p);
if q*q1<0
p0=p1;
q0=q1;
else
p1=p;
q1=q;
end
end
if i>=N disp('Method Failed')
end发布于 2013-09-16 06:21:46
我不太熟悉假位置法,但似乎你试图通过在每一步缩小某个区间来求某个函数的零点,方法是根据某些条件将左右边设置为某个中间值。我认为您的if中有一个bug :在q*q1<0的情况下,您将左边沿设置为与右边缘相同的值。您可能需要将其更改为:
if q*q1<0
p0=p;q0=q;
else
p1=p;q1=q;
end注意,我只将p1更改为p,将q1更改为q。
对于其他代码,您的代码看起来不错,但我建议进行一些小的更改,以使其更具可读性:将所有p和q更改为x和y,并可能将函数定义为函数句柄(输入help function_handle)。现在,您正在三个不同的地方定义您的函数。如果您想在将来更改您的函数,那么您必须在所有这些地方进行完全相同的更改,否则就会有错误。最好是不重复你自己,只将您的函数定义为fun = @(x) x^2-4*x+4-log(x);,然后使用它作为y0 = fun(x0)和y1 = fun(x1)等。
https://stackoverflow.com/questions/18821313
复制相似问题