【问题标题】:Matlab function into pythonmatlab函数转换成python
【发布时间】:2021-03-21 06:18:52
【问题描述】:

我正在尝试将此 Matlab 代码转换为 python,但由于没有使用 Matlab 的经验,我无法弄清楚我能做到的方式。有人可以帮忙吗?基本上,只有 fplot 命令让我感到困惑。

E = 95;
m = 250;
c = 0.900;
t = 0:1:100;
T = E*t/(m*c);
f = @(t)E*t/(m*c);
fplot(f,[0,100]);

【问题讨论】:

  • 嗨 Nikita,欢迎来到 SO!基本上,fplot(fun,[xmin,xmax]) 在 x 轴限制 xminxmax 之间绘制函数 fun。另请注意f(t)==T(t+1)(我不确定为什么编写此程序的人同时定义了Tf;也许是为了演示不同的编程策略?)
  • @Vicky 查看我的代码,如果有任何问题请在以后提及
  • @ExplooreX 我对 Python 了解不多,但我猜t 在你的代码中已经被偏移了 1,不是吗?此外,代码似乎翻译了 MATLAB 中 plot() 函数的使用,而不是 fplot(),对吧?

标签: python matlab


【解决方案1】:

在我看来,Exploore X 的答案不太好(你可能会损失大约 100 倍的计算速度)。尝试使用numpy 以获得最佳的MATLAB 代码翻译(因为numpy 也使用了向量化的概念)。

因此,您可以使用这样的东西,它看起来更像您的 MATLAB 代码:

import matplotlib.pyplot as plt
import numpy as np

E = 95
m = 250
c = 0.900
t = np.arange(100+1)
T = E*t/(m*c)
# or using anonymous function ( @(t) ... in matlab )
f = lambda t: E*t/(m*c)

plt.plot(t, T)
# or
# plt.plot(t, f(t))
plt.show()

使用搜索引擎,您可以找到许多关于 Matlab 和 Python 兼容性的文章(在矢量化概念的意义上,例如 http://mathesaurus.sourceforge.net/matlab-numpy.html)。

【讨论】:

  • 谢谢你,但我希望提问者得到这个想法,但如果我使用Numpy,整个目的都会被破坏。
  • 是的,我们知道使用矢量化比列表comprehension 容易得多
  • 你不需要 f 定义行。 T直接定义为E*(每个点)/(m*c)的数组
  • @Mathieu,我已经使用/翻译了问题中的matlab代码
  • 好的,但是 Matlab 和 python 是完全不同的语言。让我们把它变成在 Python 中有意义的东西。定义函数的这一行在 python 中是无用的,因为无论如何已经创建了函数点数组。 + 这很令人困惑,因为定义 f 的行中使用的变量 t 与存储 np.arange 的变量 t 不同。
【解决方案2】:

首先,这里有几点需要注意:

f = @(t)E*t/(m*c);
fplot(f,[0,100]);

@(t) E*t/(m*c) 这里@(t) 是方程中的一个变量E*t/(m*c) 剩余的是常数。

fplot(f, [0, 100])function plot,其中 t 不同于 0 to 100

Python 逻辑:

import matplotlib.pyplot as plt
E = 95
m = 250
c = 0.900
t = list(range(1, 101))
T = [ E*i/(m*c) for i in t]

plt.plot(T)
plt.show()

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多