Related
I would like to recreate this sort of "cubic" surface rendering in GNU Octave:
[From AEG Mesher documentation]
How can I achieve this, given a list of coordinates which represent a surface or volume in a structured grid?
Obviously there's probably much more elaborate frameworks out there, but just to demonstrate the concept: the idea that you can only work with triangular patches is incorrect. You can specify your own patches as elaborately as you want.
In the following example, I create a simple function which draws a 3D cube 'patch', to be treated as a 'pixel' element in a structured 'mesh'.
function drawpatchpixel( x, y, z, c )
Vertices = [ 0, 0, 0
0, 1, 0
1, 1, 0
1, 0, 0
0, 0, 1
0, 1, 1
1, 1, 1
1, 0, 1 ];
Faces = [ 1, 2, 3, 4 # front
2, 6, 7, 3 # top
5, 6, 7, 8 # back
1, 5, 8, 4 # bottom
1, 2, 6, 5 # left
4, 3, 7, 8 ]; # right
patch( 'Faces', Faces, 'Vertices', Vertices + [x, y, z], 'facecolor', c )
endfunction
Then I simply draw the pixels in the preferred colour:
Pixels = { 0, 0, 0, 'r'; # base
1, 0, 0, 'r';
2, 0, 0, 'r';
3, 0, 0, 'r';
4, 0, 0, 'r';
4, 1, 0, 'r';
4, 2, 0, 'r';
4, 3, 0, 'r';
4, 4, 0, 'r';
3, 4, 0, 'r';
2, 4, 0, 'r';
1, 4, 0, 'r';
0, 4, 0, 'r';
0, 3, 0, 'r';
0, 2, 0, 'r';
0, 1, 0, 'r';
0, 0, 1, [0.5, 0.5, 0.5]; # pillars
0, 0, 2, [0.5, 0.5, 0.5];
0, 0, 3, [0.5, 0.5, 0.5];
0, 0, 4, [0.5, 0.5, 0.5];
4, 0, 1, [0.5, 0.5, 0.5];
4, 0, 2, [0.5, 0.5, 0.5];
4, 0, 3, [0.5, 0.5, 0.5];
4, 0, 4, [0.5, 0.5, 0.5];
4, 4, 1, [0.5, 0.5, 0.5];
4, 4, 2, [0.5, 0.5, 0.5];
4, 4, 3, [0.5, 0.5, 0.5];
4, 4, 4, [0.5, 0.5, 0.5];
0, 4, 1, [0.5, 0.5, 0.5];
0, 4, 2, [0.5, 0.5, 0.5];
0, 4, 3, [0.5, 0.5, 0.5];
0, 4, 4, [0.5, 0.5, 0.5];
0, 1, 4, 'g'; # roof
0, 2, 4, 'g';
0, 3, 4, 'g';
4, 1, 4, 'g';
4, 2, 4, 'g';
4, 3, 4, 'g';
1, 0, 4, 'g';
2, 0, 4, 'g';
3, 0, 4, 'g';
1, 4, 4, 'g';
2, 4, 4, 'g';
3, 4, 4, 'g';
};
NPixels = size( Pixels, 1 );
for i = 1 : NPixels
drawpatchpixel( Pixels{i, :} )
endfor
axis equal
view( 30, 30 )
xlabel( 'x'); ylabel('y'), zlabel('z');
camlight
Result:
Hi I have this data coming from an API and I know it is a cube:
{
"position": {
"itemSize": 3,
"type": "Float32Array",
"array": [
0.5,
0.5,
0.5,
0.5,
0.5,
-0.5,
0.5,
-0.5,
0.5,
0.5,
-0.5,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5,
0.5,
-0.5,
-0.5,
-0.5,
-0.5,
-0.5,
0.5,
-0.5,
0.5,
-0.5,
0.5,
0.5,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.5,
-0.5,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.5,
0.5,
0.5,
-0.5,
-0.5,
0.5,
-0.5,
0.5,
-0.5,
-0.5,
-0.5,
-0.5,
-0.5
],
"normalized": false
},
"normal": {
"itemSize": 3,
"type": "Float32Array",
"array": [
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1,
0,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1,
0,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1,
0,
0,
-1
],
"normalized": false
},
"uv": {
"itemSize": 2,
"type": "Float32Array",
"array": [
0,
1,
1,
1,
0,
0,
1,
0,
0,
1,
1,
1,
0,
0,
1,
0,
0,
1,
1,
1,
0,
0,
1,
0,
0,
1,
1,
1,
0,
0,
1,
0,
0,
1,
1,
1,
0,
0,
1,
0,
0,
1,
1,
1,
0,
0,
1,
0
],
"normalized": false
}
}
How can I now create from these data a cube and its material in Unity? Is there a library or a built-in function?
First in general for parsing your JSON data into useful structure you need to have an according class structure and the use e.g. JsonUtility
[Serializable]
public class DataSet
{
public int itemSize;
public int[] array;
public bool normalized;
}
[Serializable]
public class Example
{
public DataSet position;
public DataSet normal;
public DataSet uv;
}
and do
var data = JsonUtility.FromJson<Example>(yourJsonString);
Next this data is still quite raw and we have to parse it further since we want valid vector values
var vertices = new List<Vector3>();
for(var i = 0; i < data.position.array.Length; i+=3)
{
if(i+2 > data.position.array.Length - 1) break;
var x = data.position.array[i];
var y = data.position.array[i+1];
var z = data.position.array[i+2];
vertices.Add(new Vector3(x,y,z));
}
And similar for normals and UVs(just that here you use Vector2 instead)
Then to the main question: Since you already have positions (I assume vertices), normals and UVs I guess you are wondering where to get the triangles from.
UVs don't help here at all since they are only texture coordinates defining how the texture is later mapped on triangles.
Also the normals can't really help you here. A normal is just a direction and doesn't provide any helpful information about which three vertices together make up a triangle.
To get the triangles would only be possible if you know e.g. that always 3 sequential vertices make up a triangle - meaning your mesh has duplicate vertices.
Otherwise I'ld say it is not possible to know that triangles from your given data.
In Unity the triangles is simply a flat int[] where always three sequential elements are the indexes of the three vertices from the vertices array.
So under the one assumption that they are just consequent something like
var triangles = new int[vertices.Length];
for(var i = 0; i < triangles.Length; i++)
{
triangles[i] = i;
}
Then you could simply put it all together and create a mesh like
var mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
// Etc
I have a sparse matrix and want to divide the region into 4 parts, dividing x and y in 2 equidistant pieces and want to calculate the sum of the corresponding values.
For the example below, the coordinates x-y each corresponds to [0,16] so the region is a square. There is a sparse matrix in this square, which is symmetrical. I would like to divide the region into smaller squares and sum up the sparse values. Region 0:8,0:8 has 2 elements and their values are both (2,3)=(3,2)=8 so the sum is 16.
Summation of the 1st region should give 16, 2nd and 3rd are 36 and the 4th one is 26.
x = sparse(16,16);
x (3,2) = 8;
x (10,2) = 8;
x (13,2) = 8;
x (14,2) = 4;
x (15,2) = 4;
x (2,3) = 8;
x (10,3) = 4;
x (13,3) = 4;
x (14,3) = 2;
x (15,3) = 2;
x (2,10) = 8;
x (3,10) = 4;
x (13,10) = 4;
x (14,10) = 2;
x (15,10) = 2;
x (2,13) = 8;
x (3,13) = 4;
x (10,13) = 4;
x (14,13) = 2;
x (15,13) = 2;
x (2,14) = 4;
x (3,14) = 2;
x (10,14) = 2;
x (13,14) = 2;
x (15,14) = 1;
x (2,15) = 4;
x (3,15) = 2;
x (10,15) = 2;
x (13,15) = 2;
x (14,15) = 1;
i would rather appriciate a shorter way, rather than writing a line for each sub-square. lets say for 6000 sub-squares one should write 6000 lines?
Let's define the input in a more convenient way:
X = sparse([...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 8, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 4, 4
0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 2, 2
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 8, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 2
0, 4, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1
0, 4, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 1, 0]);
For convenience, we first make the array dimensions even. We don't use padarray() for this because this makes the sparse matrix full!
sz = size(X);
newX = sparse(sz(1)+1,sz(2)+1);
padTopLeft = true; % < chosen arbitrarily
if padTopLeft
newX(2:end,2:end) = X;
else % bottom right
newX(1:sz(1),1:sz(2)) = X;
end
%% Preallocate results:
sums = zeros(2,2,2);
Method #1: accumarray
We create a mask of the form:
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4
and then use it to sum the appropriate elements of newX:
sums(:,:,1) = reshape(...
accumarray(reshape(repelem([1,2;3,4], ceil(sz(1)/2), ceil(sz(2)/2)),[],1),...
reshape(newX, [],1),...
[],#sum) ,2,2);
Method #2: blockproc (requires the Image Processing Toolbox)
sums(:,:,2) = blockproc(full(newX), ceil(sz/2), #(x)sum(x.data(:)));
Several notes:
I also tried histcounts2, which is very short, but it only tells you the amount of values in each quadrant, not their sum:
[r,c] = find(newX);
histcounts2(r,c,[2,2])
I might've overcomplicated the accumarray solution.
Although your question is not very precise and you don't made any efford to find a solution, here is what you are asking..
clear;clc;close;
Matrix=rand(20,20);
Acc=zeros(1,4);
Acc(1)=sum(sum( Matrix(1:size(Matrix,1)/2,1:size(Matrix,2)/2) ));
Acc(2)=sum(sum( Matrix((size(Matrix,1)/2)+1:end,1:size(Matrix,2)/2)));
Acc(3)=sum(sum( Matrix(1:size(Matrix,1)/2,((size(Matrix,2)/2)+1):end )));
Acc(4)=sum(sum( Matrix((size(Matrix,1)/2)+1:end,((size(Matrix,2)/2)+1):end)));
% Verification
sum(sum(Matrix)) % <- is the same with
sum(Acc) % <- this
You can define any rectangle within the matrix by defining the 4 corners of it. Then use a for loop to process all rectangles.
regions = [
1 8 1 8
9 16 1 8
1 8 9 16
9 16 9 16
];
regionsum = zeros(size(regions,1),1);
for rr = 1:size(regions,1)
submat = x(regions(rr,1):regions(rr,2),regions(rr,3):regions(rr,4));
regionsum(rr) = sum(submat(:));
end
>> regionsum
regionsum =
16
36
36
26
If you mean you want to divide the square matrix into 2^N (N>2) squares of the same size then you can write regions with a for loop.
N = 1; % 2^N-by-2^N sub-squares
L = size(x,1);
dL = L/(2^N);
assert(dL==int32(dL),'Too many divisions')
segments = zeros(2^N,2);
for nn = 1:2^N
segments(nn,:) = [1,dL]+dL*(nn-1);
end
regions = zeros(2^(2*N),4);
for ss = 1:2^N
for tt = 1:2^N
regions((2^N)*(ss-1) + tt,:) = [segments(ss,:),segments(tt,:)];
end
end
example output with dividing into 16 (N=2) square submatrices:
>> regions
regions =
1 4 1 4
1 4 5 8
1 4 9 12
1 4 13 16
5 8 1 4
5 8 5 8
5 8 9 12
5 8 13 16
9 12 1 4
9 12 5 8
9 12 9 12
9 12 13 16
13 16 1 4
13 16 5 8
13 16 9 12
13 16 13 16
>> regionsum
regionsum =
16
0
12
24
0
0
0
0
12
0
0
8
24
0
8
10
>>
1)Why the variable length in my sample code are not 62 after calculate ? It's
seems every time the condition is satisfied,but enter the condition,
the number "length not be added every single time.
2)If I don't use concurrency::array length(1, 1, &V[0]); to save counter
but using tile_static int, the length is also wrong.
//if my 8 x 8 local data are:
//cache[TS][TS]
//{
// -69, 0, 0, 1, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0
//}
My sample code:
void sample()
{
std::vector<int> V;
V.push_back(0);
concurrency::array<int, 2> length(1, 1, &V[0]);
const int TS = 8;
concurrency::parallel_for_each(data.extent.tile<TS, TS>(), [=, &length](tiled_index<TS, TS> index) restrict(amp)
{
const int row = index.local[0];
const int col = index.local[1];
//tile_static int length; ---------2)
tile_static int cache[TS][TS];
cache[row][col] = data[index.global];
index.barrier.wait();
if (cache[row][col] == 0)
{
//length++; -------------------2)
length[0][0] = length[0][0] + 1;
}
});
}
std::vector<int> V;
for (int i = 0; i < 256; i++)
V.push_back(0);
concurrency::array_view<int, 1> AC_count(256, &V[0]);
const int TS = 8;
concurrency::parallel_for_each(data.extent.tile<TS, TS>(), [=, &length](tiled_index<TS, TS> index) restrict(amp)
{
const int row = index.local[0];
const int col = index.local[1];
tile_static int cache[TS][TS];
cache[row][col] = data[index.global];
index.barrier.wait();
if (cache[row][col] == 0)
{
atomic_fetch_add(&AC_count[0], 1);
}
});
}
I can run a model in WinBUGS14 with no problem and get the results, but I get a problem when I run the same WinBUGS model (shown as below) from MatLab. It looks the program never stops running and no results return.
Can anyone help me. Any advice will be greatly appreciated. Thanks.
1) my WinBUGS Code --- CHK_model.txt
model {
for(i in 1: N) {
CF01[i] ~ dnorm(0, 20)
CF02[i] ~ dnorm(0, 1)
h[i] ~ dpois (lambda [i])
log(lambda [i]) <- beta0 + beta1*CF03[i] + beta2*CF02[i] + beta3*CF01[i] + beta4*IND[i]
}
beta0 ~ dnorm(0.0, 1.0E-6)
beta1 ~ dnorm(0.0, 1.0E-6)
beta2 ~ dnorm(0.0, 1.0E-6)
beta3 ~ dnorm(0.0, 1.0E-6)
beta4 <- log(p)
p ~ dunif(lower, upper)
}
2) my MatLab Code
dataStruct = struct( ...
'N', 155, ...
'lower', 0.80, ...
'upper', 0.95, ...
'h',[1, 4, 1, 2, 1, 2, 1, 1, 1, 3, 3, 0, 0, 0, 2, 0, 1, 0, 4, 2, ...
3, 0, 2, 1, 1, 2, 2, 2, 3, 4, 2, 3, 1, 0, 1, 3, 3, 3, 1, 0, 1, ...
0, 5, 2, 1, 2, 1, 3, 3, 1, 1, 0, 2, 2, 0, 3, 0, 0, 3, 2, 2, 2, ...
1, 0, 3, 3, 1, 1, 1, 2, 1, 0, 1, 2, 1, 2, 0, 2, 1, 0, 0, 2, 5, ...
0, 2, 1, 0, 2, 1, 2, 2, 2, 0, 3, 2, 1, 3, 3, 3, 3, 0, 1, 3, 3, ...
3, 1, 0, 0, 1, 2, 1, 0, 1, 4, 1, 1, 1, 1, 2, 1, 3, 0, 0, 1, 1, ...
1, 1, 0, 2, 1, 0, 0, 1, 1, 5, 1, 1, 1, 3, 0, 1, 1, 1, 0, 2, 1, ...
0, 3, 3, 0, 0, 1, 2, 6, nan], ...
'CF03',[-1.575, 0.170, -1.040, -0.010, -0.750, ...
0.665, -0.250, 0.145, -0.345, -1.915, -1.515, ...
0.215, -1.040, -0.035, 0.805, -0.860, -1.775, ...
1.725, -1.345, 1.055, -1.935, -0.160, -0.075, ...
-1.305, 1.175, 0.130, -1.025, -0.630, 0.065, ...
-0.665, 0.415, -0.660, -1.145, 0.165, 0.955, ...
-0.920, 0.250, -0.365, 0.750, 0.045, -2.760, ...
-0.520, -0.095, 0.700, 0.155, -0.580, -0.970, ...
-0.685, -0.640, -0.900, -0.250, -1.355, -1.330, ...
0.440, -1.505, -1.715, -0.330, 1.375, -1.135, ...
-1.285, 0.605, 0.360, 0.705, 1.380, -2.385, -1.875, ...
-0.390, 0.770, 1.605, -0.430, -1.120, 1.575, 0.440, ...
-1.320, -0.540, -1.490, -1.815, -2.395, 0.305, ...
0.735, -0.790, -1.070, -1.085, -0.540, -0.935, ...
-0.790, 1.400, 0.310, -1.150, -0.725, -0.150, ...
-0.640, 2.040, -1.180, -0.235, -0.070, -0.500, ...
-0.750, -1.450, -0.235, -1.635, -0.460, -1.855, ...
-0.925, 0.075, 2.900, -0.820, -0.170, -0.355, ...
-0.170, 0.595, 0.655, 0.070, 0.330, 0.395, 1.165, ...
0.750, -0.275, -0.700, 0.880, -0.970, 1.155, 0.600, ...
-0.075, -1.120, 1.480, -1.255, 0.255, 0.725, ...
-1.230, -0.760, -0.380, -0.015, -1.005, -1.605, ...
0.435, -0.695, -1.995, 0.315, -0.385, -0.175, ...
-0.470, -1.215, 0.780, -1.860, -0.035, -2.700, ...
-1.055, 1.210, 0.600, -0.710, 0.425, 0.155, -0.525, ...
-0.565], ...
'CF02',[nan, nan, nan, nan, nan, nan, nan, nan, nan, ...
nan, nan, nan, nan, nan, nan, 0.38, 0.06, -0.94, ...
-0.02, -0.28, -0.78, -0.95, 2.33, 1.43, 1.24, 1.26, ...
-0.75, -1.5, -2.09, 1.01, -0.05, 2.48, 2.48, 0.46, ...
0.46, -0.2, -1.11, 0.52, -0.37, 0.58, 0.86, 0.59, ...
-0.12, -1.33, 1.4, -1.84, -1.4, -0.76, -0.23, ...
-1.78, -1.43, 1.2, 0.32, 1.87, 0.43, -1.71, -0.54, ...
-1.25, -1.01, -1.98, 0.52, -1.07, -0.44, -0.24, ...
-1.31, -2.14, -0.43, 2.47, -0.09, -1.32, -0.3, ...
-0.99, 1.1, 0.41, 1.01, -0.19, 0.45, -0.07, -1.41, ...
0.87, 0.68, 1.61, 0.36, -1.06, -0.44, -0.16, 0.72, ...
-0.69, -0.94, 0.11, 1.25, 0.33, -0.05, 0.87, -0.37, ...
-0.2, -2.22, 0.26, -0.53, -1.59, 0.04, 0.16, -2.66, ...
-0.21, -0.92, 0.25, -1.36, -1.62, 0.61, -0.2, 0, ...
1.14, 0.27, -0.64, 2.29, -0.56, -0.59, 0.44, -0.05, ...
0.56, 0.71, 0.32, -0.38, 0.01, -1.62, 1.74, 0.27, 0.97, ...
1.22, -0.21, -0.05, 1.15, 1.49, -0.15, 0.05, -0.87, ...
-0.3, -0.08, 0.5, 0.84, -1.67, 0.69, 0.47, 0.44, ...
-1.35, -0.24, -1.5, -1.32, -0.08, 0.76, -0.57, ...
-0.84, -1.11, 1.94, -0.68], ...
'CF01',[nan, nan, nan, nan, nan, nan, nan, nan, nan, ...
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, ...
nan, -0.117, -0.211, -0.333, -0.229, -0.272, ...
-0.243, -0.148, 0.191, -0.263, -0.239, -0.168, ...
-0.381, -0.512, -0.338, -0.296, 0.067, 0.104, ...
-0.254, -0.167, -0.526, -0.096, -0.43, 0.013, ...
-0.438, -0.297, -0.131, -0.098, -0.046, -0.063, ...
-0.194, -0.155, -0.645, -0.603, -0.374, -0.214, ...
-0.165, -0.509, -0.171, -0.442, -0.468, -0.289, ...
-0.427, -0.519, -0.454, 0.046, -0.275, -0.401, ...
-0.542, -0.488, -0.52, -0.018, -0.551, -0.444, ...
-0.254, -0.286, 0.048, -0.03, -0.015, -0.219, ...
-0.029, 0.059, 0.007, 0.157, 0.141, -0.035, 0.136, ...
0.526, 0.113, 0.22, -0.022, -0.173, 0.021, -0.027, ...
0.261, 0.082, -0.266, -0.284, -0.097, 0.097, -0.06, ...
0.397, 0.315, 0.302, -0.026, 0.268, -0.111, 0.084, ...
0.14, -0.073, 0.287, 0.061, 0.035, -0.022, -0.091, ...
-0.22, -0.021, -0.17, -0.184, 0.121, -0.192, ...
-0.24, -0.283, -0.003, -0.45, -0.138, -0.143, ...
0.017, -0.245, 0.003, 0.108, 0.015, -0.219, 0.09, ...
-0.22, -0.004, -0.178, 0.396, 0.204, 0.342, 0.079, ...
-0.034, -0.122, -0.24, -0.125, 0.382, 0.072, 0.294, ...
0.577, 0.4, 0.213, 0.359, 0.074, 0.388, 0.253, 0.167], ...
'IND',[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
Nchains = 3;
clear initStructs;
for i=1:Nchains
S.beta0 = 0;
S.beta1 = 0;
S.beta2 = 0;
S.beta3 = 0;
S.P = 0.9;
initStructs(i) = S;
end
bugsFolder = 'C:\Program Files\winbugs14\WinBUGS14';
[samples, stats] = matbugs(dataStruct, ...
fullfile(pwd, 'CHK_model.txt'), ...
'init', initStructs, ...
'view', 0, 'nburnin', 1000, 'nsamples', 5000, ...
'thin', 10, ...
'monitorParams', {'theta', 'mu_theta', 'sigma_theta'}, ...
'Bugdir', bugsFolder);
# N t, thank you so much for your help. I don't know why I cannot response to you by using 'Post your answer". So I response here:
I download the matbugs.m from a website (http://code.google.com/p/matbugs/) and didn't touch this program at all.
When I run the Matlab code (as shown in my post), the computation goes to WinBUGS interface and stops there. Three WinBUGS windows pop up: the first one is WinBUGS Licence window, the second one is Log window, and the third one is Trap window.
1) here is the Log Window; .... data loaded compile(3) model compiled inits(1,
2) here is the Trap Wind ... (pc=764962F9H, fp=0028FB3CH) (pc=76496D39H, fp=0028FBB4H) (pc=764977C3H, fp=0028FC14H) (pc=76497BC9H, fp=0028FC24H) HostMenus.Loop [00003BDEH] .done BOOLEAN FALSE .f SET {0..5} .n INTEGER 0 .res INTEGER 0 .w HostWindows.Window NIL Kernel.Start [00002B8CH] .code PROCEDURE HostMenus.Loop
3) The program of matbugs.m is too long to post here, but I used exactly same program as this one http://code.google.com/p/matbugs/source/browse/trunk/matbugs.m
Thanks again for your time and for your advice!
Bo