当前位置: 首页 > ai >正文

在Mathematica中加速绘制图形(LibraryLink)

Wolfram LibraryLink 所提供的函数能够优化数值计算,同时保留 Wolfram 语言的灵活性与通用性。若已有大量现成的数值代码,无论是通过 Wolfram 符号传输协议(WSTP)还是 LibraryLink,都能有效地将这些代码与 Wolfram 语言连接,实现从 Wolfram 语言驱动运行。另一方面,若正在开发数值计算程序,可以先用 Wolfram 语言进行原型开发,当某些部分出现性能瓶颈时,再使用 LibraryFunction 对这些关键模块进行加速。LibraryFunction 还能直接与 Wolfram 语言的数值计算函数无缝集成,因此在处理需在不同采样点进行计算的场景时,编写针对性代码往往能显著提升运算效率。这里,将要简单介绍一下LibraryLink的使用。

系统提供的源码,是在这个文件中:

demo_numerical.c

使用代码:

source = FileNameJoin[{$InstallationDirectory, "SystemFiles", "Links", "LibraryLink", "LibraryResources", "Source"}]; FilePrint[FileNameJoin[{source, "demo_numerical.c"}]]

可以查看这个源码文件的详细内容。这些源码文件中,包含的函数,主要有:

parabola,mandelbrot,duffing_rhs et etc.

这里将展示mandelbrot函数的使用。这个函数的源码为:

static mint mandelbrot_max_iterations = 1000; DLLEXPORT int mandelbrot(WolframLibraryData libData, mint Argc, MArgument *Args, MArgument Res) { mint n = 0; mcomplex z = {0.,0.}; mcomplex c = MArgument_getComplex(Args[0]); mreal rr = mcreal(z)*mcreal(z); mreal ii = mcimag(z)*mcimag(z); while ((n < mandelbrot_max_iterations) && (rr + ii < 4)) { mcimag(z) = 2.*mcreal(z)*mcimag(z) + mcimag(c); mcreal(z) = rr - ii + mcreal(c); rr = mcreal(z)*mcreal(z); ii = mcimag(z)*mcimag(z); n++; } if (n == mandelbrot_max_iterations) n = 0; MArgument_setInteger(Res, n); return LIBRARY_NO_ERROR; }

首先是加载函数:

这个函数mlf就可以像Mathematica中的函数一样,可以计算复平面中的点。

Plot3D[mlf[x + I y], {x, -2., .5}, {y, -1.25, 1.25}, PlotPoints -> 100, ColorFunction -> "SolarColors", ViewAngle -> Pi/8]

使用如下代码,

n = 501; samples = Table[mlf[x + I y], {y, -1.25, 1.25, 2.5/(n - 1)}, {x, -2., .5, 2.5/(n - 1)}]; Image[Unitize[samples], "Bit"]

可以绘制黑白图形:

将函数值映射为颜色通道,结合使用Raster函数,可以绘制彩色图形:

colormap = Function[If[# == 0, {0., 0., 0.}, {#/25., #/25., 1.}]]; Graphics[Raster[Map[colormap, samples, {2}]], ImageSize -> 512]

也可以绘制随机颜色图形:

colormap = Function[If[# == 0, {0., 0., 0.}, Part[r, #]]] /. r -> RandomReal[1, {1000, 3}]; Graphics[Raster[Map[colormap, samples, {2}]], ImageSize -> 512]

http://www.xdnf.cn/news/5030.html

相关文章:

  • Vue3项目中如何实现网页加载进度条。
  • 专题练习1
  • 图像移动图像归类代码
  • 仁合医疗进博会:创新成果闪耀亮相
  • [逆向工程]什么说ASLR技术(二十三)
  • 操作系统导论——第26章 并发:介绍
  • 剖析 Java 23 特性:深入探究最新功能
  • Android framework功能配置开发
  • SQL JOIN 关联条件和 where 条件的异同
  • AnyTXTSearcher电脑本地文件搜索工具
  • 深入理解 Vue 全局导航守卫:分类、作用与参数详解
  • AVL树:保持平衡的高效二叉搜索树
  • apipost快捷使用实例
  • 43.防雷击浪涌设计
  • 计算机系统结构-第九章-互联网络 第十章
  • Windows系统下【Celery任务队列】python使用celery 详解(一)
  • AIOps 工具介绍
  • Python程序打包为EXE文件的全面指南
  • 面试常考算法2(核心+acm模式)
  • [AI ][Dify] Dify Tool 插件调试流程详解
  • 使用 Python 构建图像编辑应用:一步步指南
  • 强化学习PPO算法学习记录
  • 并发设计模式实战系列(19):监视器(Monitor)
  • 支付宝沙盒模式商家转账经常出现 响应异常: 解包错误
  • 《微机原理》微机程序段 计算机编程数据分区
  • 修改docker为国内源
  • YOLOv12云端GPU谷歌免费版训练模型
  • 访问网页的全过程(分步骤的详细解析)
  • 【java反射修改注解属性】java 通过反射,动态修改注解的某个属性值
  • 抖音到店摸着京东外卖过河