Python实现傅里叶级数可视化工具

Python实现傅里叶级数可视化工具

flyfish

有matlab实现,我没matlab,我有Python,所以我用Python实现。
整个工具的实现代码放在最后,界面使用PyQt5开发

在这里插入图片描述

起源

傅里叶级数(Fourier Series)由法国数学家和物理学家让-巴蒂斯特·约瑟夫·傅里叶(Jean-Baptiste Joseph Fourier)在19世纪初提出。他最初是为了研究热传导问题,发现任何周期函数都可以表示为一系列正弦和余弦函数的和。这一发现对数学、物理学以及工程学等领域产生了深远影响。

思想

傅里叶级数的核心思想是将一个复杂的周期函数分解成无穷多个简单的正弦和余弦函数的叠加。这些正弦和余弦函数称为“基函数”,每个基函数都有特定的频率、幅度和相位。

公式

对于一个周期为 T T T 的周期函数 f ( t ) f(t) f(t),其傅里叶级数表示为: f ( t ) = a 0 + ∑ n = 1 ∞ ( a n cos ⁡ ( 2 π n t T ) + b n sin ⁡ ( 2 π n t T ) ) f(t) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos\left(\frac{2\pi n t}{T}\right) + b_n \sin\left(\frac{2\pi n t}{T}\right) \right) f(t)=a0+n=1(ancos(T2πnt)+bnsin(T2πnt))
其中:

  • a 0 a_0 a0 是直流分量(平均值),计算公式为:
    a 0 = 1 T ∫ 0 T f ( t )   d t a_0 = \frac{1}{T} \int_{0}^{T} f(t) \, dt a0=T10Tf(t)dt
  • a n a_n an b n b_n bn 是傅里叶系数,计算公式分别为:
    a n = 2 T ∫ 0 T f ( t ) cos ⁡ ( 2 π n t T )   d t a_n = \frac{2}{T} \int_{0}^{T} f(t) \cos\left(\frac{2\pi n t}{T}\right) \, dt an=T20Tf(t)cos(T2πnt)dt
    b n = 2 T ∫ 0 T f ( t ) sin ⁡ ( 2 π n t T )   d t b_n = \frac{2}{T} \int_{0}^{T} f(t) \sin\left(\frac{2\pi n t}{T}\right) \, dt bn=T20Tf(t)sin(T2πnt)dt

想象一首音乐,这首音乐是由许多不同频率的音符组成的。傅里叶级数就像是一种工具,它可以将这首音乐分解成一个个单独的音符(正弦和余弦函数)。通过这些音符的频率和振幅,可以重建出原来的音乐。

正交函数

在数学中,两个函数 f ( x ) f(x) f(x) g ( x ) g(x) g(x) 在定义域 [ a , b ] [a, b] [a,b] 上被称为正交的(orthogonal),如果它们的内积为零。内积通常定义为: ⟨ f , g ⟩ = ∫ a b f ( x ) g ( x )   d x \langle f, g \rangle = \int_a^b f(x) g(x) \, dx f,g=abf(x)g(x)dx ⟨ f , g ⟩ = 0 \langle f, g \rangle = 0 f,g=0 时,表示函数 f ( x ) f(x) f(x) g ( x ) g(x) g(x) [ a , b ] [a, b] [a,b] 上是正交的。正交函数有一个重要性质,即它们在某种意义上“互不干扰”。

正交函数集

正交函数集是一组两两正交的函数集合。即对于函数集 { ϕ 1 ( x ) , ϕ 2 ( x ) , … , ϕ n ( x ) } \{ \phi_1(x), \phi_2(x), \ldots, \phi_n(x) \} {ϕ1(x),ϕ2(x),,ϕn(x)},满足: ⟨ ϕ i , ϕ j ⟩ = ∫ a b ϕ i ( x ) ϕ j ( x )   d x = 0 当  i ≠ j \langle \phi_i, \phi_j \rangle = \int_a^b \phi_i(x) \phi_j(x) \, dx = 0 \quad \text{当 } i \ne j ϕi,ϕj=abϕi(x)ϕj(x)dx=0 i=j
如果这组函数不仅仅是正交的,并且每个函数的内积等于一个常数(通常为1),则称为正交规范函数集(orthonormal set)。

完备正交函数集

