GPU编程(基于Python和CUDA)(四)——Mandelbort集

news2025/2/27 11:26:08

系列文章目录

GPU编程(基于Python和CUDA)(一)——零基础安装pycuda
GPU编程(基于Python和CUDA)(二)——显示GPU信息
GPU编程(基于Python和CUDA)(三)——逐元素运算核(ElementwiseKernel)
GPU编程(基于Python和CUDA)(四)——Mandelbort集


Mandelbort集

  • 系列文章目录
  • 前言
  • 编程化的定义
  • 创建Mandelbrot集
    • 引入依赖包
    • mandelbrot生成函数


前言

曼德勃罗特集是一个几何图形,曾被称为“上帝的指纹”。 这个点集均出自公式: Z n + 1 = ( Z n ) 2 + C Zn+1=(Zn)^2+C Zn+1=(Zn)2+C,对于非线性迭代公式 Z n + 1 = ( Z n ) 2 + C Zn+1=(Zn)^2+C Zn+1=(Zn)2+C,所有使得无限迭代后的结果能保持有限数值的复数z的集合(也称该迭代函数的Julia集)连通的c,构成曼德勃罗集。

编程化的定义

在前言中是来自百度百科的定义,很显然他的定义并不能很好的用于编程,下面我们再定义一个易于编程的定义

  1. 复数 c , n > = 0 , Z 0 = 0 , n > = 1 复数c,n>=0,Z_0=0,n>=1 复数c,n>=0,Z0=0,n>=1
  2. 递归序列 : z n = z n − 1 2 + c 递归序列:z_n=z_{n-1}^2+c 递归序列:zn=zn12+c
  3. 当 n 无穷大时, ∣ Z n ∣ 以 2 为界 当n无穷大时,|Z_n|以2为界 n无穷大时,Zn2为界

其中复数包含实部和虚部,为了更直观的观察,我们将在坐标轴上画图,其中x轴代表实部,y轴代表虚部
画出的图像如下图所示:
在这里插入图片描述

创建Mandelbrot集

引入依赖包

使用numpy来实现使用的包很简单,numpy用来生成数据并进行运算,matplotlib用来显示,time用来测试时间

import numpy as np
from time import time
import matplotlib.pyplot as plt

mandelbrot生成函数

为了方便调用,这里以函数的形式实现mandelbrot集的创建过程
参数及其含义

参数含义
width实部数字的数量
height虚部数字的数量
real_low实部最低值
real_high实部最高值
imag_low虚部最低值
imag_high虚部最高值
max_iters最大迭代次数

适当修改定义
定义中的Mandelbort集是可以递归下去,所以这里我们应该设定一个最大的迭代次数来终止运算
编写函数
我们先放完整代码

def simple_mandelbrot(width, height, real_low, real_high, imag_low, imag_high, max_iters):
    real_vals = np.linspace(real_low, real_high, width)
    imag_vals = np.linspace(imag_low, imag_high, height)
    mandelbrot_graph = np.ones((height, width), dtype=np.float32)
    for x in range(width):
        for y in range(height):
            c = np.complex64(real_vals[x] + imag_vals[y] * 1j)
            z = np.complex64(0)
            for i in range(max_iters):
                z = z ** 2 + c
                if (np.abs(z) > 2):
                    mandelbrot_graph[y, x] = 0
                    break
    return mandelbrot_graph

在代码中使用np.linspace分别生成实部和虚部(np.linspace传入三个参数,前两个参数表示取数的范围,第三个参数表示生成的个数)

可以使用np.ones生成一个数值全为1的矩阵,供后续计算使用,如果某个点不符合要求,那么该点的值将会被设为0

随后两个for循环遍历每个数实部与虚部的组合

使用np.complex64可以生成复数,遍历获取到复数后进行迭代,当迭代过程中数值不满足定义时将该点设为0
调用并测试

if __name__ == '__main__':
    t1 = time()
    mandel = simple_mandelbrot(512, 512, -2, 2, -2, 2, 256)
    t2 = time()
    mandel_time = t2 - t1
    t1 = time()
    fig = plt.figure(1)
    plt.imshow(mandel, extent=(-2, 2, -2, 2))
    plt.savefig('mandelbrot.png', dpi=fig.dpi)
    t2 = time()
    dump_time = t2 - t1
    print("计算时间:", mandel_time)
    print("保存时间:", dump_time)

运行结果如下:

计算时间: 6.852311134338379
保存时间: 0.37889933586120605

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

excel功能区(ribbonx)编程笔记--3 editbox与状态按钮togglebutton控件

从上次发布编程笔记2后,反响还不错,短短一个星期,访问量就达到了1500,说明虽然这个只是有写古老,但是再实际的工作中,excel的编程功能还是有或多人关注的,还不是很小众,比如我就是平时的统计就是使用excle,为了更好的实现自动统计,会添加部分vba代码到里面,就像我的…

直播|DITA内容发布工具解析 - 问答总结

9月6日,我们进行了一场名为“DITA内容发布工具解析”的直播。通过直播,大家了解到: DITA-OT简介 默认输出效果 定制以后输出效果 发布过程与样式定制 在问答环节,大家进行了热烈沟通。我将几个大家关心的问题和答复总结如下&…

图像文件的操作MATLAB基础函数使用

简介 MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。 查询图像文件的信息 使用如下函数 imfinfo(filename,fmt) 函数imfinfo返回一个结构体的info&#xff…

