我有一个多项式f(x)= x ^ 3-a我需要带参数的matlab函数
函数[x,err] = cubic1(a,xinit,eps) 哪里 xinit:初始近似值 eps:执行迭代直到近似误差小于该数字 x:函数的根逼近,它是一个数组。 relerr:与迭代对应的近似错误,它是一个数组。
你知道吗?答案 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