Python 数值计算与数值分析基础

Python 数值计算与数值分析基础

示例演示

当涉及到Python数值计算和数值分析时,下面是20个示例,涵盖了一些常见的用法:

1.数值积分:

在 Python 中,你可以使用 scipy.integrate 模块中的 quad 函数来进行数值积分

import numpy as np
from scipy.integrate import quad

# 定义被积函数
f = lambda x: np.sin(x)

# 计算积分
result, error = quad(f, 0, np.pi)

# 输出结果
print("积分结果:", result)
print("误差估计:", error)
积分结果: 2.0
误差估计: 2.220446049250313e-14

2.数值微分:

import numpy as np

# 定义函数
f = lambda x: np.cos(x)

# 定义微分点和一个很小的h值
x0 = 0.5
h = 1e-5

# 计算数值微分(使用中心差分法)
numerical_derivative = (f(x0 + h) - f(x0 - h)) / (2 * h)

# 输出结果
print("数值导数结果:", numerical_derivative)
数值导数结果: -0.47942553859647846

3.非线性方程求根:

在 Python 中,你可以使用 scipy.optimize 模块的 fsolve 函数来求解方程。

import numpy as np
from scipy.optimize import fsolve

# 定义方程
def equation(x):
    return x**2 - 2

# 使用 fsolve 进行求解
solution = fsolve(equation, 1.5)

# 输出结果
print("方程的解:", solution[0])
方程的解: 1.4142135623730951

4.线性方程组求解:

在 Python 中,使用 NumPy 库可以方便地处理矩阵和线性代数运算。使用 np.linalg.solve(A, b) 函数求解线性方程组Ax=b。

import numpy as np

# 定义矩阵 A 和向量 b
A = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])

# 求解线性方程 Ax = b
x = np.linalg.solve(A, b)

# 输出结果
print("解 x:", x)
解 x: [-4.   4.5]

5.曲线拟合:

在 Python 中,你可以使用 NumPy 和 SciPy 库来生成数据,并使用 Matplotlib 进行绘图。对于拟合功能,可以使用 scipy.optimize.curve_fit 来实现。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 定义 sine 函数
def sin_func(x, a, b, c, d):
    return a * np.sin(b * x + c) + d

# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.rand(len(x)) * 0.2  # 添加随机噪声

# 拟合数据
initial_guess = [1, 1, 0, 0]  # 初始猜测参数
params, covariance = curve_fit(sin_func, x, y, p0=initial_guess)

# 生成拟合曲线
y_fit = sin_func(x, *params)

# 绘制结果
plt.scatter(x, y, label='Data', color='blue')
plt.plot(x, y_fit, label='Fitted Curve', color='red')
plt.title('Sine Fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这里插入图片描述

6.矩阵特征值和特征向量:

在 Python 中,你可以使用 NumPy 库来计算矩阵的特征值和特征向量。使用 np.linalg.eig 函数计算特征值和特征向量。

import numpy as np

# 定义矩阵 A
A = np.array([[1, 2], [3, 4]])

# 计算特征值和特征向量
eig_val, eig_vec = np.linalg.eig(A)

# 输出结果
print("特征值:\n", eig_val)
print("特征向量:\n", eig_vec)
特征值:
 [-0.37228132  5.37228132]
特征向量:
 [[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]

7.傅里叶变换:

import numpy as np
import matplotlib.pyplot as plt

# 设置采样频率
Fs = 1000
# 生成时间序列
t = np.arange(0, 1, 1/Fs)
# 生成信号
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)
# 进行快速傅里叶变换
y = np.fft.fft(x)
# 计算频率轴
f = np.fft.fftfreq(len(y), d=1/Fs)

# 绘制幅度谱
plt.plot(f, np.abs(y))
plt.title('FFT of the Signal')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.xlim(0, Fs/2)  # 只显示正频率部分
plt.grid()
plt.show()

在这里插入图片描述

8.信号滤波:

以下代码创建了一个包含 50 Hz 和 120 Hz 正弦波的信号,然后使用带通滤波器对信号进行滤波,并将原始信号和滤波后的信号绘制在同一图中。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt

# 设置采样频率
Fs = 1000
# 生成时间序列
t = np.arange(0, 1, 1/Fs)
# 生成信号
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

# 设计带通滤波器
lowcut = 45  # 低截止频率
highcut = 55  # 高截止频率
b, a = butter(3, [lowcut, highcut], fs=Fs, btype='bandpass')

# 使用 filtfilt 进行零相位滤波
filtered_signal = filtfilt(b, a, x)

# 绘制原始信号和滤波后的信号
plt.figure(figsize=(10, 6))
plt.plot(t, x, label='Original Signal', alpha=0.7)
plt.plot(t, filtered_signal, label='Filtered Signal', linewidth=2)
plt.title('Signal Before and After Bandpass Filtering')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude')
plt.legend()
plt.grid()
plt.show()

在这里插入图片描述

9.最小二乘拟合:

import numpy as np
import matplotlib.pyplot as plt

# 定义数据点
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 3, 6, 10, 15])

