簡體   English   中英

在 python 中編寫迭代時出現問題

[英]Problem in writing an itegration in python

我有 2 列 arrays。 我還有一個使用 2 列的方程(積分)。 我需要使用兩列值來獲得整數值。 從某種意義上說,對於每個s都有c 添加第三列,這將是基於特定索引號的積分結果作為上限和下限。 例如,看看下面的值:

ID=50
s = np.arange(0,100)
c = np.arange(200,300)
lanr=-4.56
lani=-2.33

我需要解決的集成是c(s) * exp(lanr * s) * sin (lani * s) 現在我的問題是添加第三列與 0,s[ID] 之間的積分結果,這意味着我需要有我在s=0s=ID之間的問題中提到的帶有細節的積分。 我在下面寫了一些不起作用的東西:

from scipy.integrate import quad
import numpy as np
from sympy import *
def f(s):
    return c*(s) * exp(lanr * s) * sin (lani * s)
integ = []
for i in enumerate(s):
    g = c * np.exp(lanr * s) * np.sin(lani * s)

    integrate( f(s), s,0,ID)

也許以下內容與您正在尋找的內容相似?

一開始,我們可以嘗試只象征性地工作。 s是基本變量。 c is a function of s , in this case writing c = s + 200 makes c such a function.

f=c*exp(lanr*s)*sin(lani*s)是更復雜的 function 的s print(f)給出-(s+200)*exp(-4.56*s)*sin(2.33*s)

現在,您似乎對f的積分感興趣,因為s0到某個值。 我們稱該值為t 然后,該積分將是t的 function g

from sympy import exp, sin, symbols, integrate, lambdify

s, t = symbols('s t')
lanr = -4.56
lani = -2.33
c = s + 200
f = c * exp(lanr * s) * sin (lani * s)
g = integrate(f, (s, 0, t))

如果只需要 101 個值,我們可以留在 sympy 中:

values = [g.subs(t, ti).evalf() for ti in range(0, 101)]

如果需要更多的數值計算, lambdify()可以將g從 sympy 轉換為 numpy。 然后 numpy 也可以計算前 101 個值(這比 sympy 工作得快得多,但這僅在需要更多計算時才重要):

g_np = lambdify(t, g)

import  numpy as np

x = np.arange(0,100)
y = g_np(x)

在這種情況下,結果將是

array([  0.        , -17.66531171, -17.80584637, -17.80185932,
       -17.8019015 , -17.80190133, -17.80190133, -17.80190133,
       -17.80190133, -17.80190133, -17.80190133, -17.80190133,
       -17.80190133, -17.80190133, -17.80190133, -17.80190133,
       ...

這看起來很奇怪。 也許在某個地方有一些誤解? 還是原來的公式有錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM