我正在尝试在C中实现Matlab的linspace函数。我对如何制作该算法感到困惑。
如果假设我有一个数字s = 6 ..那么范围将是-6到6.
如果Even ..
在这个范围内,如果我需要假设4个相等的数字,那么输出将是-6,-2,2,6。
如果我需要6个相等的数字,那么输出将是-6,-3.6,-1.2,1.2,3.6,6。
如果奇怪......
如果我需要假设5个相等的数字,那么输出将是-6,-3,0,3,6
如果我需要假设7个相等的数字,那么输出将是-6,-4,-2,0,2,4,6
我该如何处理这个过程?
答案 0 :(得分:1)
我不确定这是否正确。但举个例子。 s = 6,范围= -6至6
案例:即使n = 4
-6到6,我们有12个单位,12/(n-1) = size of a single unit = 12/(4-1) = 4
所以从-6, (-6+4)=-2, (-2+4)=2, (4+2)=6
案例:奇数n = 5
一个数字是0.现在我们需要4个数字,0左边2个,0右边2个。
-6到0我们有6个单位/ 2 = 3
所以从-6, (-6+3)=3, 0, (0+3)=3, (3+3)=6
答案 1 :(得分:0)
public static void findRange(int n, int gaps) {
int totalRange = 2*n;
ArrayList rangeValues = new ArrayList();
if(totalRange%gaps == 0)
{
int gapValInt = totalRange / gaps;
int j=0;
for(int i = -n ; i <=n ; i=i+gapValInt )
{
rangeValues.add(i);
}
}
else
{
float val;
float gapValFloat = (float)totalRange / gaps;
for(int i = 0 ; i <= gaps ; i++)
{
val = -n + gapValFloat * i;
rangeValues.add(Math.round(val*10.0)/10.0);
}
}
for(Object o : rangeValues)
{
System.out.println(o.toString());
}
}
答案 2 :(得分:0)
linspace(a, b, n)
可以像这样实现(伪代码):
step = (b-a)/(n-1)
return (a, a+step*1, a+step*2, ..., b)
在C:
#include <stdio.h>
#include <stdlib.h>
float *
linspace(int a, int b, int n) {
int i;
float *arr, step;
arr = malloc(sizeof(*arr) * n);
if (arr == NULL) {
perror("malloc");
return NULL;
}
step = (b - a)/(n-1.0);
for (i = 0; i < n; i++) {
arr[i] = a + step * i;
}
return arr;
}