# 进行二次多项式拟合
p = np.polyfit(x, y, 2)

# 计算拟合值
f = np.polyval(p, x)

# 绘制数据点和拟合曲线
plt.plot(x, y, 'o', label='Data Points')  # 原始数据点
plt.plot(x, f, label='Fitted Curve')      # 拟合曲线
plt.title('Polynomial Fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()

在这里插入图片描述

10.数值优化问题求解:

使用 scipy.optimize 库中的 minimize 函数来实现无约束优化。

import numpy as np
from scipy.optimize import minimize

# 定义目标函数
def fun(x):
    return x[0]**2 + x[1]**2

# 初始猜测
x0 = np.array([1, 1])

# 使用 minimize 进行无约束优化
result = minimize(fun, x0)

# 输出优化结果
print("Optimized parameters:", result.x)
print("Objective function value at optimized parameters:", result.fun)
Optimized parameters: [-1.07505143e-08 -1.07505143e-08]
Objective function value at optimized parameters: 2.311471135620994e-16

11.数值积分:

使用 scipy.integrate 模块中的 quad 函数来进行数值积分。

import numpy as np
from scipy.integrate import quad

# 定义被积函数
def func(x):
    return 1 / (1 + x**2)

# 进行定积分
integral_value, error = quad(func, 0, 1)

# 输出积分值和误差
print("Integral value:", integral_value)
print("Estimated error:", error)
Integral value: 0.7853981633974484
Estimated error: 8.719671245021581e-15

12.插值:

使用 numpy 处理数组,使用 matplotlib.pyplot 绘制图形,使用 scipy.interpolate 进行插值。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

# 原始数据点
x = [0, 1, 2, 3]
y = [1, 4, 9, 16]

# 生成插值点
xi = np.arange(0, 3.1, 0.1)

# 创建插值函数
interp_func = interp1d(x, y, kind='linear')

# 计算插值结果
yi = interp_func(xi)

# 绘制原始数据点和插值结果
plt.plot(x, y, 'o', label='Original data')
plt.plot(xi, yi, label='Interpolated data')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Interpolation Example')
plt.legend()
plt.grid()
plt.show()

在这里插入图片描述

13.求解常微分方程组:

使用 scipy.integrate 模块中的 solve_ivp 函数来解决常微分方程,并使用 matplotlib 来绘制图形。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# 定义微分方程
def func(t, y):
    return [y[1], -y[0]]

# 设定时间范围和初始条件
t_span = (0, 10)
y0 = [1, 0]

# 使用 solve_ivp 解决微分方程
sol = solve_ivp(func, t_span, y0, t_eval=np.linspace(0, 10, 100))

# 绘制结果
plt.plot(sol.t, sol.y[0])
plt.xlabel('Time (t)')
plt.ylabel('y(t)')
plt.title('Solution of ODE')
plt.grid()
plt.show()

在这里插入图片描述

14.数值统计:

在 Python 中,numpy 库提供了计算均值和标准差的函数。

import numpy as np

# 定义数据
data = [1, 2, 3, 4, 5]

# 计算均值和标准差
mean_value = np.mean(data)
std_value = np.std(data)

# 打印结果
print("Mean:", mean_value)
print("Standard Deviation:", std_value)
Mean: 3.0
Standard Deviation: 1.4142135623730951

15.随机数生成:

在 Python 中,可以使用 numpy 库的 random.rand 函数生成随机数。

import numpy as np

# 生成 1 到 10 之间的随机数
random_num = np.random.rand(1, 10)

# 打印结果
print(random_num)
[[0.08318904 0.2923153  0.1923046  0.96278395 0.93616543 0.48201543
  0.27400168 0.62454063 0.63461248 0.64493564]]

16.多项式求根:

在 Python 中,可以使用 numpy 库的 numpy.roots 函数来计算多项式的根。

import numpy as np

# 定义多项式系数
coefficients = [1, -3, 2]

# 计算多项式的根
roots_of_polynomial = np.roots(coefficients)

# 打印结果
print("Roots of the polynomial:", roots_of_polynomial)
Roots of the polynomial: [2. 1.]

17.矩阵求逆:

在 Python 中,可以使用 numpy 库来创建矩阵并计算其逆。使用 np.linalg.inv(A) 计算矩阵A的逆。

import numpy as np

# 定义矩阵 A
A = np.array([[1, 2], [3, 4]])

# 计算矩阵 A 的逆
inv_A = np.linalg.inv(A)

# 打印结果
print("Inverse of A:\n", inv_A)
Inverse of A:
 [[-2.   1. ]
 [ 1.5 -0.5]]

18.线性插值:

import numpy as np
import matplotlib.pyplot as plt

# 定义数据点
x = [0, 1, 2]
y = [1, 3, 2]

# 定义插值点
xi = np.arange(0, 2.1, 0.1)  # 生成从0到2(包括2)的数,步长为0.1

# 进行线性插值
yi = np.interp(xi, x, y)

# 绘制结果
plt.plot(x, y, 'o', label='Data Points')  # 绘制原始数据点
plt.plot(xi, yi, label='Linear Interpolation')  # 绘制插值曲线
plt.xlabel('x')
plt.ylabel('y')
plt.title('Linear Interpolation Example')
plt.legend()
plt.grid()
plt.show()

在这里插入图片描述

19.蒙特卡洛方法:

以下Python 代码,使用 numpy 来生成随机数,并估算圆周率 π 的值。

import numpy as np

# 初始化计数器和样本数
count = 0
n = 100000

# 进行 Monte Carlo 模拟
for _ in range(n):
    x = np.random.rand()  # 生成 [0, 1) 之间的随机数
    y = np.random.rand()  # 生成 [0, 1) 之间的随机数
    if x**2 + y**2 <= 1:  # 检查是否在单位圆内
        count += 1

# 估算 π
pi_estimate = 4 * count / n
print(f"Estimated value of π: {pi_estimate}")
Estimated value of π: 3.14684

20.矩阵求秩:

在 Python 中,可以使用 numpy 库来创建矩阵并计算其秩(rank)。

import numpy as np

# 定义矩阵 A
A = np.array([[1, 2], [3, 4]])

# 计算矩阵 A 的秩
rank_A = np.linalg.matrix_rank(A)

print(f"Rank of matrix A: {rank_A}")
Rank of matrix A: 2

这些示例展示了Python中数值计算和数值分析的一些常见用法。你可以通过这些示例来了解如何使用Python进行数值计算和分析,并可根据具体需求进行进一步修改和调整。在实际应用中,可以根据具体问题选择合适的函数和方法进行数值计算和分析。

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

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

相关文章

【Linux驱动开发】通过ioremap虚拟内存映射的寄存器操作驱动、C应用函数库开发 devmem命令测试(正点原子STM32MP135文档BUG)

【Linux驱动开发】通过ioremap虚拟内存映射的寄存器操作驱动、C应用函数库开发 devmem命令测试&#xff08;正点原子STM32MP135文档BUG&#xff09; 【Linux驱动开发】通过ioremap虚拟内存映射的寄存器操作驱动 devmem命令测试 gitee库&#xff1a; https://gitee.com/Mike_Zho…

记一次Netty模拟压测应用开发

背景 最近需要开发一个上游端模拟数据推送&#xff0c;测试高流量下下游的业务功能处理速度&#xff0c;大致架构如下 准备工作 构造消息体&#xff0c;由于是模拟大量数据推送并没有业务逻辑&#xff0c;所以我们使用池化的directBuffer增加推送消息以及减少创建和消费buf…

13.1 Linux_网络编程_TCP/UDP

字节序 1、概述 什么是字节序&#xff1a; 字节序就是字节的存储顺序&#xff0c;分为大端字节序和小端字节序。 大端字节序&#xff1a;低地址存高位&#xff08;网络&#xff09;小端字节序&#xff1a;低地址存低位&#xff08;主机&#xff09; 检验主机字节序模式&…

Java @RequestPart注解:同时实现文件上传与JSON对象传参

RequestPart注解&#xff1a;用于处理multipart/form-data请求的一部分&#xff0c;通常用于文件上传或者处理表单中的字段。 java后端举例&#xff1a; PostMapping("/fileTest")public AjaxResult fileTest(RequestPart("file") MultipartFile file,Req…

【时间之外】IT人求职和创业应知【10】

认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:SFISF【互换便利】 1. 央行推出股票回购增持再贷款,科技股全线爆发 新闻概要: 2024年10月18日,央行等三部门联合发布《关于设立股票回购增持再贷款有关事宜的通知》,同时表示年底有进一步…

基于GeoScene Pro的开源数据治理与二维制图规范化处理智能工具箱

内容导读 本文描述的是一个基于GeoScene Pro4.0/ArcGIS3.1 Pro平台的开源数据治理与二维制图规范化处理智能工具箱(免费试用&#xff0c;文末有获取方式)&#xff0c;旨在解决GIS应用中数据转换、检查、治理和制图数据规范化处理方面的问题。 工具箱结合了Geoscene/ArcGIS Pr…

Asp.net Core SignalR 跨域设置(Furion)

前端VUE2.0/3.0 后端NET8.0/NET6.0 框架Furion 前端安装SignalR通信库&#xff0c;下面任意一条安装指令都可以&#xff0c;根据项目自行选择 npm install microsoft/signalr yarn add microsoft/signalr前端使用 <script> import { HubConnectionBuilder } from micr…

[Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么&#xff1f;二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针前提&#xff1a; Agents 8.9.0 放入 项…

C#从零开始学习(用unity探索C#)(unity Lab1)

初次使用Unity 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp Unity的下载与安装 从 unity官网下载Unity Hub Unity的使用 安装后,注册账号,下载unity版本,然后创建3d项目 设置窗口界面布局 3D对象的创建 点击对象,然后点击Move Guzmo,就可以拖动…

云服务解决方案,针对小程序、网页、HTML5等轻量化视频解决方案

无论是社交媒体上的短视频分享&#xff0c;还是企业官网中的产品展示&#xff0c;亦或是教育平台上的互动课程&#xff0c;高质量、易制作的视频内容正以前所未有的速度改变着我们的生活方式和工作模式。然而&#xff0c;面对多样化的发布平台和日益增长的个性化需求&#xff0…

Python从0到100(六十五):Python OpenCV-图像运颜色转换及几何变换

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

.net 根据html的input type=“week“控件的值获取星期一和星期日的日期

初始化 "week" 控件值&#xff1a; //MVC部分 public ActionResult WeeklyList() {int weekNo new GregorianCalendar().GetWeekOfYear(System.DateTime.Now, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday);string DefaultWeek DateTime.No…

ssm医院交互系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

python+大数据+基于spark的短视频推荐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Mybatis框架 day1018

ok了家人们书接上文&#xff0c;我们继续学习mybatis框架 五.数据输出 5.7 属性和字段的映射 5.7.1 别名映射 将数据库表的字段别名设置成和实体类属性一致。 <!-- 给每一个字段设置一个别名&#xff0c;让别名和Java实体类中 属性名一致 --> <select id"fi…

赋能特大城市水务数据安全高速运算,深圳计算科学研究院YashanDB数据库系统斩获“鼎新杯”二等奖

第三届“鼎新杯”数字化转型应用优秀案例评选结果日前正式公布&#xff0c;深圳计算科学研究院联合深圳市环境水务集团有限公司申报的《深圳环境水务国产数据库YashanDB&#xff0c;赋能特大城市水务数据安全高速运转》案例&#xff0c;经过5个多月的评审&#xff0c;从4000申报…

设计模式04-创建型模式1(简单工厂/工厂模式/抽象工厂/Java)

3.1 简单工厂模式 3.1.1 创建型模式 创建型设计模式将对象的创建过程和对象的使用过程分离&#xff0c;用户使用对象时无需关注对象的创建细节&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不用清楚其实现细节&#xff0c;使得整个系统的设计更加符合…

Redis JSON介绍

Redis JSON介绍 Redis JSON先说说JSON是什么再说说JSON Path先推荐两个网站JSONPath JAVA clents Redis JSON 安装内存json命令语法命令url命令解释JSON.ARRAPPENDJSON.ARRINDEXJSON.ARRINSERTJSON.ARRLENJSON.ARRPOPJSON.ARRTRIMJSON.CLEARJSON.DEBUG MEMORYJSON.DEBUGJSON.DE…

单例模式(自动加载)

目录 介绍 使用 在脚本中写一个函数 让一个「自定义场景」作为单例「自动加载」 介绍 单例模式是编程中的一种设计思想&#xff0c;是为了解决某些编程语言中没有全局变量概念而产生的这对于实现某种模块非常好用 比如玩家信息&#xff0c;有时候&#xff0c;游戏中的很多…