27.方向标

题目 描述 一位木匠收到了一个木制指示牌的订单。每块木板必须与前一块垂直对齐,要么与前一个箭头的基部对齐,要么与相反的一侧对齐,在那里用特制的螺钉固定。两块木板必须重叠。木匠将设计师发送的草图编码成了一个整数序列,但…

达梦数据库MAIN表空间导致磁盘满问题的处理和总结

前言 在达梦数据库使用中,建议对数据库表空间使用进行规划,业务用户创建单独的表空间使用。 如果不创建单独的用户表空间会遇到什么问题呢?通过下面的问题和测试说明合理的表空间规划是有必要的。 问题 某开发项目组使用DM8 1-2-192 版本。…

Window安装Node.js npm appium Appium Desktop

Window安装Node.js npm appium appium Desktop 1.安装nodejs 参考链接: https://blog.csdn.net/weixin_42064877/article/details/131610918 1)打开浏览器,并前往 Node.js 官网 https://nodejs.org/ ↗。 2)在首页中,您可以看到当前 Node.…

解决防火墙导致虚拟机不能ping通宿主机的问题

今天,无缘无故的,虚拟机突然用不了,网络连上不了,一番折腾翻找,最后才发现,是因为虚拟机ping不同宿主主机了,连网关都ping不通了,但是,宿主主机却可以ping通虚拟机 。 最…

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

Netty(一)NIO-基础

Netty 分布式根基于网络编程,Netty恰是java网络编程的王者,致力于高性能编程。 前置 适用于网络开发,服务器开发。多线程,线程池,maven。 大纲 NIO编程(Selector,ByteBuffer和Channel&…

即拼七人拼团系统开发模式,如何助力电商平台提升产品销量和复购率?

对于电商平台来说,如何提高产品销量和复购率,是每个其他都在面临的最大挑战。而应对这个挑战最好的方法就是结合一款合适的商业模式,一个姓王的客户就运用即拼七人拼团模式,成功提升了产品销量和复购率。 这个王客户运营的电商平台…

全栈自主可控!移动云边缘智能小站EIS新突破

8月中旬,移动云为福建泉州惠安某储能制造公司打造的边缘智能小站EIS正式上线。该项目是中国移动首个正式上线的软硬一体、全栈自主可控的超融合边缘智能小站项目。 边缘智能小站(EIS,Edge Intelligence Site)是基于移动云边缘超融…

Unity的UI面板基类

使用这个组件实现淡入淡出 public abstract class BasePanel : MonoBehaviour {//控制面板透明度 用于淡入淡出private CanvasGroup canvasGroup;//淡入淡出速度private float alphaSpeed 10;//隐藏还是显示public bool isShow false;//隐藏完毕后做的事private UnityAction …

中秋国庆双节将至,企业如何进行软文推广?

节点营销是每个企业都会面临的课题,中秋国庆双节将至,这两个节日不仅是人们消费的高峰期,也是各大企业通过节日营销提高品牌知名度和美誉度的最佳时机,节点营销的方式之一就是软文推广,那么企业应该如何利用双节来进行…

【ccf-csp题解】第1次csp认证-第四题-无线网络-特殊点个数限制的单源最短路径

题目描述 思路讲解 可以把题目抽象为&#xff1a;从第1个点到第2个点&#xff0c;经过特殊点的数量不超过k的单源最短路径&#xff08;其中每条边的权重均为1&#xff09; 可以使用bfs解决这个问题&#xff0c;但是dist[][]数组和队列中放置的pair<int,int>元素不再是单…

Python web 框架web.py「简约美」

web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. web.py 是一个简单而强大的 Python Web 框架。web.py 属于公共领域&#xff0c;您可以…

VBA系列技术资料1-177

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

外贸B2B建站怎么做?

答案是&#xff1a;外贸B2B建站可以用Wordpress来建站。 外贸企业在开展国际业务时&#xff0c;B2B网站的作用不可忽视。 它不仅展示了企业的实力和产品&#xff0c;还帮助企业建立起与潜在客户的联系。 如何打造一个有效的外贸B2B网站呢&#xff1f;本文将为您提供详细的建…

FPGA实现Cordic算法——向量模式

FPGA实现Cordic算法——向量模式 FPGA实现Cordic算法——向量模式1.cordic算法基本原理2.FPGA实现cordic算法向量模式i、FPGA串行实现cordicii、FPGA流水线实现cordiciii、实验结果 FPGA实现Cordic算法——向量模式 1.cordic算法基本原理 FPGA中运算三角函数&#xff0c;浮点数…

直播 | 丹望医疗王晓林博士“基于微流控的血管化器官/类器官芯片构建及其应用”

类器官模型具有高仿真性&#xff0c;与人体器官有高度相似的组织学特征和功能&#xff0c;尤其在肿瘤模型中能够较好保留肿瘤异质性等优势&#xff0c;在精准医疗及药物筛选等领域具有广泛的应用前景。同时&#xff0c;基于微流控技术的器官芯片能在微流体装置上实现多重微环境…

了解测试划分

界面测试 肉眼直观看到的,都属于界面,例如 WEB站(通过浏览器打开的网站),APP,小程序,公众号 界面的重要性:用户和软件交流的时候,通常都是通过界面进行交互的 业界测试界面的时候,参考软件规格说明书,UI视觉稿 可靠性测试 可靠性 正常运行时间/(正常运行时间非正常运行时…