完备正交函数集是一个正交函数集,其中的函数数目足够多,可以表示定义域 [ a , b ] [a, b] [a,b] 上的任意函数。具体来说,任何在该定义域上的平方可积函数(即满足 ∫ a b ∣ f ( x ) ∣ 2   d x < ∞ \int_a^b |f(x)|^2 \, dx < \infty abf(x)2dx< 的函数)都可以表示为这个正交函数集的线性组合。用数学语言来说,函数 f ( x ) f(x) f(x) 可以表示为完备正交函数集 { ϕ n ( x ) } \{\phi_n(x)\} {ϕn(x)} 的线性组合: f ( x ) = ∑ n = 1 ∞ c n ϕ n ( x ) f(x) = \sum_{n=1}^{\infty} c_n \phi_n(x) f(x)=n=1cnϕn(x)其中系数 c n c_n cn 是通过内积计算得到的: c n = ⟨ f , ϕ n ⟩ ⟨ ϕ n , ϕ n ⟩ c_n = \frac{\langle f, \phi_n \rangle}{\langle \phi_n, \phi_n \rangle} cn=ϕn,ϕnf,ϕn

在均方误差为零的情况下,任何与完备正交函数集有相同定义域的函数都可以分解为该函数集中正交函数的代数和

均方误差(Mean Squared Error, MSE)是用来衡量一个函数 f ( x ) f(x) f(x) 与其近似表示 f ^ ( x ) \hat{f}(x) f^(x) 之间的误差的标准。在函数分解中,如果一个函数 f ( x ) f(x) f(x) 可以通过完备正交函数集 { ϕ n ( x ) } \{\phi_n(x)\} {ϕn(x)} 的代数和精确表示,那么均方误差为零。也就是说: MSE = 1 b − a ∫ a b ∣ f ( x ) − f ^ ( x ) ∣ 2   d x = 0 \text{MSE} = \frac{1}{b-a} \int_a^b |f(x) - \hat{f}(x)|^2 \, dx = 0 MSE=ba1abf(x)f^(x)2dx=0当均方误差为零时,表示函数 f ( x ) f(x) f(x) 可以精确地分解为完备正交函数集中的函数的代数和: f ( x ) = ∑ n = 1 ∞ c n ϕ n ( x ) f(x) = \sum_{n=1}^{\infty} c_n \phi_n(x) f(x)=n=1cnϕn(x)这个结论的意义在于,完备正交函数集提供了一种强大的工具,可以表示定义域 [ a , b ] [a, b] [a,b] 上的任意函数,而不会有任何误差。

解释 展开

傅里叶级数是将一个周期函数展开成一系列正弦函数和余弦函数的和,其基本形式可以表示为:
f ( x ) = a 0 + ∑ n = 1 ∞ ( a n cos ⁡ ( 2 π n x T ) + b n sin ⁡ ( 2 π n x T ) ) f(x) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos\left(\frac{2\pi nx}{T}\right) + b_n \sin\left(\frac{2\pi nx}{T}\right) \right) f(x)=a0+n=1(ancos(T2πnx)+bnsin(T2πnx))
其中, T T T 是周期, a 0 a_0 a0, a n a_n an, b n b_n bn 是傅里叶系数,通过以下公式计算:
a 0 = 1 T ∫ 0 T f ( x )   d x a_0 = \frac{1}{T} \int_{0}^{T} f(x) \, dx a0=T10Tf(x)dx

a n = 2 T ∫ 0 T f ( x ) cos ⁡ ( 2 π n x T )   d x a_n = \frac{2}{T} \int_{0}^{T} f(x) \cos\left(\frac{2\pi nx}{T}\right) \, dx an=T20Tf(x)cos(T2πnx)dx

b n = 2 T ∫ 0 T f ( x ) sin ⁡ ( 2 π n x T )   d x b_n = \frac{2}{T} \int_{0}^{T} f(x) \sin\left(\frac{2\pi nx}{T}\right) \, dx bn=T20Tf(x)sin(T2πnx)dx

具体例子:方波函数

