Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2017 00:23:31

Cucumber
Зарегистрирован: 2017-11-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Двойной интеграл функции и график результатов.

Я в Питоне зелёный огурец. Не получается собрать результаты интегрирования функции в список или массив для построения графика. Пожалуйста помогите понять что я делаю не так.

'Fadum '

 import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import dblquad
B=5 # foundation width
L=4 #foundation length
q=1
h=1.0 # calculation depth
N=10 # layer number
d=2# foundation depth
d_R=5 #rigid layer underlying
i=np.array(range(N+1))
print('i=',i)
delta_t=(d_R-d)/N
print('delta_t=',delta_t, 'm')
z=np.array((delta_t*i)-delta_t/2)
z=z[1:N+1]
print('z=',z)
def f(y,x):
   
         return ((3*q*z**3)/(2*np.pi)) * (1/(x**2+y**2+z**2)**(5/2))
for item in z:        
         ans, err=integrate.dblquad(f, 0, B,lambda x : 0,lambda x : L)
print(ans)  
print ('ans=',ans)
L=4
q=1
h=1.0 # calculation depth
N=10 # layer 
d=2 # foundation depth
d_R=5 #rigid layer underlying
i=np.array(range(N+1))
print('i=',i)
delta_t=(d_R-d)/N
print('delta_t=',delta_t, 'm')
z=np.array((delta_t*i)-delta_t/2)
z=z[1:N+1]
print('z=',z)
def f(y,x):
   
         return ((3*q*z**3)/(2*np.pi)) * (1/(x**2+y**2+z**2)**(5/2))
for item in z:        
         ans, err=integrate.dblquad(f, 0, B,lambda x : 0,lambda x : L)
print(ans)  
print ('ans=',ans)

Отредактировано FishHook (Ноя. 4, 2017 08:25:33)

Офлайн

#2 Ноя. 4, 2017 13:34:16

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Двойной интеграл функции и график результатов.

Вы хотите проинтегрировать f(x,y) при различных значениях параметра z. z - у вас массив.

Видимо нужно следующее добавить:

 def intf(z):
    def f(y,x):
         return # тоже что было у вас
    return integrate.dblquad(f, 0 ,.... #как у вас далее)
result = []
for value in z:
     result.append(intf(value)[0])
plt.plot(z, result)
plt.show()

Кроме того:
np.arange(N+1) можно вместо np.array(range(…))
z = np.array(…) , np.array – здесь избыточно, т.к. i уже np.array, а арифметические операции с ним будут приводить к np.array.


Офлайн

#3 Ноя. 4, 2017 17:38:57

Cucumber
Зарегистрирован: 2017-11-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Двойной интеграл функции и график результатов.

Спасибо за помощь но у меня этот фрагмент кода (интегрирование и сбор результата в массив) не хочет работать. Наверное в голове каша и руки не оттуда….

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import dblquad

B=5 # foundation width
L=4 #foundation length
q=1
h=1.0 # calculation depth
N=10 # layer number
d=2# foundation depth
d_R=5 #rigid layer underlying

i=np.array(range(N+1))
print('i=',i)

delta_td_R-d)/N
print('delta_t=',delta_t, ‘m’)

zdelta_t*i)-delta_t/2
z=z
print('z=',z)

def intf(z):
def f(y,x):
return ((3*q*z**3)/(2*np.pi)) * (1/(x**2+y**2+z**2)**(5/2)
return integrate.dblquad(f, 0, B,lambda x : 0,lambda x : L)
result =
for value in z:
result.append(intf(value))

plt.plot(z, result)
plt.show()

Пишет:
File “<ipython-input-5-56a575a1e341>”, line 28
return integrate.dblquad(f, 0, B,lambda x : 0,lambda x : L)
^
SyntaxError: invalid syntax

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version