如何解决特定值的符号函数的导数
我试图在 Octave 中使用此代码来评估函数 f
、df
在特定 x
值处的导数:
pkg load symbolic;
syms x;
f = @(x) sqrt(2*x+1) - sqrt(x+4);
disp(f);
df = diff(f,x);
例如我尝试了 df(4)
和 eval(df,4)
,
但他们都没有给出语法或其他错误。
此代码的主要功能是使用这些值通过 Newton-Raphson 方法找到函数 f
根。
解决方法
您将匿名函数与符号函数混淆了。您的 f
是一个匿名函数。它不使用符号变量 x
,因为 x
在这个函数中是局部的,它是一个输入参数。该函数将对您提供的任何输入进行数值评估。
定义一个符号函数如下:
pkg load symbolic
syms x
f = sqrt(2*x+1)-sqrt(x+4)
df = diff(f,x)
输出:
>> f = sqrt(2*x+1)-sqrt(x+4)
f = (sym)
_______ _________
- ╲╱ x + 4 + ╲╱ 2⋅x + 1
>> df = diff(f,x)
df = (sym)
1 1
─────────── - ───────────
_________ _______
╲╱ 2⋅x + 1 2⋅╲╱ x + 4
要评估给定 x
的函数,您可以使用 subs
并将结果转换为 double
:
double(subs(df,x,4))
这将返回值 0.15656。
,在 MATLAB 中
一种可能性是通过使用 /tmp/560B3FBA-E1E9-48E8-B069-8958D75A2043.L2LFYF/main.swift:16:6: error: consecutive statements on a line must be separated by ';'
root1: Double = (b + sqrt((b * b) - 4 * a * c)/(2 * a)
^
;
/tmp/560B3FBA-E1E9-48E8-B069-8958D75A2043.L2LFYF/main.swift:16:6: error: expected expression
root1: Double = (b + sqrt((b * b) - 4 * a * c)/(2 * a)
^
/tmp/560B3FBA-E1E9-48E8-B069-8958D75A2043.L2LFYF/main.swift:16:1: error: use of unresolved identifier 'root1'
root1: Double = (b + sqrt((b * b) - 4 * a * c)/(2 * a)
^~~~~
函数进行转换,将函数 df
更改为匿名函数/函数句柄:
符号→匿名函数/函数句柄
使用 matlabFunction()
函数也可以,但我觉得它不太优雅。
subs()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。