需要一个Newton Raphson的matlab函数

时间:2013-11-25 00:04:39

标签: matlab function numerical-methods newtons-method

我有一个多项式f(x)= x ^ 3-a我需要带参数的matlab函数

函数[x,err] = cubic1(a,xinit,eps) 哪里 xinit:初始近似值 eps:执行迭代直到近似误差小于该数字 x:函数的根逼近,它是一个数组。 relerr:与迭代对应的近似错误,它是一个数组。

你知道吗?

2 个答案:

答案 0 :(得分:0)

function [x,err] = cubic1(f,df_dx,x0,eps)
   err = Inf;
   x = x0;
   while abs(err) > eps
      x_old = x;
      x = x_old - f(x_old)./df_dx(x_old);
      err = x - x_old;
   end

调用cubic1函数,

a = 1; % you can change a
f = @(x)(x.^3-a);
df_dx = @(x)(3*x.^2);
x0 = 1;
eps = 1e-7;
[x,err] = cubic1(@f,@df_dx,x0,eps);

答案 1 :(得分:0)

关于在lennon310的解决方案中重命名函数的补充

file cubic1.m

function [x,err] = cubic1(a,xinit,eps)
    f = @(x)(x.^3-a);
    df_dx = @(x)(3*x.^2);
    [x,err] = newton_root(@f,@df_dx,xinit,eps);
end

function [x,err] = newton_root(f,df_dx,x0,eps)
    err = Inf;
    x = x0;
    while abs(err) > eps
        x_old = x;
        x = x_old - f(x_old)./df_dx(x_old);
        err = x - x_old;
    end
end

对于f(x)= x ^ 2-a / x,使用牛顿方法得到更快的收敛,

file cubic2.m

function [x,err] = cubic2(a,xinit,eps)
    err = Inf;
    x = xinit;
    while abs(err) > eps
        x3=x.^3;
        x_new = x*(x3+3*a)/(3*x3+a);
        err = x_new - x;
        x=x_new
    end
end