Я пытаюсь построить нулевые линии для нелинейной системы и определить по ней фиксированные точки. Однако до сих пор мой код был недостаточно хорош для построения графиков. В настоящее время я могу получить только пустой график и только с различными значениями предположения, которые пытались найти корень.
Моя цель - создать графики для g1 и I так, чтобы пересекающиеся точки были фиксированными точками, координаты которых необходимо изучить. Некоторые координаты, необходимые для этого, импортируются из пути к файлу MATLAB, включенного в код.
Пожалуйста, сообщите мне об исправлениях/исправлениях, которые необходимо внести. Мой код ниже:
import sympy as sp
from sympy import nsolve, Abs, symbols
import numpy as np
from scipy.optimize import brentq
from pymatreader import read_mat
import matplotlib.pyplot as plt
import pandas as pd
import traceback
import math
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)
from matplotlib.lines import Line2D
from sympy import Heaviside
# --- Load MAT file (adjust path) ---
file_path = r'E:\data&plot\data 3\set5\data1_x0_03.mat'
data = read_mat(file_path)
data1 = data['data1']
vars_ = data1['variable']
consts = data1['constant']
t = 9999
j = 99
i = 9999
# --- Pull constants ----
H0_val = consts.get('H0')
chi0_val = consts.get('chi0')
chi1_val = consts.get('chi1')
D0_val = consts.get('D0')
D1_val = consts.get('D1')
alpha_chi_val = consts.get('alphachi') # note: your const key 'alphachi'
alpha_D_val = consts.get('alphaD')
chi_val = consts.get('chi_growth', consts.get('chi_', None))
beta_val = consts.get('beta_suppression', consts.get('beta_', None))
lam_val = consts.get('lambda_suppress', consts.get('lambda', None))
mu_c_val = consts.get('critgradpressure', consts.get('critgradpressure', None))
Q_val = float(vars_['Q'][i, j])
I_val = float(vars_['turbulence'][i, j])
g1_val = float(vars_['gradpressure'][i, j])
#print(mu_c_val)
# check for missing values
missing = [k for k,v in [
('chi0', chi0_val), ('chi1', chi1_val), ('D0', D0_val), ('D1', D1_val),
('alphachi', alpha_chi_val), ('alphaD', alpha_D_val),
('chi_growth/chi_', chi_val), ('beta_suppression/beta_', beta_val),
('lambda_suppress/lambda', lam_val), ('critgradpressure', mu_c_val)
] if v is None]
if missing:
raise RuntimeError("Missing constants in MAT file: " + ", ".join(missing))
# Convert to floats (some matlab values may already be floats)
H0_val = float(H0_val)
chi0_val = float(chi0_val)
chi1_val = float(chi1_val)
D0_val = float(D0_val)
D1_val = float(D1_val)
alpha_chi_val = float(alpha_chi_val)
alpha_D_val = float(alpha_D_val)
chi_val = float(chi_val)
beta_val = float(beta_val)
lam_val = float(lam_val)
mu_c_val = float(mu_c_val)
#print(mu_c_val)
# Using v_eQ = -g1**2 => v_eQ**2 = g1**4
tot_vals = []
tot = []
I_null=[]
g1_safe=[]
def g1_dot_nullcline (g1_val, Q_val, chi0_val, chi1_val, alpha_chi_val,
I_expr, chi_val, beta_val, lam_val, mu_c_val, H0_val, tot, tot_vals):
g1_val = np.asarray(g1_val)
print(g1_val)
g1_safe = np.where(np.abs(g1_val) < 1e-12, 1e-12, g1_val)
v_eQ_sq = ( -g1_safe**2 )**2 # (-g1^2)^2 = g1^4
A = Q_val*(chi0_val + chi1_val*I_val / (1 + alpha_chi_val*(-g1_safe**2)))**(-1)
term1 = np.abs(-g1_safe - mu_c_val)
term = term1 * (term1 > 0) # Heaviside Θ
term_t = term - lam_val * v_eQ_sq
B = chi_val*term_t-beta_val*I_val**2
tot_val=A*B-H0_val
tot_vals.append(tot_val)
return (tot_vals)
for g1 in g1_safe:
# Try solving in a reasonable I-range
try:
root = brentq(nullcline_eq, -30, 30, args=(g1,))
I_null.append(root)
except:
I_null.append(np.nan)
I_null = np.array(I_null)
# --- Plot ---
plt.figure(figsize=(8,6))
plt.plot(g1_safe, I_null, lw=3)
plt.xlabel("g₁")
plt.ylabel("I (nullcline)")
plt.title("g₁-nullcline: I(g₁) from g1_dot = 0")
plt.grid(True)
plt.show()
print("total=", g1_dot_nullcline(g1_val, Q_val, chi0_val, chi1_val, alpha_chi_val, I_val,
chi_val, beta_val, lam_val, mu_c_val, H0_val, tot, tot_vals))
g1_val = np.asarray(g1_val)
print(tot_vals)
Подробнее здесь: https://stackoverflow.com/questions/798 ... cline-plot
Почему я получаю пустой график с нулевым наклоном? [закрыто] ⇐ Python
Программы на Python
-
Anonymous
1764533677
Anonymous
Я пытаюсь построить нулевые линии для нелинейной системы и определить по ней фиксированные точки. Однако до сих пор мой код был недостаточно хорош для построения графиков. В настоящее время я могу получить только пустой график и только с различными значениями предположения, которые пытались найти корень.
Моя цель - создать графики для g1 и I так, чтобы пересекающиеся точки были фиксированными точками, координаты которых необходимо изучить. Некоторые координаты, необходимые для этого, импортируются из пути к файлу MATLAB, включенного в код.
Пожалуйста, сообщите мне об исправлениях/исправлениях, которые необходимо внести. Мой код ниже:
import sympy as sp
from sympy import nsolve, Abs, symbols
import numpy as np
from scipy.optimize import brentq
from pymatreader import read_mat
import matplotlib.pyplot as plt
import pandas as pd
import traceback
import math
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)
from matplotlib.lines import Line2D
from sympy import Heaviside
# --- Load MAT file (adjust path) ---
file_path = r'E:\data&plot\data 3\set5\data1_x0_03.mat'
data = read_mat(file_path)
data1 = data['data1']
vars_ = data1['variable']
consts = data1['constant']
t = 9999
j = 99
i = 9999
# --- Pull constants ----
H0_val = consts.get('H0')
chi0_val = consts.get('chi0')
chi1_val = consts.get('chi1')
D0_val = consts.get('D0')
D1_val = consts.get('D1')
alpha_chi_val = consts.get('alphachi') # note: your const key 'alphachi'
alpha_D_val = consts.get('alphaD')
chi_val = consts.get('chi_growth', consts.get('chi_', None))
beta_val = consts.get('beta_suppression', consts.get('beta_', None))
lam_val = consts.get('lambda_suppress', consts.get('lambda', None))
mu_c_val = consts.get('critgradpressure', consts.get('critgradpressure', None))
Q_val = float(vars_['Q'][i, j])
I_val = float(vars_['turbulence'][i, j])
g1_val = float(vars_['gradpressure'][i, j])
#print(mu_c_val)
# check for missing values
missing = [k for k,v in [
('chi0', chi0_val), ('chi1', chi1_val), ('D0', D0_val), ('D1', D1_val),
('alphachi', alpha_chi_val), ('alphaD', alpha_D_val),
('chi_growth/chi_', chi_val), ('beta_suppression/beta_', beta_val),
('lambda_suppress/lambda', lam_val), ('critgradpressure', mu_c_val)
] if v is None]
if missing:
raise RuntimeError("Missing constants in MAT file: " + ", ".join(missing))
# Convert to floats (some matlab values may already be floats)
H0_val = float(H0_val)
chi0_val = float(chi0_val)
chi1_val = float(chi1_val)
D0_val = float(D0_val)
D1_val = float(D1_val)
alpha_chi_val = float(alpha_chi_val)
alpha_D_val = float(alpha_D_val)
chi_val = float(chi_val)
beta_val = float(beta_val)
lam_val = float(lam_val)
mu_c_val = float(mu_c_val)
#print(mu_c_val)
# Using v_eQ = -g1**2 => v_eQ**2 = g1**4
tot_vals = []
tot = []
I_null=[]
g1_safe=[]
def g1_dot_nullcline (g1_val, Q_val, chi0_val, chi1_val, alpha_chi_val,
I_expr, chi_val, beta_val, lam_val, mu_c_val, H0_val, tot, tot_vals):
g1_val = np.asarray(g1_val)
print(g1_val)
g1_safe = np.where(np.abs(g1_val) < 1e-12, 1e-12, g1_val)
v_eQ_sq = ( -g1_safe**2 )**2 # (-g1^2)^2 = g1^4
A = Q_val*(chi0_val + chi1_val*I_val / (1 + alpha_chi_val*(-g1_safe**2)))**(-1)
term1 = np.abs(-g1_safe - mu_c_val)
term = term1 * (term1 > 0) # Heaviside Θ
term_t = term - lam_val * v_eQ_sq
B = chi_val*term_t-beta_val*I_val**2
tot_val=A*B-H0_val
tot_vals.append(tot_val)
return (tot_vals)
for g1 in g1_safe:
# Try solving in a reasonable I-range
try:
root = brentq(nullcline_eq, -30, 30, args=(g1,))
I_null.append(root)
except:
I_null.append(np.nan)
I_null = np.array(I_null)
# --- Plot ---
plt.figure(figsize=(8,6))
plt.plot(g1_safe, I_null, lw=3)
plt.xlabel("g₁")
plt.ylabel("I (nullcline)")
plt.title("g₁-nullcline: I(g₁) from g1_dot = 0")
plt.grid(True)
plt.show()
print("total=", g1_dot_nullcline(g1_val, Q_val, chi0_val, chi1_val, alpha_chi_val, I_val,
chi_val, beta_val, lam_val, mu_c_val, H0_val, tot, tot_vals))
g1_val = np.asarray(g1_val)
print(tot_vals)
Подробнее здесь: [url]https://stackoverflow.com/questions/79831895/why-am-i-getting-a-blank-nullcline-plot[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия