I have currently created a function which takes in two arguments.
function p = matr(x, phi)
x_dir = linspace(0, x, 1);
r = linspace(0, phi, 1);
p = zeros(800, 2);
p(1:400, 1) = p(1:400, 1) + x_dir.';
p(401:800, 2) = p(401:800, 2) + r.';
end
Which returns this matrix for the given input:
path = trajectory(10, pi/2)
path =
0 0
0.0251 0
0.0501 0
0.0752 0
0.1003 0
0.1253 0
0.1504 0
0.1754 0
0.2005 0
0.2256 0
0.2506 0
0.2757 0
0.3008 0
0.3258 0
0.3509 0
0.3759 0
0.4010 0
0.4261 0
0.4511 0
0.4762 0
0.5013 0
0.5263 0
0.5514 0
0.5764 0
0.6015 0
0.6266 0
0.6516 0
0.6767 0
0.7018 0
0.7268 0
0.7519 0
0.7769 0
0.8020 0
0.8271 0
0.8521 0
0.8772 0
0.9023 0
0.9273 0
0.9524 0
0.9774 0
1.0025 0
1.0276 0
1.0526 0
1.0777 0
1.1028 0
1.1278 0
1.1529 0
1.1779 0
1.2030 0
1.2281 0
1.2531 0
1.2782 0
1.3033 0
1.3283 0
1.3534 0
1.3784 0
1.4035 0
1.4286 0
1.4536 0
1.4787 0
1.5038 0
1.5288 0
1.5539 0
1.5789 0
1.6040 0
1.6291 0
1.6541 0
1.6792 0
1.7043 0
1.7293 0
1.7544 0
1.7794 0
1.8045 0
1.8296 0
1.8546 0
1.8797 0
1.9048 0
1.9298 0
1.9549 0
1.9799 0
2.0050 0
2.0301 0
2.0551 0
2.0802 0
2.1053 0
2.1303 0
2.1554 0
2.1805 0
2.2055 0
2.2306 0
2.2556 0
2.2807 0
2.3058 0
2.3308 0
2.3559 0
2.3810 0
2.4060 0
2.4311 0
2.4561 0
2.4812 0
2.5063 0
2.5313 0
2.5564 0
2.5815 0
2.6065 0
2.6316 0
2.6566 0
2.6817 0
2.7068 0
2.7318 0
2.7569 0
2.7820 0
2.8070 0
2.8321 0
2.8571 0
2.8822 0
2.9073 0
2.9323 0
2.9574 0
2.9825 0
3.0075 0
3.0326 0
3.0576 0
3.0827 0
3.1078 0
3.1328 0
3.1579 0
3.1830 0
3.2080 0
3.2331 0
3.2581 0
3.2832 0
3.3083 0
3.3333 0
3.3584 0
3.3835 0
3.4085 0
3.4336 0
3.4586 0
3.4837 0
3.5088 0
3.5338 0
3.5589 0
3.5840 0
3.6090 0
3.6341 0
3.6591 0
3.6842 0
3.7093 0
3.7343 0
3.7594 0
3.7845 0
3.8095 0
3.8346 0
3.8596 0
3.8847 0
3.9098 0
3.9348 0
3.9599 0
3.9850 0
4.0100 0
4.0351 0
4.0602 0
4.0852 0
4.1103 0
4.1353 0
4.1604 0
4.1855 0
4.2105 0
4.2356 0
4.2607 0
4.2857 0
4.3108 0
4.3358 0
4.3609 0
4.3860 0
4.4110 0
4.4361 0
4.4612 0
4.4862 0
4.5113 0
4.5363 0
4.5614 0
4.5865 0
4.6115 0
4.6366 0
4.6617 0
4.6867 0
4.7118 0
4.7368 0
4.7619 0
4.7870 0
4.8120 0
4.8371 0
4.8622 0
4.8872 0
4.9123 0
4.9373 0
4.9624 0
4.9875 0
5.0125 0
5.0376 0
5.0627 0
5.0877 0
5.1128 0
5.1378 0
5.1629 0
5.1880 0
5.2130 0
5.2381 0
5.2632 0
5.2882 0
5.3133 0
5.3383 0
5.3634 0
5.3885 0
5.4135 0
5.4386 0
5.4637 0
5.4887 0
5.5138 0
5.5388 0
5.5639 0
5.5890 0
5.6140 0
5.6391 0
5.6642 0
5.6892 0
5.7143 0
5.7393 0
5.7644 0
5.7895 0
5.8145 0
5.8396 0
5.8647 0
5.8897 0
5.9148 0
5.9398 0
5.9649 0
5.9900 0
6.0150 0
6.0401 0
6.0652 0
6.0902 0
6.1153 0
6.1404 0
6.1654 0
6.1905 0
6.2155 0
6.2406 0
6.2657 0
6.2907 0
6.3158 0
6.3409 0
6.3659 0
6.3910 0
6.4160 0
6.4411 0
6.4662 0
6.4912 0
6.5163 0
6.5414 0
6.5664 0
6.5915 0
6.6165 0
6.6416 0
6.6667 0
6.6917 0
6.7168 0
6.7419 0
6.7669 0
6.7920 0
6.8170 0
6.8421 0
6.8672 0
6.8922 0
6.9173 0
6.9424 0
6.9674 0
6.9925 0
7.0175 0
7.0426 0
7.0677 0
7.0927 0
7.1178 0
7.1429 0
7.1679 0
7.1930 0
7.2180 0
7.2431 0
7.2682 0
7.2932 0
7.3183 0
7.3434 0
7.3684 0
7.3935 0
7.4185 0
7.4436 0
7.4687 0
7.4937 0
7.5188 0
7.5439 0
7.5689 0
7.5940 0
7.6190 0
7.6441 0
7.6692 0
7.6942 0
7.7193 0
7.7444 0
7.7694 0
7.7945 0
7.8195 0
7.8446 0
7.8697 0
7.8947 0
7.9198 0
7.9449 0
7.9699 0
7.9950 0
8.0201 0
8.0451 0
8.0702 0
8.0952 0
8.1203 0
8.1454 0
8.1704 0
8.1955 0
8.2206 0
8.2456 0
8.2707 0
8.2957 0
8.3208 0
8.3459 0
8.3709 0
8.3960 0
8.4211 0
8.4461 0
8.4712 0
8.4962 0
8.5213 0
8.5464 0
8.5714 0
8.5965 0
8.6216 0
8.6466 0
8.6717 0
8.6967 0
8.7218 0
8.7469 0
8.7719 0
8.7970 0
8.8221 0
8.8471 0
8.8722 0
8.8972 0
8.9223 0
8.9474 0
8.9724 0
8.9975 0
9.0226 0
9.0476 0
9.0727 0
9.0977 0
9.1228 0
9.1479 0
9.1729 0
9.1980 0
9.2231 0
9.2481 0
9.2732 0
9.2982 0
9.3233 0
9.3484 0
9.3734 0
9.3985 0
9.4236 0
9.4486 0
9.4737 0
9.4987 0
9.5238 0
9.5489 0
9.5739 0
9.5990 0
9.6241 0
9.6491 0
9.6742 0
9.6992 0
9.7243 0
9.7494 0
9.7744 0
9.7995 0
9.8246 0
9.8496 0
9.8747 0
9.8997 0
9.9248 0
9.9499 0
9.9749 0
10.000 0
0 0
0 0.0039
0 0.0079
0 0.0118
0 0.0157
0 0.0197
0 0.0236
0 0.0276
0 0.0315
0 0.0354
0 0.0394
0 0.0433
0 0.0472
0 0.0512
0 0.0551
0 0.0591
0 0.0630
0 0.0669
0 0.0709
0 0.0748
0 0.0787
0 0.0827
0 0.0866
0 0.0905
0 0.0945
0 0.0984
0 0.1024
0 0.1063
0 0.1102
0 0.1142
0 0.1181
0 0.1220
0 0.1260
0 0.1299
0 0.1339
0 0.1378
0 0.1417
0 0.1457
0 0.1496
0 0.1535
0 0.1575
0 0.1614
0 0.1653
0 0.1693
0 0.1732
0 0.1772
0 0.1811
0 0.1850
0 0.1890
0 0.1929
0 0.1968
0 0.2008
0 0.2047
0 0.2087
0 0.2126
0 0.2165
0 0.2205
0 0.2244
0 0.2283
0 0.2323
0 0.2362
0 0.2401
0 0.2441
0 0.2480
0 0.2520
0 0.2559
0 0.2598
0 0.2638
0 0.2677
0 0.2716
0 0.2756
0 0.2795
0 0.2835
0 0.2874
0 0.2913
0 0.2953
0 0.2992
0 0.3031
0 0.3071
0 0.3110
0 0.3149
0 0.3189
0 0.3228
0 0.3268
0 0.3307
0 0.3346
0 0.3386
0 0.3425
0 0.3464
0 0.3504
0 0.3543
0 0.3583
0 0.3622
0 0.3661
0 0.3701
0 0.3740
0 0.3779
0 0.3819
0 0.3858
0 0.3897
0 0.3937
0 0.3976
0 0.4016
0 0.4055
0 0.4094
0 0.4134
0 0.4173
0 0.4212
0 0.4252
0 0.4291
0 0.4331
0 0.4370
0 0.4409
0 0.4449
0 0.4488
0 0.4527
0 0.4567
0 0.4606
0 0.4645
0 0.4685
0 0.4724
0 0.4764
0 0.4803
0 0.4842
0 0.4882
0 0.4921
0 0.4960
0 0.5000
0 0.5039
0 0.5079
0 0.5118
0 0.5157
0 0.5197
0 0.5236
0 0.5275
0 0.5315
0 0.5354
0 0.5393
0 0.5433
0 0.5472
0 0.5512
0 0.5551
0 0.5590
0 0.5630
0 0.5669
0 0.5708
0 0.5748
0 0.5787
0 0.5827
0 0.5866
0 0.5905
0 0.5945
0 0.5984
0 0.6023
0 0.6063
0 0.6102
0 0.6141
0 0.6181
0 0.6220
0 0.6260
0 0.6299
0 0.6338
0 0.6378
0 0.6417
0 0.6456
0 0.6496
0 0.6535
0 0.6575
0 0.6614
0 0.6653
0 0.6693
0 0.6732
0 0.6771
0 0.6811
0 0.6850
0 0.6889
0 0.6929
0 0.6968
0 0.7008
0 0.7047
0 0.7086
0 0.7126
0 0.7165
0 0.7204
0 0.7244
0 0.7283
0 0.7323
0 0.7362
0 0.7401
0 0.7441
0 0.7480
0 0.7519
0 0.7559
0 0.7598
0 0.7637
0 0.7677
0 0.7716
0 0.7756
0 0.7795
0 0.7834
0 0.7874
0 0.7913
0 0.7952
0 0.7992
0 0.8031
0 0.8071
0 0.8110
0 0.8149
0 0.8189
0 0.8228
0 0.8267
0 0.8307
0 0.8346
0 0.8385
0 0.8425
0 0.8464
0 0.8504
0 0.8543
0 0.8582
0 0.8622
0 0.8661
0 0.8700
0 0.8740
0 0.8779
0 0.8819
0 0.8858
0 0.8897
0 0.8937
0 0.8976
0 0.9015
0 0.9055
0 0.9094
0 0.9133
0 0.9173
0 0.9212
0 0.9252
0 0.9291
0 0.9330
0 0.9370
0 0.9409
0 0.9448
0 0.9488
0 0.9527
0 0.9567
0 0.9606
0 0.9645
0 0.9685
0 0.9724
0 0.9763
0 0.9803
0 0.9842
0 0.9881
0 0.9921
0 0.9960
0 1.0000
0 1.0039
0 1.0078
0 1.0118
0 1.0157
0 1.0196
0 1.0236
0 1.0275
0 1.0315
0 1.0354
0 1.0393
0 1.0433
0 1.0472
0 1.0511
0 1.0551
0 1.0590
0 1.0629
0 1.0669
0 1.0708
0 1.0748
0 1.0787
0 1.0826
0 1.0866
0 1.0905
0 1.0944
0 1.0984
0 1.1023
0 1.1063
0 1.1102
0 1.1141
0 1.1181
0 1.1220
0 1.1259
0 1.1299
0 1.1338
0 1.1377
0 1.1417
0 1.1456
0 1.1496
0 1.1535
0 1.1574
0 1.1614
0 1.1653
0 1.1692
0 1.1732
0 1.1771
0 1.1810
0 1.1850
0 1.1889
0 1.1929
0 1.1968
0 1.2007
0 1.2047
0 1.2086
0 1.2125
0 1.2165
0 1.2204
0 1.2244
0 1.2283
0 1.2322
0 1.2362
0 1.2401
0 1.2440
0 1.2480
0 1.2519
0 1.2558
0 1.2598
0 1.2637
0 1.2677
0 1.2716
0 1.2755
0 1.2795
0 1.2834
0 1.2873
0 1.2913
0 1.2952
0 1.2992
0 1.3031
0 1.3070
0 1.3110
0 1.3149
0 1.3188
0 1.3228
0 1.3267
0 1.3306
0 1.3346
0 1.3385
0 1.3425
0 1.3464
0 1.3503
0 1.3543
0 1.3582
0 1.3621
0 1.3661
0 1.3700
0 1.3740
0 1.3779
0 1.3818
0 1.3858
0 1.3897
0 1.3936
0 1.3976
0 1.4015
0 1.4054
0 1.4094
0 1.4133
0 1.4173
0 1.4212
0 1.4251
0 1.4291
0 1.4330
0 1.4369
0 1.4409
0 1.4448
0 1.4488
0 1.4527
0 1.4566
0 1.4606
0 1.4645
0 1.4684
0 1.4724
0 1.4763
0 1.4802
0 1.4842
0 1.4881
0 1.4921
0 1.4960
0 1.4999
0 1.5039
0 1.5078
0 1.5117
0 1.5157
0 1.5196
0 1.5236
0 1.5275
0 1.5314
0 1.5354
0 1.5393
0 1.5432
0 1.5472
0 1.5511
0 1.5550
0 1.5590
0 1.5629
0 1.5669
0 1.5708
But i want to modify this function so that it can two lists like:
trajectory([x1, x2, x3, ... xn], [phi1, phi2, phi3, ..., phin])
and create a matrix like this:
trajectory =
x1 0
x1+k 0
. 0
. 0
x1_n 0
0 phi1
0 phi1+k
0 .
0 .
0 phi1_n
x2 0
x2+k 0
. 0
. 0
x2_n 0
0 phi2
0 phi2+k
0 .
0 .
0 phi2_n
and so on. So I was wandering if there was a more automatic way expanding the matrix, so that two lists can be provided as an input argument and the matrix expanding according to the elements of the list.
function p = matr(x, phi)
p = zeros(800*length(x), 2);
for ii = 1:length(x)
x_dir = linspace(0, x(ii), 400);
r = linspace(0, phi(ii), 400);
p((800*(ii-1)+1):(800*(ii-1)+400), 1) = x_dir;
p((800*ii-399):(800*ii), 2) = r;
end
end
OR
function p2 = matr_compound(x, phi)
p2 = [];
for ii = 1:length(x)
p2 = [p2; matr(x(ii), phi(ii))];
end
end
I want to visualize my Markov chain using a digraph. I am using the following lines of code:
mc = dtmc(TPM,'StateNames',namesStates);
graphplot(mc,'ColorNodes',true,'ColorEdges',true);
where namesStates is a cell array that contains the names (string) of each node of my MC.
Since the probabilities are so close to each other, I want to visualize the probabilities of each edge of the digraph or the transition rates. Is it possible?
EDIT:
Here is a TPM that I am using:
0,941033925686591 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0,000220296666177119 0,926053752386547 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0,000367161110295198 0,000440593332354237 0,903730356880599 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7,34322220590395e-05 0 0 0,940960493464532 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 7,34322220590395e-05 0 0,000220296666177119 0,925980320164488 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 7,34322220590395e-05 0,000367161110295198 0,000440593332354237 0,903656924658540 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 7,34322220590395e-05 0 0 0,962990160082244 7,34322220590395e-05 0,000146864444118079 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 7,34322220590395e-05 0 0,000220296666177119 0,962696431194008 0,000293728888236158 0 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 7,34322220590395e-05 0,000367161110295198 0,000440593332354237 0,962402702305772 0 0 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0
0,00367161110295198 0 0 0 0 0 0 0 0 0,937362314583639 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0
0 0,00367161110295198 0 0 0 0 0 0 0 0,000220296666177119 0,922382141283595 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0
0 0 0,00367161110295198 0 0 0 0 0 0 0,000367161110295198 0,000440593332354237 0,900058745777647 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0
0 0 0 0,00367161110295198 0 0 0 0 0 3,85519165809957e-05 0 0 0,937323762667058 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0
0 0 0 0 0,00367161110295198 0 0 0 0 0 5,07906202575023e-05 0 0,000220296666177119 0,922331350663338 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0
0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,87457776472316e-05 0,000367161110295198 0,000440593332354237 0,900000000000000 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0
0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 3,85519165809957e-05 0 0 0,959353429284770 7,34322220590395e-05 0,000146864444118079 0 0 0 0 0 0 0,0367161110295198 0 0
0 0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,07906202575023e-05 0 0,000220296666177119 0,959047461692858 0,000293728888236158 0 0 0 0 0 0 0 0,0367161110295198 0
0 0 0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,87457776472316e-05 0,000367161110295198 0,000440593332354237 0,958745777647232 0 0 0 0 0 0 0 0 0,0367161110295198
0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0 0 0,970406814510207 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0 0,000220296666177119 0,955426641210163 0,000293728888236158 0 0,0367161110295198 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0,000367161110295198 0,000440593332354237 0,933103245704215 0 0 0,0587457776472316 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 4,40593332354237e-05 0 0 0,970362755176972 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 5,50741665442796e-05 0 0,000220296666177119 0,955371567043619 0,000293728888236158 0 0,0367161110295198 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 6,16830665295932e-05 0,000367161110295198 0,000440593332354237 0,933041562637686 0 0 0,0587457776472316
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 4,40593332354237e-05 0 0 0,992392421794684 7,34322220590395e-05 0,000146864444118079
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 5,50741665442796e-05 0 0,000220296666177119 0,992087678073139 0,000293728888236158
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 6,16830665295932e-05 0,000367161110295198 0,000440593332354237 0,991787340284917
instead of:
mc = dtmc(TPM,'StateNames',namesStates);
We can do:
mc = dtmc(TPM);
In the documentation you can find the 'LabelEdges' parameter, when set to true the probability is also displayed.
graphplot(mc,'ColorNodes',true,'ColorEdges',true,'LabelEdges',true);
I have 37 linear equations with 36 variables in the form of matrix: A x = b. (A has 37 rows and 36 columns.) The equations don't have an exact solution so I have used Matlab to find the closest answer using x = A \ b.
The problem is that I also have a condition, all elements of x should be positive: xi > 0 for all i. x = A \ b gives negative values for some elements. How can I apply this constraint ?
Here are the concrete values of A and b that I'm working with:
A = [0.83 0.17 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.02 0.63 0.17 0 0 0 0.18 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.02 -0.37 0.17 0 0 0 0.18 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.02 -0.37 0.17 0 0 0 0.18 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.02 -0.37 0.17 0 0 0 0.18 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.02 -0.2 0 0 0 0 0.18 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.15 0 0 0 0 0 -0.32 0.17 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.33 0 0 0 0 0.18 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.15 0 0 0 0 0 -0.32 0.17 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.35 0 0 0 0 0.18 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.15 0 0 0 0 0 -0.32 0.17 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.35 0 0 0 0 0.18 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.15 0 0 0 0 0 -0.32 0.17 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.52 0.17 0 0 0 0.18 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.15 0 0 0 0 0.02 -0.35 0 0 0 0 0.018 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.15 0 0 0 0 0 -0.32 0.17 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.15 0 0 0 0 0.02 -0.34 0.17 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.15 0 0 0 0 0.02 -0.34 0.17 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.15 0 0 0 0 0.02 -0.34 0.17 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.15 0 0 0 0 0.02 -0.34 0.17
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.15 0 0 0 0 0.02 -0.17
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];
b = [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 1]';
You want to find an approximate solution x to A x = b in the least-squares sense, i.e. you want to minimize
||A x - b||2 = xT AT A x
+ bT b - 2 xT AT b.
Disregarding the constant term bTb and dividing by a factor 2, this fits the form of a quadratic programming problem, which is to minimize
1/2 xT H x + fT x,
if we choose H = AT A and f = - AT b.
The corresponding use of quadprog is:
H = A' * A;
f = - A' * b;
x = quadprog(H, f)
You also want the elements of x to be positive. A non-negativity constraint can be introduced using the additional parameters to quadprog, A and b (not to be confused with your matrices!):
n = size(A, 2);
x = quadprog(H, f, -eye(n), zeros(n, 1))
A positivity constraint does not make sense, because if the optimal solution involves one or more elements of x to be exactly 0, then a strictly positive solution will be the better the smaller the corresponding elements are: 0.01 will be better than 0.1, 0.001 will be better than 0.01, etc. etc. – there is no natural bound. If you want to make sure that the solution is all-positive, you have to set a finite bound yourself:
x = quadprog(H, f, -eye(n), zeros(n, 1) + 0.001)
Now the smallest possible value of an element of x is 0.001.
Update after the question was supplemented with the actual data of A and b: Using the code
H = A' * A;
f = - A' * b;
n = size(A, 2);
x = quadprog(H, f, -eye(n), zeros(n, 1))
I get the result:
Minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
x =
0.000380906335150292
3.90638261088393e-05
0.0111196970167585
0.0227055107206744
0.0318402514628274
0.0371743514880516
0.000800900221354844
0.00746652476710186
0.0180511534370576
0.0282423767946842
0.0362606972021829
0.0417582260990786
0.00860220929402253
0.0174105435824309
0.0265771677458008
0.0343071472371469
0.0395176470725881
0.0419494410289298
0.0187719294637544
0.0268976053211278
0.0336818044612046
0.0382365751296441
0.0398823076542831
0.0391016682549663
0.0279383031707377
0.0339393563379992
0.0377917413001034
0.0382731422972829
0.0338557405807941
0.0217568643500703
0.0343698083354502
0.0381554349806972
0.0392353941260779
0.0368010570888738
0.031271868401718
0.0258232230013864
This would be a linear optimization problem when you have x>0 condition. The best algorithm to solve that is simplex algorithm. The idea is that each linear equation aix=bi provide a line and the combination of these lines provide a polygon/polyhedron and the answer is one of the vertices of this polyhedron/polygon. Simplex algorithm is pretty standard and there are many available functions and libraries tha can calculate that.
The Matlab functions lsqlin or lsqnonneg can be used to solve your issue.
e.g:
x=lsqnonneg(A,b)
will give you what you are looking for.
With the code below:
t=10;
period=9;
A=zeros(36,36,t);
for j=1:t
A(7:period:end,7:period:end,j)=rand(1,1);
A(8:period:end,8:period:end,j)=rand(1,1);
A(9:period:end,9:period:end,j)=rand(1,1);
end
Edit: This is A. I've split them up into 9x9 visually so it's easier to see the pattern.
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 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 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 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 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 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 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 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 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 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 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 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 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 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 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
I'd like to make every single number which is labelled 1, a random number between 0 to 1. Is it necessary to create a vector(48,1) and then plug in the values where the 1s are?
Of course the numbers are not entirely random, the same three random numbers are being reproduced every ''period''.
Is there a simple way that can create random numbers so every single randomnly generated value is random?
Many thanks.
It was slightly trickier than I thought at first. Here's my solution though:
A = zeros(36,36,t);
idx = sub2ind([36 36 t],repmat(34:36,1,t),repmat(34:36,1,t),repmat(1:t,1,3));
A(idx) = rand(length(idx),1);
The solution with logical indexing is:
A(logical(A)) = rand(nnz(A),1);
But you have to prepare A as the binary matrix given in the question.
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 11 years ago.
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 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 1 0 1 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 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 1 0 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 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 1 0 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 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 1 1 0 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 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 1 1 1 1 0 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 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 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 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 1 1 1 0 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 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 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
% read in data
fid = fopen('filepath');
data = textscan(fid,'%f%f%f%f','HeaderLines',2,'CollectOutput',1);
data = data{:};
fid = fclose(fid);
% retrieve column 1
data(:,1)
% Number of rows
size(data,1)
http://www.mathworks.com/matlabcentral/answers/3294-read-text-file-into-a-matrix
You may have to adapt the code a bit for your particular data file.
Just put brackets around the whole thing, and set it equal to a variable:
myData = [0 0 1 0 ... ];