【问题标题】:Fixed point iterative method error MATLAB定点迭代法错误MATLAB
【发布时间】:2019-09-05 06:12:34
【问题描述】:

我正在尝试使用具有初始近似值x(1)=0 的定点迭代方法来获得方程f(x)=3x+sin(x)e^x=0 的根的近似值。 停止标准是

|x(k+1)-x(k)|

x(1) = 0;
n = 100;

for k = 1:n
    f(k) = 3*x(k) +sin(x(k))-exp(x(k));

    if (abs(f(k))<0.0001)
        break;
    end
    syms x
    diff(f(k));
    x(k+1) = x(1)- (f(k))/(diff(f(k)));
end
[x' f']

这是我得到的错误:错误使用/矩阵尺寸必须 同意。 prac2Q2 中的错误(第 15 行) x(k+1) = x(1)- (f(k))/(diff(f(k)));

【问题讨论】:

  • 欢迎来到 SO!... 您为函数 f 编写了两个不同的术语,一个是 sin( ) * exp( ),另一个是 sin( ) - exp( )
  • 谢谢!正确的应该是 sin() - exp()。
  • 即使它有效,您也会发现函数的固定点而不是根!检查我的答案。实际上你解方程3*x +sin(x)-exp(x) = x,但你想解3*x +sin(x)-exp(x) = 0

标签: matlab


【解决方案1】:

我建议手动计算导数并将该术语用作分母或将导数保存在另一个变量中并将其用作分母。

作为变量的导数

f(k) = ...;
df(k) = diff(f(k));

x(k+1) = x(k) - f(k) / df(k);

PS:我无法对此进行测试,因为我现在无法访问符号工具箱。

【讨论】:

    【解决方案2】:

    如果您正在寻找 3*x +sin(x)-exp(x) 的根,您想解决这个等式:

    3*x + sin(x) - exp(x) = 0
    

    最简单的方法是将x 隔离在等式的一侧:

    x = (exp(x) - sin(x))/3 % now iterate until x = (exp(x) - sin(x))/3
    

    现在我建议使用更简单的定点方法:x(k+1) = (x(k)+f(x(k)))/2

    x = 1                      % x0
    
    while 1
        y = (exp(x)-sin(x))/3; % we are looking for the root not for a fixed point !!! y = f(x)
        x = (x+y)/2            % after a few iterations x == y, so x = (x+y)/2 or x = 2x/2
        if abs(x-y) < 1e-10
            break
        end
    end
    

    你得到正确的结果:

    x =  0.36042
    

    不需要符号数学。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2012-08-22
      • 2015-03-28
      • 2015-09-26
      相关资源
      最近更新 更多