如何将 1x1 sym 转换为 function/expression?
How to convrt 1x1 sym to function/expression?
您可以在下面找到已实现的牛顿法。
function y = NewtonRoot(Fun, DFun, Xest,Err, imax)
%Fun - function
%DFun- derivative of F
%Xest - initial estimate of solution
%Err - maximum error
%y - solution
%EXAMPLE: NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)
for i= 1: imax
Xi = Xest - feval(Fun,Xest)/feval(DFun,Xest);
if abs((Xi-Xest)/Xest) < Err
y = Xi;
break
end
Xest= Xi;
end
if i== imax
fprint('Solution was not obtained in %i iterations.\n', imax)
y=('No answer');
end
正在运行:
NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)
但实际上我想计算更复杂函数的导数。
因此,我尝试使用 diff 函数,但它不起作用......你能帮帮我吗?
这是我的暂定:
syms y(x) x
y=@(x)x^2-4
dy = diff(y,x)
NewtonRoot(y,@(x)diff(y,x),1.3, 0.001, 100)
您可以使用matlabFunction
函数,它允许将符号表达式转换为函数句柄。因此,对于这个例子:
syms y(x) x
y=@(x)x^2-4;
dy = diff(y,x);
NewtonRoot(y, matlabFunction( diff(y,x)), 1.3, 0.001, 100)
显然效果很好。
您可以在下面找到已实现的牛顿法。
function y = NewtonRoot(Fun, DFun, Xest,Err, imax)
%Fun - function
%DFun- derivative of F
%Xest - initial estimate of solution
%Err - maximum error
%y - solution
%EXAMPLE: NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)
for i= 1: imax
Xi = Xest - feval(Fun,Xest)/feval(DFun,Xest);
if abs((Xi-Xest)/Xest) < Err
y = Xi;
break
end
Xest= Xi;
end
if i== imax
fprint('Solution was not obtained in %i iterations.\n', imax)
y=('No answer');
end
正在运行:
NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)
但实际上我想计算更复杂函数的导数。 因此,我尝试使用 diff 函数,但它不起作用......你能帮帮我吗?
这是我的暂定:
syms y(x) x
y=@(x)x^2-4
dy = diff(y,x)
NewtonRoot(y,@(x)diff(y,x),1.3, 0.001, 100)
您可以使用matlabFunction
函数,它允许将符号表达式转换为函数句柄。因此,对于这个例子:
syms y(x) x
y=@(x)x^2-4;
dy = diff(y,x);
NewtonRoot(y, matlabFunction( diff(y,x)), 1.3, 0.001, 100)
显然效果很好。