0

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

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

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)));

4

2 回答 2

0

如果你正在寻找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

不需要符号数学。

于 2019-09-05T07:36:42.663 回答
0

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

导数作为变量

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

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

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

于 2019-09-05T06:30:44.650 回答