我一直在寻找一种区分函数的方法,由用户输入并根据牛顿拉弗森方法对其进行区分,但是由于不建议使用内联函数,因此有什么方法可以将用户输入的符号函数用于在那里?我尝试将内联转换为sym,但是此代码:
a=input('Enter function with right hand side zero:','s');
x(1)=input('Enter Initial Guess:');
Es=input('Enter allowed Error:');
f=inline(a)
dif=diff(sym(a));
d=inline(dif);
for i=1:100
x(i+1)=x(i)-((f(x(i))/d(x(i))));
err(i)=abs((x(i+1)-x(i))/x(i));
if err(i)<error
break
end
end
disp(x(i));
接受每个参数后给出此错误:
Error using sym>convertChar (line 1557)
Character vectors and strings in the first
argument can only specify a variable or
number. To evaluate character vectors and
strings representing symbolic expressions, use
'str2sym'.
Error in sym>tomupad (line 1273)
S = convertChar(x);
Error in sym (line 229)
S.s = tomupad(x);
Error in Newton_Raphson (line 6)
dif=diff(sym(a));
我可以看到以前有很多人面临相同的困难,我也像尝试过一样尝试了这些解决方案,str2sym
但是在包含差分的行上却抛出了相同类型的错误。我想念什么吗?我在MATLAB世界中是一个新手。
使用功能str2func()
,sym()
并matlabFunction()
允许你将参数转换为所需要的相应的输入类型diff()
的功能。下面是一个小小的测试/操场脚本,它带有一个匿名函数,该匿名函数由@()
指示因变量/输入变量指示。
• str2func()
:从字符串转换→匿名函数(函数句柄)
• sym()
:从匿名函数(函数句柄) →符号函数转换
•matlabFunction:
从符号函数→匿名函数(函数句柄)转换
a = input('Enter function with right hand side zero:','s');
f = str2func(a);
dif = diff(sym(f));
d = matlabFunction(dif);
%Testing that the function handles (anonymous functions) work%
f(5)
d(2)
使用MATLAB R2019b跑
非常感谢!那行得通。
没问题,很高兴!!!:)