Python численное решение экспоненциальной функции с двумя переменными - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть экспоненциальная функция с двумя известными переменными, x и y. Мне нужно найти значение у, когда я введу х. Однако мой код не смог go пройти и решить проблему. Моя функция и все соответствующие константы приведены ниже:

import math
import numpy as np
import scipy.optimize as optimize

x1=np.array([0,20])

Vt = 0.026
Io = 23*math.pow(10,-10)
Iph = 2.282
idf = 1
Ns = 60 
Nm = 1 
Rse = 0.5
Rsh = 1000
x = np.linspace(x1.min(),x1.max(),300)    
def equation(x,Iph,Io,Rse,Rsh,Ns,Nm,Vt):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh 
y = optimize.newton(equation(10,Iph,Io,Rse,Rsh,Ns,Nm,Vt), 7)

Текущий вывод:

 File "<ipython-input-172-93ede88c9b49>", line 16, in ivcurve_equation
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + v/Rsh + I*Rse/Rsh 

TypeError: can't multiply sequence by non-int of type 'float'

Ожидаемый вывод:

y = a real and positive value # >0

1 Ответ

1 голос
/ 14 февраля 2020

Посмотрите на документы и попробуйте выполнить "сопоставление с образцом". Параметры equation должны быть только переменными, а не константами. Вот рабочая версия вашего кода, которую вы должны адаптировать к своим потребностям:

import math
import numpy as np
import scipy.optimize as optimize

x1=np.array([0,20])

Vt = 0.026
Io = 23*math.pow(10,-10)
Iph = 2.282
idf = 1
Ns = 60
Nm = 1
Rse = 0.5
Rsh = 1000
x_arr = np.linspace(x1.min(),x1.max(),300)
x = x_arr[0]
def equation(y):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh

result = optimize.newton(equation, 7)

print(result)

Теперь, если вы хотите вывод для массива x, попробуйте это:

def equation(y,x):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh

result = [optimize.newton(equation, 7, args = (a,)) for a in x_arr]

print(result)

Надежда это помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...