Этот скрипт отлично работает для того, что я хочу. Это функция веса, которую я хочу свести к минимуму. Я написал внутри функции и во всем мире, и я заметил, что глобальная печать (W) является мое выражение и печать (W) внутри функции является массив значений, которые будут построены:Как использовать глобальную переменную (производное выражение) внутри функции
import numpy as np
from sympy import *
import matplotlib.pyplot as plt
#Weight function
tf = Symbol('tf')
l = 50/(0.54*tf) - tf
d = (tf*(2*l+2*(l-tf)/2))/(2*l*(l+tf)/2)
W = 15.7*tf-7.85*tf*d+7.85*d*50/(0.54*tf)
print(W)
def func(tf):
l = 50/(0.54*tf) - tf
d = (tf*(2*l+2*(l-tf)/2))/(2*l*(l+tf)/2)
W = 15.7*tf-7.85*tf*d+7.85*d*50/(0.54*tf)
print(W)
return W
b = np.linspace(1, 10, 201)
plt.plot(b, func(b))
plt.xlabel("tf", fontsize=18)
plt.ylabel("Weight", fontsize=18)
plt.grid()
plt.show()
Моя проблема происходит сейчас. Я хочу, чтобы также была построена производная функции веса. Но я не могу сделать это внутри функции, потому что он распознает как число (первый элемент массива). Первая печать дает мне выражение, которое я хочу построить, но я не могу отправить это выражение внутри функции. Как можно вызвать глобальную переменную (производное выражение), которая будет использоваться внутри функции?
dW_dtf = W.diff(tf)
print(dW_dtf)
def funcd(tf):
l = M/(a*tf) - tf
tw = tf
d = (tw*(2*l+2*(l-tw)/2))/(2*l*(l+tw)/2)
W = 15.7*tf-7.85*tf*d+7.85*d*M/(a*tf)
dW_dtf = W.diff(tf)
return dW_dtf
AttributeError: «numpy.ndarray» объект не имеет атрибута «диф»
Я открыт для других вариантов, чтобы сделать то, что я хочу. Я буду больше читать об оптимизации алгоритмов с помощью python, потому что мне придется решать более сложные задачи, но я хотел бы сделать такие основные проблемы без использования итерационных методов. Спасибо. Luis
Это работает очень хорошо. Спасибо, Кристоф –