Как решить уравнение, которое имеет переменную решения в форме функции по обе стороны уравнения - PullRequest
0 голосов
/ 19 мая 2018

Я хочу построить график уравнения в Python, который имеет переменную решения с обеих сторон в виде некоторой функции.Уравнение:

i = Ip - Io*(exp((V+i*R1)/(n*Vt)) - 1) - (V +I*R1)/(R2)

, где Ip, Io, n, R1, R2, Vt - некоторые константы.

Я хочу перебрать V в диапазоне (0,10) и получить значения для i, используяPython и построить график V-i.

import numpy as np
from sympy import *
import matplotlib.pyplot as plt
r = 50
V = np.linspace(0,10,r)

def current():
    current = []
    for t in V:
        i = np.zeros(r)
        Ipv = 3
        Rs = 0.221
        Rsh = 415
        n = 2
        m = 1.5
        T = 302
        Eg = 1.14
        K = 1.3
        Vt = T/11600
        Io = K*(T**m)*exp(-Eg/(n*Vt))
        i = Ipv - Io *(exp((t + Rs*i)/(n*Vt)) - 1) - (t + Rs * i)/Rsh
        current.append(i)
    return np.array(current)

Icurrent = current()
plt.plot(V,Icurrent)
plt.show()

Я сделал это, но это не работает.

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 19 мая 2018

Кажется, ваша проблема в том, что вы смешиваете numpy массивы со скалярной math функцией. Не делайте этого. Замените его соответствующей numpy функцией:

import numpy as np
import matplotlib.pyplot as plt
r = 50
V = np.linspace(0,10,r)
print(V)

def current():
    current = []
    for t in V:
        i = np.zeros(r)
        Ipv = 3
        Rs = 0.221
        Rsh = 415
        n = 2
        m = 1.5
        T = 302
        Eg = 1.14
        K = 1.3
        Vt = T/11600
        Io = K*(T**m)*np.exp(-Eg/(n*Vt))
        i = Ipv - Io *(np.exp((t + Rs*i)/(n*Vt)) - 1) - (t + Rs * i)/Rsh
        current.append(i)
    return np.array(current)

Icurrent = current()
plt.plot(V,Icurrent)
plt.show()

Вывод:
enter image description here

Я бы предложил использовать scipy.fsolve, но, похоже, ваш подход работает.

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