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

'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)
scidam
Вы хотите проинтегрировать 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.


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

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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB