atomsInstall找不到通过chocolatey安装的mingw编译器。
以下这个问题,我是我不太确定问题在哪里,所以我为所有涉及的组件添加标签.我正在尝试在Scilab内使用MINGW编译器.有一个MINGW原子,据说应该由 安装 atomsInstall('mingw') 返回空和 atomsLoad('mingw'); 返回错误: mingw编译器支持Scilab 负载宏 警告:未检测到mingw编译器. 负载帮助 和haveacompiler()返回false F,尽管我通过巧克力安装了编译器.有什么问题: 需要将编译器添加到Windows环境变量或类似的内容中?我想巧克力应该默认情况下照顾好.我已经反映了这个问题 mingw scilab原子中有一个错误.我已经联系了维护者Antoine Elias和Allan Cornet. 这是一个MINGW错误,因为有些人已经使用了.我也分享了这个问题, p.s.1.我已经报告了在这里. p.s.2.我已经通过 解决方案 解决方案:在Scilab
0 2023-12-06
编程技术问答社区
如何将一个布尔数组转换为一个int数组
我使用scilab,并想将一系列布尔人转换为整数数组: >>> x = np.array([4, 3, 2, 1]) >>> y = 2 >= x >>> y array([False, False, True, True], dtype=bool) 在Scilab中,我可以使用: >>> bool2s(y) 0. 0. 1. 1. ,甚至仅将其乘以1: >>> 1*y 0. 0. 1. 1. 在python中有一个简单的命令,还是我必须使用循环? 解决方案 numpy阵列具有astype方法.只是做y.astype(int). 请注意,根据您使用的数组的目的,甚至可能没有必要执行此操作.在许多情况下,BOOL会自动化为INT,因此您可以将其添加到INT数组,而无需明确转换: >>> x array([ True, False, True], dtype=bool) >>> x + [1,
10 2023-10-30
编程技术问答社区
读取串行端口的最新行
我从未在TCL中写过任何代码,并且在串行通信方面很漂亮,因此,如果我的问题没有意义,请提前. 我正在尝试解决我想要的问题要收听串行端口并像普通的串行终端一样(例如Arduino的串行显示器)在SCILAB中逐行打印更新. function buf=readserial(h,n) if ~exists("n","local") then N=serialstatus(h); n=N(1) end TCL_EvalStr("binary scan [read "+h+" "+string(n)+"] cu* ttybuf") buf=ascii(evstr(TCL_GetVar("ttybuf"))); endfunction 其中TCL_EvalStr在TCL中解释字符串.所以我的任务是如何更改行: binary scan [read "+h+" "+string(n)+"] cu* ttybuf 因此,它仅返回串行端口上的最新非空线?如果您可以eli5这行有什么作用
6 2023-10-25
编程技术问答社区
在 Scilab 控制台上复制 Arduino 的串行监视器
如果我使用Arduino IDE的串行显示器,我可以读取以下逗号分隔值: 我想首先在Scilab终端复制此行为.我使用了h = openserial(7, "9600,n,8,1") // open COM7 disp(readserial(h)) closeserial(h) 返回空或 ,169 228,179 228, 228,205 228,209 228, 将disp(readserial(h))放在一段时间内也无济于事.不仅空排太多,如果我停止循环,它不会关闭端口(我认为应该使用诸如try-catch之类的东西).如果您能帮助我知道我如何获得与Arduino的串行监视器相同的行为? 我会很感激? p.s.接下来我想实时绘制这两个值.因此,也许使用csvTextScan函数将字符串分为两个整数. 解决方案 好吧,几天后,我弄清楚了.事实证明,Scilab没有本机串行通信功能,工具箱开发人员使用TCL_EvalStr在
8 2023-10-25
编程技术问答社区
优化、时间复杂性和流程图(Scilab)。
我试图优化此代码,但是不再需要优化. 请帮助为该算法构建流程图. A = [-1,0,1,2,3,5,6,8,10,13,19,23,45]; B = [0,1,3,6,7,8,9,12,45]; N1 = length(A); N2 = length(B); t = 1; m = 10; C = []; for i=1:N1 for j=1:N2 if A(i)==B(j) break else if j==N2 C(t)=A(i); t=t+1; end end end end disp(C); N3=length(C); R = []; y = 1; for l=1:N3 if C(l)>m R(y)=C(l); y=y+1; end e
12 2023-10-21
编程技术问答社区
用C++或Scilab或Octave或R进行大量数据的统计。
我最近需要计算大数(约800万)双打的平均值和标准偏差.考虑到双双字节需要8个字节,如果将所有双打读入RAM,则大约需要6 GB.我认为我可以使用C ++或其他高级语言的鸿沟和征服方法,但这似乎很乏味.有什么方法可以用R,Scilab或八度等高级语言立即完成所有操作?谢谢. 解决方案 听起来您可以使用R-Grid或Hadoop来获得良好的优势. 您当然会意识到,可以轻松地计算平均值和标准偏差,而不必将所有值读为内存.像这样的Java类那样,只要保持总跑步.您需要的只是总和,总和和点数.我免费保持最小和最大. 这也清楚地表明了地图还原的工作方式.您可以实例化几个统计的实例,让每个实例保持总和,正方价和800m点部分的点数.然后让减少步骤组合它们并使用相同的公式获得最终结果. import org.apache.commons.lang3.StringUtils; import java.util.Collection; /** * Statistics ac
12 2023-09-29
编程技术问答社区
如何使Scilab在Linux(Ubuntu)中打开与/dev/ttyACM0 USB端口的串行通信
我正在尝试在 scilab 和arduino之间打开串行通信.但是,/dev/tty**ACM0**端口中的Linux Ubuntu始终识别Arduino.当我在scilab中写h=openserial(1,"9600,n,8,1)时,我知道我在说,要在linux中打开一个串行通信或/dev/tty**S0**. 但是,例如,如果我使用h=openserial(N,"9600,n,8,1),假设N=port number,我将始终在Windows和/dev/tty**S**(N-1)中使用comn. 如何通过scilab中的/dev/tty**ACM0** for Linux打开串行通信? 解决方案 查看function h=openserial(p,smode,translation,handshake,xchar,timeout) //port name if ~exists("p","local") then p=1; end if type(p)==1 | t
22 2023-08-29
编程技术问答社区
如何在scilab中绘制心脏曲线?
我一直在论坛和程序的图形功能中查找帮助,如何绘制以下功能: x2=[-2:0.02:2]';x1=[-1:0.01:1]'; function val = Heart(x1, x2) val=(1.2*x2-sqrt(abs(x1)))^2+x1^2-1; endfunction 我还没有找到任何可以指导我的东西. 我尝试重现这个枫树图: 心脏曲线 解决方案 由于您定义了3D表面,因此您可以使用contour和contour2d:如 luispauloml ,您可以直接将功能作为参数传递. x1=[-1:0.01:1] x2=[-2:0.02:2] function val = Heart(x1, x2) val=(1.2*x2-sqrt(abs(x1))).^2+x1.^2-1; // switched ^ to .^ to handle vectors endfunction; figure() xlabel('x1') ylabel(
12 2023-07-13
编程技术问答社区
使用 scilab 演示特殊函数
我写了一个函数以查找Log(Fn) / n,其中Fn是fibonacci编号的序列F_{n+1} = F_n + F_{n-1}: function [g] = logf(n) u = 0; v = 1; f = v; for i = 2:n do f = u + v; u = v; v = f; end g = log(f) / n; endfunction 我需要的是为1
12 2023-07-13
编程技术问答社区
为每个数据循环绘制新的颜色并添加值点
我有一堆测量数据,我想在一个数字中绘制这些数据.每个测量都应具有新的颜色. 如何为每个循环绘制新颜色?附加我想查看每个数据点带有标记点. 首先, 我尝试使用RGB值作为颜色向量. 但它不起作用. cmap = rainbowColorMap(size(datfiles,'*')) for k = 1:size(Data,'*') // read all data1,data2,data3,data4..... execstr(["xvalues=data"+string(k)+"(:,1);"]) execstr(["yvalues=data"+string(k)+"(:,2);"]) plot2d(xvalues,yvalues,style=color(cmap(k,:))) end 然后我发现, plot2d(xvalues,yvalues,k)是解决方案,用于代表每个绘制线的循环中的新颜色. j=1; for k = 1:
10 2023-07-13
编程技术问答社区
将ODE45()转换为scilab
我正在尝试将此脚本从MATLAB转换为Scilab.我尝试了SCILAB工具进行转换,但没有输出崩溃,因此我手工进行.这就是我通过将评论从%更改为//来获得的. @markovprocessfunc是指我可以使用Scilab自动工具转换的另一个文件. // Markovprocess // Main program of the markovprocess simulation // The system is defined by the generator matrix A // Ulf Jeppsson, January 2017 global B // Define the duration of the simulation disp(' ') disp('Automation 2017, Markov processes') disp(' ') tend = input('Set simulation time = '); disp(' ') // Make a
122 2023-06-21
编程技术问答社区
如果两种语言都遵循IEEE 754,两种语言的计算结果是否相同?
我正在将程序从SCILAB代码转换为C ++.尤其是一个循环是与原始Scilab代码产生的结果略有不同(这是一条很长的代码,所以我不会将其包括在问题中,但我会尽力总结以下问题). 问题是,循环的每个步骤都使用上一步中的计算.此外,计算之间的差异仅在第100,000次迭代左右(大约300,000). . 注意:我将C ++程序的输出与使用"格式(25)"的Scilab 5.5.2的输出进行比较.命令.这意味着我要比较25个重要数字.我还想指出,我了解在一定数量的位之后无法保证精确度,但是在评论之前请阅读以下部分.到目前为止,所有计算在两种语言之间最多25位数字. 试图解决这个问题的底部,到目前为止,我已经尝试过: 检查正在使用的数据类型: 我设法确认Scilab正在使用IEEE 754双打(根据语言文档).另外,根据Wikipedia的说法,C ++ 并不需要使用IEEE 754进行双打,但是据我所知,我在C ++中使用double的任何地方都可以与Scilab
10 2023-06-14
编程技术问答社区
Scilab中浮点计算的精度是多少?
注意:我使用了MATLAB标签,以防它们保持相同的精度. (据我所知,这两个程序都非常相似.) 作为我先前问题的后续措施(此处),我正在尝试确定需要设置的精度(在我当前从SCILAB代码转换的C ++程序中)模拟 SCILAB程序的准确性.本质上,两个程序都产生相同的结果(或非常相似). 计算Scilab中的浮点计算时,保持精度的水平是多少? 我已经阅读了(在这里和其他一些地方)在c ++中,双重只能准确地维护约16个小数的位置,例如: 4 8 12 16 v v v v 0.947368421052631578 long double 0.947368421052631526 double 与Scilab相比,这种准确性有多相似? 解决方案 重新发布评论作为答案: IEEE 754双精度浮点数是大多数通用语言中的标准表示,例如MATLAB,C ++和SCILAB: 因此,除了使用C ++双打(除非您
18 2023-06-14
编程技术问答社区
如何通过引用向Scilab函数传递变量
我想拥有一个能够更改其输入变量的scilab函数,例如C中我可以有 void double(int* x){ *x *= 2; return; } 有intppty,funptr,addinter,istk,sadr和stk在Scilab中似乎很重要,但是我找不到任何有效的示例. Scilab确实具有pointer类型(即128).如果您能帮助我解决这个问题,我会很感激. p.s.1.我也反映了这个问题 p.s.2. scilab也具有intersci,fort,fort,external,external,call,API_Scilab/gateway可以接口C/C++功能或Fortran子例程.不幸的是,intersci已被弃用,SWIG似乎仅适用于有限的C++兼容性. p.s.3. scilab具有 p.s.4.方式API_Scilab/gateway工作,基本上是您使用提供的函数来开发代码bu header file api_scilab.h
16 2023-06-09
编程技术问答社区
Scilab: 对Lotka Volterra模型进行参数估计 Scilab
我试图重现以下链接的脚本: 我在结果中得到了类似的错误. 您可以指导我在没有错误的情况下运行脚本. Gracias 爱马仕 解决方案 SCILAB 5.5.1或更小的解决方案 问题在于求解器以某种方式达到了无法在每个t上解决颂歌并在某个点停止的点.因此,您的y_calc大小小于y_exp. 如果这不是您的问题,请在Differences函数的第6行上更改diffmat diffmat = y_calc' - y_exp(1:size(y_calc',1),:) SCILAB 6.0.0或更大的解决方案 ode函数现在在scilab 6.x.x. 中未能计算时会引起错误 使用try ... catch ... end语句,我们可以让程序处理. 是错误的(我将解释原因)解决方案正在将Differences函数的第5行更改为 try // test if ode works normally [y_calc,odew,odeiw]=ode
30 2023-05-19
编程技术问答社区
如何将依赖性变量包括在Scilab中的ode-solver中?
我目前正在求解一个非线性颂歌系统.这是一组运动学运动方程,我需要用给定的anguar速度计算位置角 我发现,如何使用列表添加取决于时间的函数,但是问题是,如何添加一个也依赖时间但作为向量给出的参数. 简化的是在以下代码中编写. c(t)是时间函数. function dx = f(t, x, c) dx(1) = x(1)*sin(x(2)) dx(2) = c*x(2)*cos(x(1)) dx(3) = t*cos(x(3)) endfunction c = 1:32; // values from measured signal, here simplyfied y0 = [0.1;0.1;0.1]; t0 = 0; t = 0:0.1:%pi; y = ode(y0, t0, t, list (f, c)); 解决方案 参见 如何将功能表转换为插值函数. 使用interpln线性插值 本质上,在右侧功能dx=f(t,x,tc_
14 2023-05-19
编程技术问答社区
如何在Octave或Scilab中使用并行'for'循环?
我有两个用于在MATLAB代码中运行的循环.内部循环使用12个处理器中的Matlabpool并行化(这是一台机器中允许的最大MATLAB). 我没有分发计算许可证.请帮助我使用八度或scilab如何做.我只想并行化"仅对"循环. 我在Google中搜索它时给出了一些断开的链接. 解决方案 parfor尚未在八度中真正实现.关键字被接受,但仅仅是for的同义词( .nabble.com/parfor-td4630575.html ). 并行包装的pararrayfun和parcellfun在多核算机上方便. 它们通常是一个很好的替代品. 有关示例,请参见 http://wiki.octave.org/parallel_package . 要安装,请发行(仅一次) pkg install -forge parallel ,然后在每个会话上一次 pkg load parallel 使用函数之前 其他解决方案 在Scilab中您可以使用
26 2023-05-19
编程技术问答社区
Scilab中ODE的奇怪行为:方程dy/dx=A没有得到正确解决
我仍在学习Scilab(5.5.2),所以我正在编写和运行测试代码以熟悉该软件. 要测试数值微分方程求解器,我从方程式 dy/dx = a 开始容易,它具有解决方案 y = ax+c (线方程) . 这是我写的代码: // Function y = A*x+1 function ydot=fn(x, A) ydot=A endfunction A=2; //Initial conditions x0=0; y0=A*x0+1; //Numerical Solution x=[0:5]; y= ode(y0,x0,x,fn); //Analytical solution y2 = A*x+1; clf(); plot(x, y); plot(x, y2, '-k'); //End 这些是出乎意料的结果: y = 1. 2.7182824 7.3890581 20.085545 54.598182 148.41327 y2 =1.3.5. 7. 9
16 2023-05-08
编程技术问答社区
在Scilab中求解ODE
我试图通过求解ODE在Scilab中进行一些电路分析.但是我需要根据功能的当前值更改ODE.我已经使用RK4方法在Scala中实现了解决方案,并且可以很好地工作.现在,我正在尝试执行相同的操作,但是在Scilab中使用标准功能.而且它不起作用.我试图单独解决这两种频率,还可以. clear state = 0 // state 0 is charging, 1 is discharging vb = 300.0; vt = 500.0; r = 100.0; rd = 10.0; vcc = 600; c = 48.0e-6; function dudx = curfunc(t, uu) if uu vt state = 1 end select state case 0 then // charging dudx = (vcc - uu) / (r * c
32 2023-05-08
编程技术问答社区