首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用matlab实现简单虚假定位

利用matlab实现简单虚假定位
EN

Stack Overflow用户
提问于 2013-09-16 06:03:41
回答 1查看 2.5K关注 0票数 1

我试着按照我的老师模型做一个简单的假位置代码,但是无法让它真正发挥作用。不确定我的if - there是否正确,或者它只说了什么,Method Failed,但我知道应该有P=3.0571i=16的答案。编程和matlab都是全新的,因此任何帮助都将得到极大的重视。谢谢

代码语言:javascript
运行
复制
%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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-16 06:21:46

我不太熟悉假位置法,但似乎你试图通过在每一步缩小某个区间来求某个函数的零点,方法是根据某些条件将左右边设置为某个中间值。我认为您的if中有一个bug :在q*q1<0的情况下,您将左边沿设置为与右边缘相同的值。您可能需要将其更改为:

代码语言:javascript
运行
复制
if q*q1<0
    p0=p;q0=q;
else
    p1=p;q1=q;
end

注意,我只将p1更改为p,将q1更改为q

对于其他代码,您的代码看起来不错,但我建议进行一些小的更改,以使其更具可读性:将所有pq更改为xy,并可能将函数定义为函数句柄(输入help function_handle)。现在,您正在三个不同的地方定义您的函数。如果您想在将来更改您的函数,那么您必须在所有这些地方进行完全相同的更改,否则就会有错误。最好是不重复你自己,只将您的函数定义为fun = @(x) x^2-4*x+4-log(x);,然后使用它作为y0 = fun(x0)y1 = fun(x1)等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18821313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档