方波函数是一个常见的周期函数,可以用傅里叶级数展开。假设我们有一个周期为 T = 2 π T = 2\pi T=2π 的方波函数 f ( x ) f(x) f(x),定义如下: { 1 for  0 < x < π − 1 for  π < x < 2 π \begin{cases} 1 & \text{for } 0 < x < \pi \\ -1 & \text{for } \pi < x < 2\pi \end{cases} {11for 0<x<πfor π<x<2π
我们将这个函数展开为傅里叶级数。

计算傅里叶系数
  1. 计算 ( a_0 ):
    a 0 = 1 2 π ∫ 0 2 π f ( x )   d x a_0 = \frac{1}{2\pi} \int_{0}^{2\pi} f(x) \, dx a0=2π102πf(x)dx
    由于 f ( x ) f(x) f(x) [ 0 , π ] [0, \pi] [0,π] 上为 1,在 [ π , 2 π ] [\pi, 2\pi] [π,2π] 上为 -1:
    a 0 = 1 2 π ( ∫ 0 π 1   d x + ∫ π 2 π − 1   d x ) a_0 = \frac{1}{2\pi} \left( \int_{0}^{\pi} 1 \, dx + \int_{\pi}^{2\pi} -1 \, dx \right) a0=2π1(0π1dx+π2π1dx)
    a 0 = 1 2 π ( π − π ) = 0 a_0 = \frac{1}{2\pi} \left( \pi - \pi \right) = 0 a0=2π1(ππ)=0
  2. 计算 ( a_n ):
    a n = 1 π ∫ 0 2 π f ( x ) cos ⁡ ( n x )   d x a_n = \frac{1}{\pi} \int_{0}^{2\pi} f(x) \cos(nx) \, dx an=π102πf(x)cos(nx)dx
    由于 f ( x ) f(x) f(x)是奇函数(关于 x = π x = \pi x=π 对称),且 ( c o s ( n x ) cos(nx) cos(nx)) 是偶函数,奇函数与偶函数的内积为零:
    a n = 0 a_n = 0 an=0
  3. 计算 ( b_n ):
    b n = 1 π ∫ 0 2 π f ( x ) sin ⁡ ( n x )   d x b_n = \frac{1}{\pi} \int_{0}^{2\pi} f(x) \sin(nx) \, dx bn=π102πf(x)sin(nx)dx
    同样地,将积分分为两部分:
    b n = 1 π ( ∫ 0 π sin ⁡ ( n x )   d x + ∫ π 2 π − sin ⁡ ( n x )   d x ) b_n = \frac{1}{\pi} \left( \int_{0}^{\pi} \sin(nx) \, dx + \int_{\pi}^{2\pi} -\sin(nx) \, dx \right) bn=π1(0πsin(nx)dx+π2πsin(nx)dx)
    由于 s i n ( n x ) sin(nx) sin(nx) [ π , 2 π ] [\pi, 2\pi] [π,2π] 上的负值正好抵消 ( [ 0 , π ] ([0, \pi] ([0,π]上的值:
    b n = 1 π ( ∫ 0 π sin ⁡ ( n x )   d x − ∫ 0 π sin ⁡ ( n x )   d x ) b_n = \frac{1}{\pi} \left( \int_{0}^{\pi} \sin(nx) \, dx - \int_{0}^{\pi} \sin(nx) \, dx \right) bn=π1(0πsin(nx)dx0πsin(nx)dx)
    b n = 2 π ∫ 0 π sin ⁡ ( n x )   d x b_n = \frac{2}{\pi} \int_{0}^{\pi} \sin(nx) \, dx bn=π20πsin(nx)dx
    计算这个积分,结果是:

b n = { 4 n π for odd  n 0 for even  n b_n = \begin{cases} \frac{4}{n\pi} & \text{for odd } n \\ 0 & \text{for even } n \end{cases} bn={40for odd nfor even n

得到傅里叶级数展开

将 ( a_0 ), ( a_n ), ( b_n ) 代入傅里叶级数的基本形式,我们得到方波的傅里叶级数展开:
f ( x ) = ∑ odd  n 4 n π sin ⁡ ( n x ) f(x) = \sum_{\text{odd } n} \frac{4}{n\pi} \sin(nx) f(x)=odd n4sin(nx)
具体地,考虑前几项,我们可以写成:
f ( x ) ≈ 4 π sin ⁡ ( x ) + 4 3 π sin ⁡ ( 3 x ) + 4 5 π sin ⁡ ( 5 x ) + … f(x) \approx \frac{4}{\pi} \sin(x) + \frac{4}{3\pi} \sin(3x) + \frac{4}{5\pi} \sin(5x) + \ldots f(x)π4sin(x)+3π4sin(3x)+5π4sin(5x)+

整个工具的代码实现

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QSlider, QLabel, QLineEdit, QGridLayout
from PyQt5.QtCore import Qt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

class FourierSeriesVisualizer(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("傅里叶级数可视化工具")
        self.setGeometry(100, 100, 1200, 800)

        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)

        self.layout = QGridLayout(self.central_widget)
        
        # 创建二维图形区
        self.figure_2d, self.ax_2d = plt.subplots()
        self.canvas_2d = FigureCanvas(self.figure_2d)
        self.layout.addWidget(self.canvas_2d, 0, 0)
        
        # 创建三维图形区
        self.figure_3d = Figure()
        self.ax_3d = self.figure_3d.add_subplot(111, projection='3d')
        self.canvas_3d = FigureCanvas(self.figure_3d)
        self.layout.addWidget(self.canvas_3d, 0, 1)
        
        # 创建控制面板
        self.control_panel = QHBoxLayout()
        
        self.label_n = QLabel("傅里叶级数次数:", self)
        self.control_panel.addWidget(self.label_n)
        
        self.slider_n = QSlider(Qt.Horizontal, self)
        self.slider_n.setRange(1, 50)
        self.slider_n.setValue(10)
        self.slider_n.valueChanged.connect(self.update_plot)
        self.control_panel.addWidget(self.slider_n)
        
        self.label_custom_n = QLabel("自定义次数:", self)
        self.control_panel.addWidget(self.label_custom_n)
        
        self.input_custom_n = QLineEdit(self)
        self.input_custom_n.setPlaceholderText("输入次数")
        self.control_panel.addWidget(self.input_custom_n)
        
        self.button_apply = QPushButton("确定", self)
        self.button_apply.clicked.connect(self.apply_custom_n)
        self.control_panel.addWidget(self.button_apply)
        
        self.button_reset = QPushButton("重置", self)
        self.button_reset.clicked.connect(self.reset)
        self.control_panel.addWidget(self.button_reset)
        
        self.button_dynamic = QPushButton("查看傅里叶级数动态拟合过程", self)
        self.button_dynamic.clicked.connect(self.view_dynamic_process)
        self.control_panel.addWidget(self.button_dynamic)
        
        self.layout.addLayout(self.control_panel, 1, 0, 1, 2)
        
        # 初始绘图
        self.update_plot()

    def compute_fourier_series(self, t, T, N):
        f_t = np.sign(np.sin(2 * np.pi * t / T))
        a0 = 2 * np.mean(f_t)
        an = np.zeros(N)
        bn = np.zeros(N)
        for n in range(1, N+1):
            an[n-1] = 2 * np.mean(f_t * np.cos(2 * np.pi * n * t / T))
            bn[n-1] = 2 * np.mean(f_t * np.sin(2 * np.pi * n * t / T))
        return a0, an, bn

    def reconstruct_signal(self, t, T, a0, an, bn, N):
        f_reconstructed = a0 / 2
        for n in range(1, N+1):
            f_reconstructed += an[n-1] * np.cos(2 * np.pi * n * t / T) + bn[n-1] * np.sin(2 * np.pi * n * t / T)
        return f_reconstructed

    def update_plot(self):
        N = self.slider_n.value()
        t = np.linspace(0, 2, 500)
        T = 2

        a0, an, bn = self.compute_fourier_series(t, T, N)
        f_reconstructed = self.reconstruct_signal(t, T, a0, an, bn, N)

        self.ax_2d.clear()
        self.ax_2d.plot(t, np.sign(np.sin(2 * np.pi * t / T)), label='原始信号(方波)')
        self.ax_2d.plot(t, f_reconstructed, label=f'重构信号(傅里叶级数 N={N})')
        self.ax_2d.set_title('方波的傅里叶级数展开')
        self.ax_2d.set_xlabel('时间')
        self.ax_2d.set_ylabel('幅度')
        self.ax_2d.legend()
        self.ax_2d.grid(True)
        self.ax_2d.set_ylim(-1.5, 1.5)

        self.canvas_2d.draw()
        self.update_3d_plot(a0, an, bn, N, T)

    def update_3d_plot(self, a0, an, bn, N, T):
        t = np.linspace(0, 2, 500)
        f_reconstructed = self.reconstruct_signal(t, T, a0, an, bn, N)

        self.ax_3d.clear()
        self.ax_3d.plot(t, f_reconstructed, zs=0, zdir='y', label='重构信号', color='b')
        
        for n in range(1, N+1):
            component = an[n-1] * np.cos(2 * np.pi * n * t / T) + bn[n-1] * np.sin(2 * np.pi * n * t / T)
            self.ax_3d.plot(t, component, zs=n, zdir='y', label=f'谐波 {n}')
        
        self.ax_3d.set_xlabel('时间')
        self.ax_3d.set_ylabel('谐波')
        self.ax_3d.set_zlabel('幅度')
        self.ax_3d.legend(loc='upper left')
        
        self.canvas_3d.draw()

    def apply_custom_n(self):
        try:
            custom_n = int(self.input_custom_n.text())
            if custom_n > 0:
                self.slider_n.setValue(custom_n)
        except ValueError:
            pass

    def reset(self):
        self.slider_n.setValue(10)
        self.input_custom_n.clear()

    def view_dynamic_process(self):
        for n in range(1, self.slider_n.value() + 1):
            self.slider_n.setValue(n)
            QApplication.processEvents()
            self.update_plot()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = FourierSeriesVisualizer()
    main_window.show()
    sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/790536.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[激光原理与应用-106]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 9 - 图解常见的焊接缺陷/缺欠分类

目录 前言&#xff1a; 1、焊接缺陷的类型 2、焊接缺陷的危害 3、结论 一、功能性缺陷 1.1 虚焊&#xff1a;最重要的非视觉检测的缺陷 1.虚焊的定义 2.虚焊的成因 3.虚焊的危害 4.虚焊的检测与解决 二、成型性缺陷 2.1 黑爆缺陷 1、黑爆缺陷的定义与外观 2、黑爆…

深度优先搜索(所有可达路径)

参考题目&#xff1a;所有可达路径 题目描述 给定一个有 n 个节点的有向无环图&#xff0c;节点编号从 1 到 n。请编写一个函数&#xff0c;找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 第一行包含两个整数 N&#xff0c;M&…

红日靶场----(三)2.漏洞利用

上期的通过一句话木马实现对目标主机的持久后门 我使用的是蚁剑&#xff0c;蚁剑安装及使用参考&#xff1a; 下载地址&#xff1a; GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 安装即使用&#xff1a; 1. 快速入门 语雀 通过YXCMS的后台GETSHELL 利用…

C++第四弹 -- 类与对象(中上) (构造函数 析构函数 拷贝构造函数)

目录 前言构造函数1. 概念2. 特征 析构函数1. 概念2. 特征 拷贝构造函数1. 概念2. 特征 总结 前言 让我们一起揭开 C 对象生命周期管理的神秘面纱&#xff0c;掌握构造函数、析构函数和拷贝构造函数的精髓&#xff01; 博客主页: 酷酷学!!! 期待更多好文, 点击关注~ 构造函…

Linux系统中磁盘管理LVM与挂载

Linux系统中磁盘管理LVM与挂载 本文以属于Linux系统基本概念&#xff0c;如果以查找教程教程&#xff0c;解决问题为主&#xff0c;只需要查看本文后半部分。如需要系统性学习请查看本文前半部分。 本文操作极容易导致主机无法自动重启&#xff0c;请慎重操作。操作前务必要进…

新手教学系列——crontab 使用不当引发的服务器性能问题

起因及症状 最近,我们的一台服务器随着运行时间的增加,逐渐出现了压力过大的问题。具体表现为数据库连接数飙升至 4000+,Redis 频繁超时,系统报错文件打开数过多等。针对这些问题,我们逐一检查了数据库连接池、Redis 连接池以及系统的 ulimit 配置,但都未能找到问题的根…

ROS服务通信自定义srv

服务通信自定义srv 流程:创建ROS功能包按照固定格式创建srv文件编译配置文件编译生成中间文件 流程: srv 文件内的可用数据类型与 msg 文件一致&#xff0c;且定义 srv 实现流程与自定义 msg 实现流程类似&#xff0c;需查阅msg文件的可以浏览ROS话题通信流程自定义数据msg格式…

7月报名 | 海克斯康CAEfatigue疲劳分析培训

您好&#xff01;感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加海克斯康CAEfatigue疲劳分析培训&#xff0c;特邀海克斯康原厂讲师将通过培训帮助您了解CAEfatigue的功能并使用其进行疲劳分析的过程、参数设置以及软件操作方法和技巧&#xff0c;学会使用…

VS2019使用C#写窗体程序技巧(1)

1、打开串口 private void button1_Click(object sender, EventArgs e){myPort cmb1.Text;mybaud Convert.ToInt32(cmb2.Text, 10);databit 8;parity Parity.None;stopBit StopBits.One;textBox9.Text "2";try{sp new SerialPort(myPort, mybaud, parity, dat…

Linux:进程池制作(基于匿名管道和命名管道两个版本)

Linux&#xff1a;进程池制作 & 匿名管道 & 命名管道 前言一、匿名管道制作进程池一、进程池框架二、创建管道、创建进程、工作进程执行任务2.1 创建管道、创建进程 2.2 工作进程执行任务三、主进程向子进程发送任务3.1 任务封装3.2 主进程向子进程发送任务 四、回收资…

数学建模·层次分析法

层次分析法 LAF 定义 具体用途 评价体系的优劣影响&#xff0c;计算评价指标的权重 主要步骤 关键在于一致性检验和求权值 权重的计算 注意权重之和为1&#xff0c;需要归一化 算数平均法 特征值法 矩阵的一致性检验 为什么要检验&#xff1f;&#xff1a;简单来说就…

Qt 实战(2)搭建开发环境 | 2.3、qmake详解

文章目录 一、qmake详解1、相关概念2、qmake作用3、运行qmake4、Qt Creator构建项目与执行qmake操作之间的区别4.1、功能与目的4.2、执行时机与流程 5、总结 前言&#xff1a; Qt qmake 是一个用于自动化生成 Makefile 的工具&#xff0c;它极大地简化了 Qt 应用程序和库的编译…

免费听书TV版v1.0.1

使用非常稳定流畅&#xff0c;UI界面设计美观简洁&#xff0c;纯净无广。资源虽然不是特别多&#xff0c;但是日常听书还是可以满足需求。 完全免费&#xff0c;操作简单方便&#xff0c;安装即用&#xff0c;没有任何限制。 可以适配遥控器操作&#xff0c;OK键开启或关闭语…

第二证券:销量暴跌95%,这一巨头市值蒸发超3000亿元!

在多重要素刺激下&#xff0c;PCB工作站上风口。 波音销量堕入停滞 6月仅售出3架客机 据央视财经&#xff0c;在一系列丑闻的影响下&#xff0c;波音公司本年出售遭到明显冲击。当地时间9日&#xff0c;波音发布的数据闪现&#xff0c;在以前一个月&#xff0c;该公司仅卖出…

【鸿蒙学习笔记】Stage模型

官方文档&#xff1a;Stage模型开发概述 目录标题 Stage模型好处Stage模型概念图ContextAbilityStageUIAbility组件和ExtensionAbility组件WindowStage Stage模型-组件模型Stage模型-进程模型Stage模型-ArkTS线程模型和任务模型关于任务模型&#xff0c;我们先来了解一下什么是…

旷野之间8 - LLMOps 与 MLOps操作化 AI 模型

介绍 随着人工智能越来越多地应用于商业应用&#xff0c;简化人工智能系统&#xff08;尤其是机器学习模型&#xff09;的开发和持续管理的新实践也不断涌现。MLOps 已成为一种基于 DevOps 原则实施机器学习的流行方法。 现在&#xff0c;随着 GPT-3 等大型语言模型 (LLM) 的…

火热夏季:浦语*书生InternLM大模型实战闯关-入门岛之Linux基础知识

一、ssh链接与端口映射并运行hello_wold.py 1.创建开发机 InternStudio创建开发机 2.进入开发机 3.Ssh链接开发机 powerShell终端ssh链接开发机。 4.创建一个hello_world.py文件web demo 5.运行web demo 6.端口映射 7.本地浏览器打开web 二、 VSCODE 远程连接开发机并创建一个…

LeetCode67(二进制求和[位运算,大数运算])

二进制求和 题目要求: 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 这道题其实有几种解法.我们先来介绍简单的方法. 我们可以将两个字符串的二进制转成十进制,获取对应值相加之后,我们可以不断对2取余,获取尾数拼接即可.也就是像我们平常求一…

笔试算法刷题

猿辅导2021校园招聘笔试&#xff08;算法一&#xff09; 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 (nowcoder.com) 第一眼看到这个题想到的是蓝桥杯飞机降落&#xff0c;贪心题。但是这样算的是最大不相交区间数量&#xff0…

docker笔记2

docker笔记2 一、阿里云镜像配置二、docker基本原理1.docker是如何启动一个容器的2.docker的底层原理 三、镜像命令总结 一、阿里云镜像配置 配置镜像的目的 由于Docker Hub等公共镜像仓库的服务器可能位于国外&#xff0c;直接从中拉取镜像时可能会遇到网络延迟或不稳定的问…