特定值的符号函数的导数

问题描述

我试图在 Octave 中使用此代码来评估函数 fdf 在特定 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()