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

在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]

相关文章:

  • Linux——进程信号
  • 【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64
  • 【什么是 Referrer Policy ?(详解:来源地址策略;访客从哪里来)】
  • project从入门到精通(四)
  • 智芯Z20K144x MCU开发之时钟架构
  • Git_idea界面进行分支合并到主分支详细操作
  • C++编程语言:标准库:标准库概观(Bjarne Stroustrup)
  • 半导体机器人赛道“领跑者”优艾智合:以创新驱动国产化替代加速度
  • Sourcetree安装使用的详细教程
  • 高拟人化客服机器人显著提升用户接受度
  • 第一天——贪心算法——分饼干
  • STM32F103RC中ADC1和ADC2通道复用
  • 关于AI 大数据模型的基础知识 杂记
  • 紧扣婴幼儿托育服务与管理实训室建设要点:评估与持续改进策略
  • WebSocket与Socket.IO实现简易客服聊天系统全解析
  • 力扣26——删除有序数组中的重复项
  • 特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值
  • Uniapp Android/IOS 获取手机通讯录
  • MySQL SQL Mode及其说明
  • 4.3【LLaMA-Factory实战】教育大模型:个性化学习路径生成系统全解析
  • 中国天主教组织发贺电对新教皇当选表示祝贺
  • 七方面118项任务,2025年知识产权强国建设推进计划印发
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 汪明荃,今生不负你
  • 以军总参谋长:已进入“决定性打击计划的第二阶段”
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小