當前位置:編程學習大全網 - 編程語言 - 屬性mul怎麽改

屬性mul怎麽改

登錄

首頁

學習

實踐

活動

工具

TVP

返回騰訊雲官網

如何解決“mul對象沒有屬性”cos“”

原文

mkrieger1修改於2021-08-02

python

sympy

如何解決多目標問題?

import sympy as sym

from sympy import lambdify

x = sym.Symbol('x')

n = sym.Symbol('n')

f = sym.sin(n*x)

derivative_f = f.diff(x)

derivative_f = lambdify(x, derivative_f)

x = float(input('x:'))

print(derivative_f(x))

print(derivative_f)

復制

如果我輸入2,那麽預期的結果應該是2*cos(2*x)。

瀏覽 42關註 0得票數 0

原文

2 個回答

高票數

操作

JohanC已采納

回答於2021-08-02

得票數 2

您的代碼包含壹些誤解。壹個問題是壹個重要的通用編程規則:嘗試對具有不同含義的變量使用不同的變量名。因此,x不應該被賦值為浮點數,因為它以前是壹個符號變量。derivative_f是壹個符號表達式,不應該被賦值為lambdify的結果。

請註意,sympy的符號世界與非漸近函數的數字世界不能很好地混合。lambdify在這些世界之間建立了壹座橋梁,從完全符號到完全數字。例如,使用lambdify創建的函數不再具有訪問符號n的權限。

代碼lambdify(x, derivative_f)包含錯誤。derivative_f是壹個包含兩個符號變量(x和n)的符號表達式,因此需要將其調用為derivative_f_x_n = lambdify((x, n), derivative_f) (也為結果指定了壹個不同的名稱)。之後,您可以將數字表達式用作derivative_f_x_n(7, 8),但不能再使用符號參數。

對於您似乎正在嘗試做的事情,lambdify是不夠的。要獲得替換了x的派生結果,可以直接在derivative_f的符號版本上調用.subs(x, new_value)輸出:n*cos(2.0*n)

還要註意,漸近強烈傾向於使用精確的符號表達式,使用浮點數不可避免地會帶來近似值。只要有可能,建議使用整數、漸近分數(sym.S(1)/2)或符號表達式(sym.sqrt(5))。

您還可以使用關於x的派生函數,然後替換為n

print(f.diff(x).subs(n, 2))

復制

輸出:2*cos(2*x)

要在以後的數值計算中使用該函數,在替換之後,只剩下壹個符號變量(x):

g = lambdify(x, f.diff(x).subs(n, 2))

復制

您可以輸入help(g)查看其生成的源代碼:然後妳可以使用g來創建matplotlib圖。在lambdify之後,壹切都不再是象征性的。

  • 上一篇:適合壹年級小孩看的電影
  • 下一篇:編程是什麽意思?
  • copyright 2024編程學習大全網