Warm tip: This article is reproduced from serverfault.com, please click

其他-在MATLAB中为Newton Raphson方法编写时如何查找输入函数的微分

(其他 - How to find differential of input function while writing in MATLAB for Newton Raphson method)

发布于 2020-11-27 17:05:13

我一直在寻找一种区分函数的方法,由用户输入并根据牛顿拉弗森方法对其进行区分,但是由于不建议使用内联函数,因此有什么方法可以将用户输入的符号函数用于在那里?我尝试将内联转换为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世界中是一个新手。

Questioner
Kanchan Bharti
Viewed
0
MichaelTr7 2020-11-28 08:55:59

使用功能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跑