我在一些文本文件中有数据,可以说10000行和2列.我知道我可以轻松地绘制它plot "filename.txt" using 1:2 with lines.然而我想要的只是绘制让我们说1000到2000的行或任何其他合理的选择.是否可以轻松地做到这一点?非常感谢你提前.
我想在Common Lisp中并行实现我的粒子滤波算法.粒子过滤和采样可以并行化,我想为我的4核机器做这个.我的问题是并行编程是否在CL中是可行的,如果可行,是否有任何良好的读数,关于在CL中开始并行计算的教程.
我之前在Matlab中使用GUI工具箱开发了GUI,现在我正在为我的项目使用常见的lisp.我需要开发一个可能有按钮,单选按钮,图形窗口等的GUI.
我只是想知道在Common Lisp中是否可行,以及是否有工具箱,相当容易使用和学习的库.我没有强大的编程背景,所以如果可能的话,我会尽量避免使用高级的东西.
非常感谢你提前.
有没有办法使用常见的lisp创建目录.我想首先创建一个文件夹,然后将我的.txt .png文件放入其中.我知道首先我可以在外部创建文件夹,然后使用with-open-file等在目录中创建我的文件.我想要的是一个常见的lisp解决方案.
是否有可能在Gnuplot中创建动态图?我需要的是,由于数据是通过某个循环生成的,因此我将使用gnuplot在xy轴上放置一些标记,保留较旧的标记.因此,不知怎的,我将能够观察数据的演变,而不仅仅是看到最终的批量结果.
我特别想要的是等同于MATLAB中的"drawow"命令.
虽然不完全相关,但现在我使用常见的lisp来生成循环和cgn中的数据,以便使用gnuplot在lisp中绘制.(我可以使用cgn利用gnuplot在普通lisp中以批量形式绘制数据)
非常感谢您的关注.
编辑:我为此目的在共同的lisp中编写了一个代码.你可以在这里查看:
使用Common Lisp和Gnuplot从emacs顺序绘制数据
这个线程更通用,并在gnuplot中请求动态绘图.欢迎任何建议.
我有一个lisp文件,它在循环中进行大量的采样,文件I/O和算术运算.(我在常见的lisp中进行粒子过滤.)我正在使用compile-file命令编译我的lisp文件.我也在(declaim (optimize (speed 3) (debug 0) (safety 0)))我的lisp文件的开头使用,因为我希望尽快得到我的结果.
我用(time (load "/....../myfile.lisp")和(time (load "/......./myfile.dx64fsl")测量速度.问题是编译不会给我带来任何好处.没有任何进步.我做错了吗?有办法改善事情吗?速度是最重要的标准,因此我可以牺牲很多,以获得快速响应.我不知道这类问题,所以任何帮助将不胜感激.
而且,当我将粒子数量(每个粒子是大小约为40的矢量)增加到10000时,代码变得非常慢,因此也可能存在一些内存问题.
非常感谢你提前.
编辑:这是具有1000个粒子和50次迭代的分析结果.
(LOAD "/.../myfile.dx64fsl") took 77,488,810 microseconds (77.488810 seconds) to run
with 8 available CPU cores.
During that period, 44,925,468 microseconds (44.925470 seconds) were spent in user mode
32,005,440 microseconds (32.005440 seconds) were spent in system mode
2,475,291 microseconds (2.475291 seconds) was spent in GC.
1,701,028,429 bytes of memory allocated.
1,974 minor page faults, 0 major …Run Code Online (Sandbox Code Playgroud) 我有一个N阶多项式(其中N是偶数).对于x减/加无穷大,该多项式等于负无穷大(因此它具有最大值).我现在正在做的是通过使用polyder然后找到N-1阶多项式的根来获取多项式的导数.roots函数在Matlab中返回N-1个解.然后我选择真正最大化多项式的真根.问题是我正在更新我的多项式,并且在每一步我使用上述过程来找到最大化器.因此,root函数需要花费太多的计算时间才能使我的应用程序变慢.有没有办法在Matlab或提出的算法中以计算有效的方式实现这种最大化(即只找到一个解决方案而不是N-1解决方案)?谢谢.
编辑:我还想知道Matlab中是否有一个例程只返回真实的根,而不是
roots返回所有真实/复杂的根.
假设我有一些数据(一个特定的向量).我可以使用Gnuplot按顺序逐个元素地绘制它,使得它看起来好像是通过监视器追踪的真实信号吗?
我知道我可以使用Common Lisp将整个数据写入文本文件,然后使用gnuplot我可以以批处理格式绘制它.我需要的是,我希望在数据顺序出现时对我的情节说明一点.
数据可能会在循环内生成,因此您可以将x轴视为整数值离散时间轴.所以在循环中如果数组的第一个元素生成为5,我想在我的绘图上加点(0,5).然后,如果第二个元素生成为3,我想在我的绘图上添加另一个点(1,7)(保留旧数据点).因此,当我遍历循环时,我按顺序绘制数据.
我使用emacs和Common Lisp用于我的目的,我想将这些数据绘制在这些工具中.如果除了Gnuplot之外还有其他选择,我想听听他们的意见.
如果这不容易实现,那么如果我可以通过一些Common Lisp命令运行Gnuplot命令文件,那将会很酷.
编辑:
根据人们在这个帖子下给出的建议,我写了一个使用cgn它的代码ltk.
现在我在屏幕上预先指定的位置打开两个x11窗口,然后进入循环.在循环中,每次打开流并将数据(以20 Hz采样的0.25 Hz的正弦和余弦波)写入带有:if-exists :append选项的文本文件trial.txt 并关闭流.然后在每次迭代时,我使用gnuplot通过format-gnuplot命令绘制整个数据.这段代码给了我两个预先指定的x和y范围的窗口,然后可以看到窗口中上述正弦波和余弦波的演变.
正如我之前所说,我没有强大的编程背景(我是一名电子工程师,不知何故使用常见的lisp结束),我很确定我的代码是非最优和不优雅的.如果你们有一些进一步的建议,更正等我真的很想听听他们.代码在这里:
(setf filename "trial.txt")
(setf path (make-pathname :name filename))
(setf str (open path :direction :output :if-exists :supersede :if-does-not-exist :create))
(format str "~,4F ~,4F" -1 -1)
(close str)
;start gnuplot process
(start-gnuplot "/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot")
;set 2 x11 windows with the following properties
(format-gnuplot "cd ~S" "Users/yberol/Desktop/lispbox/code")
(format-gnuplot "set terminal x11 0 position 0,0")
(format-gnuplot "set xrange [0:10]")
(format-gnuplot "set …Run Code Online (Sandbox Code Playgroud) 假设我想从某个概率分布中抽取样本。在下面的例子中,我在 0 和 1 之间绘制了一些均匀分布的 rv 10000 次。我不关心向量中随机样本的顺序,毕竟它们是随机的。
(setf my-vec (make-sequence 'vector 10000 :initial-element 0))
(loop :for i :from 0 :to 9999 :do
(setf (svref my-vec i) (random 1.0)))
Run Code Online (Sandbox Code Playgroud)
我有一台多核机器,我想并行实现上面的代码。(即假设我有 4 个内核,在一个内核中采样 2500,最后将所有样本附加到一个向量中。我之前在 这里询问过Common Lisp 并行编程。假设我是 CL 和编程方面的新手我应该如何解决这个问题?我不需要并行化的高级特性,我只是想将采样的计算负载平均分配到机器核心。如果你能指出一些并行化的步骤或一些在线教程的东西我可以从中受益会非常好。非常感谢。
我正在尝试评估以下积分:

我可以找到以下多项式的区域如下:
pn =
-0.0250 0.0667 0.2500 -0.6000 0
Run Code Online (Sandbox Code Playgroud)
首先使用Simpson规则的整合
fn=@(x) exp(polyval(pn,x));
area=quad(fn,-10,10);
fprintf('area evaluated by Simpsons rule : %f \n',area)
Run Code Online (Sandbox Code Playgroud)
然后结果是area evaluated by Simpsons rule : 11.483072
以下代码,用伽马函数计算上述公式中的求和
a=pn(1);b=pn(2);c=pn(3);d=pn(4);f=pn(5);
area=0;
result=0;
for n=0:40;
for m=0:40;
for p=0:40;
if(rem(n+p,2)==0)
result=result+ (b^n * c^m * d^p) / ( factorial(n)*factorial(m)*factorial(p) ) *...
gamma( (3*n+2*m+p+1)/4 ) / (-a)^( (3*n+2*m+p+1)/4 );
end
end
end
end
result=result*1/2*exp(f)
Run Code Online (Sandbox Code Playgroud)
这返回11.4831.quad功能或多或少相同的结果.现在我的问题是我是否有可能摆脱这个嵌套循环,因为我将构建累积分布函数,以便我可以使用逆CDF变换从此分布中获取样本.(用于构建cdf我将使用gammaincie不完整的gamma函数代替gamma)
我将需要从可能具有不同多项式系数的密度中进行采样,并且速度是我所关心的.我已经可以使用蒙特卡罗方法从这样的密度中进行采样,但我想看看是否可以使用密度的精确采样来加速.非常感谢你提前.
是否有可能在常见的lisp中有一个命令,它以某种方式暂时暂停执行.在matlab中,您可以使用pause命令来实现此目的,您也可以在其中设置暂停时间.我想要做的是,在循环中我将结果打印到顶级然后等待x秒(我将设置x),进行下一次迭代,打印并等待等等.
非常感谢你提前.
common-lisp ×8
lisp ×6
matlab ×4
gnuplot ×3
plot ×3
compilation ×1
concurrency ×1
directory ×1
integral ×1
loops ×1
max ×1
maximize ×1
octave ×1
optimization ×1
performance ×1
probability ×1
sequential ×1