鱼C论坛

 找回密码
 立即注册
查看: 2016|回复: 2

[已解决]分别使用python与matlab求解图中微分方程组

[复制链接]
发表于 2023-9-23 22:39:17 | 显示全部楼层 |阅读模式
1鱼币
分别使用python与matlab求解图中微分方程组
最佳答案
2023-9-23 22:39:18
Python中求解微分方程组的常用库是SciPy库中的odeint函数。下面是使用Python求解该微分方程组的代码:

解微分方程组

[/code] python
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# 定义微分方程组
def dydt(y, t):
    y1, y2 = y
    dy1dt = y2
    dy2dt = -y1
    return [dy1dt, dy2dt]

# 定义初值和时间范围
y0 = [1.0, 0.0]  # 初值
t = np.linspace(0, 10, 101)  # 时间范围

# 求解微分方程组
sol = odeint(dydt, y0, t)

# 绘制解的图像
plt.plot(t, sol[:, 0], 'b', label='y1(t)')
plt.plot(t, sol[:, 1], 'g', label='y2(t)')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
[/code]

代码中,首先定义了微分方程组$\left\{\begin{aligned}y_1'(t)&=y_2(t)\\y_2'(t)&=-y_1(t)\end{aligned}\right.$,并将其表示为函数dydt(y, t)的形式。然后,定义了初值和时间范围,并调用odeint函数求解微分方程组的解。最后,绘制了解的图像。

Matlab中求解微分方程组的常用函数是ode45函数。下面是使用Matlab求解微分方程组的代码:

解微分方程组

[/code] matlab
% 定义微分方程组
function dydt = myodefun(t, y)
    dydt = zeros(2, 1);
    dydt(1) = y(2);
    dydt(2) = -y(1);
end

% 定义初值和时间范围
tspan = [0 10];
y0 = [1.0; 0.0];

% 求解微分方程组
[t, y] = ode45(@myodefun, tspan, y0);

% 绘制解的图像
plot(t, y(:, 1), 'b', 'LineWidth', 2);
hold on;
plot(t, y(:, 2), 'g', 'LineWidth', 2);
grid on;
xlabel('t');
legend('y1(t)', 'y2(t)');
[/code]

代码中,首先定义了微分方程组$\left\{\begin{aligned}y_1'(t)&=y_2(t)\\y_2'(t)&=-y_1(t)\end{aligned}\right.$,并将其表示为函数myodefun的形式。然后,定义了初值和时间范围,并调用ode45函数求解微分方程组的解。最后,绘制了解的图像。

以上是Python和Matlab求解微分方程组的简单示例,可以根据实际情况调整微分方程组、初值和时间范围,以获取所需的解。

球一个最佳答案谢谢啦!这对我非常重要!
回答可能有误,多多谅解!
QQ截图20230923133433.png

最佳答案

查看完整内容

Python中求解微分方程组的常用库是SciPy库中的odeint函数。下面是使用Python求解该微分方程组的代码: 解微分方程组 [/code] python import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 定义微分方程组 def dydt(y, t): y1, y2 = y dy1dt = y2 dy2dt = -y1 return [dy1dt, dy2dt] # 定义初值和时间范围 y0 = [1.0, 0.0] # 初值 t = np.linspace(0, 10, 101) # 时间 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-23 22:39:18 | 显示全部楼层    本楼为最佳答案   
Python中求解微分方程组的常用库是SciPy库中的odeint函数。下面是使用Python求解该微分方程组的代码:

解微分方程组

[/code] python
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# 定义微分方程组
def dydt(y, t):
    y1, y2 = y
    dy1dt = y2
    dy2dt = -y1
    return [dy1dt, dy2dt]

# 定义初值和时间范围
y0 = [1.0, 0.0]  # 初值
t = np.linspace(0, 10, 101)  # 时间范围

# 求解微分方程组
sol = odeint(dydt, y0, t)

# 绘制解的图像
plt.plot(t, sol[:, 0], 'b', label='y1(t)')
plt.plot(t, sol[:, 1], 'g', label='y2(t)')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
[/code]

代码中,首先定义了微分方程组$\left\{\begin{aligned}y_1'(t)&=y_2(t)\\y_2'(t)&=-y_1(t)\end{aligned}\right.$,并将其表示为函数dydt(y, t)的形式。然后,定义了初值和时间范围,并调用odeint函数求解微分方程组的解。最后,绘制了解的图像。

Matlab中求解微分方程组的常用函数是ode45函数。下面是使用Matlab求解微分方程组的代码:

解微分方程组

[/code] matlab
% 定义微分方程组
function dydt = myodefun(t, y)
    dydt = zeros(2, 1);
    dydt(1) = y(2);
    dydt(2) = -y(1);
end

% 定义初值和时间范围
tspan = [0 10];
y0 = [1.0; 0.0];

% 求解微分方程组
[t, y] = ode45(@myodefun, tspan, y0);

% 绘制解的图像
plot(t, y(:, 1), 'b', 'LineWidth', 2);
hold on;
plot(t, y(:, 2), 'g', 'LineWidth', 2);
grid on;
xlabel('t');
legend('y1(t)', 'y2(t)');
[/code]

代码中,首先定义了微分方程组$\left\{\begin{aligned}y_1'(t)&=y_2(t)\\y_2'(t)&=-y_1(t)\end{aligned}\right.$,并将其表示为函数myodefun的形式。然后,定义了初值和时间范围,并调用ode45函数求解微分方程组的解。最后,绘制了解的图像。

以上是Python和Matlab求解微分方程组的简单示例,可以根据实际情况调整微分方程组、初值和时间范围,以获取所需的解。

球一个最佳答案谢谢啦!这对我非常重要!
回答可能有误,多多谅解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-23 22:39:29 | 显示全部楼层
在Python中,可以使用SciPy库中的odeint函数来求解微分方程。例如,假设我们要求解以下微分方程组:

dy1/dt = -y1 + 2*y2
dy2/dt = -3*y1 + 4*y2

可以使用以下代码:
from scipy.integrate import odeint
import numpy as np

def model(y, t):
    y1, y2 = y
    dydt = [-y1 + 2*y2, -3*y1 + 4*y2]
    return dydt

# 初始条件
y0 = [1, 0]

# 时间点
t = np.linspace(0, 5, 101)

# 求解微分方程
y = odeint(model, y0, t)

# 打印结果
print(y)

在Matlab中,可以使用ode45函数来求解微分方程。例如,假设我们要求解以下微分方程组:

dy1/dt = -y1 + 2*y2
dy2/dt = -3*y1 + 4*y2

可以使用以下代码:
function dydt = model(t, y)
    dydt = [-y(1) + 2*y(2); -3*y(1) + 4*y(2)];
end

% 初始条件
y0 = [1; 0];

% 时间区间
tspan = [0 5];

% 求解微分方程
[t, y] = ode45(@model, tspan, y0);

% 打印结果
disp(y)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 08:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表