{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":926,"title":"Unique: Speed Enhancement for uint(8,16,32)","description":"This Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\r\n\r\n*Input:* A (column vector of uint8/uint16/uint32)\r\n\r\n*Output:* B (column vector A processed by unique \"like\" function)\r\n\r\n*Scoring:* Cumulative time, in msec, of \"unique\" processing of three medium size arrays.\r\n\r\n\r\nExamples:\r\n[5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\r\n\r\n\r\nHint: Help Unique, Legacy, Options\r\n\r\n","description_html":"\u003cp\u003eThis Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A (column vector of uint8/uint16/uint32)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e B (column vector A processed by unique \"like\" function)\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Cumulative time, in msec, of \"unique\" processing of three medium size arrays.\u003c/p\u003e\u003cp\u003eExamples:\r\n[5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\u003c/p\u003e\u003cp\u003eHint: Help Unique, Legacy, Options\u003c/p\u003e","function_template":"function y = unique_fast(x)\r\n  y = unique(x);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nx8=randi(255,1000000,5,'uint8');\r\n\r\nx16=randi(2^16,1000000,4,'uint16');\r\n\r\nx32=randi(2^32,3000000,1,'uint32');\r\n\r\nfor i=1:5 % Warmup Calls to get valid timing\r\n x8w=unique_fast(x8);\r\nend\r\n\r\nta=clock;\r\n%tic\r\n x8u=unique_fast(x8);\r\n%toc\r\n%tic\r\n x16u=unique_fast(x16);\r\n%toc\r\n%tic\r\n x32u=unique_fast(x32);\r\n%toc\r\nt1=etime(clock,ta)*1000;\r\n\r\nassert(isequal(x8u,unique(x8)))\r\nassert(isequal(x16u,unique(x16)))\r\nassert(isequal(x32u,unique(x32)))\r\n\r\nt2=min(2000,t1); % unique scores 2000 msec\r\nfeval(@assignin,'caller','score',floor(t2));\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":25,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-30T03:48:18.000Z","updated_at":"2025-05-12T10:22:39.000Z","published_at":"2012-08-30T04:20:02.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A (column vector of uint8/uint16/uint32)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e B (column vector A processed by unique \\\"like\\\" function)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Cumulative time, in msec, of \\\"unique\\\" processing of three medium size arrays.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples: [5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHint: Help Unique, Legacy, Options\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42891,"title":"Differential equation and events","description":"You have to solve the non-linear time variant differential equation:\r\n\r\n  (cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0\r\n\r\nwith initial condition as input of the function\r\n\r\n  [y(0);y'(0)]=[a,b]\r\n\r\nand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\r\n\r\n  te=zero_crossing(a,b)\r\n\r\n\r\ntip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here :\r\nhttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\r\n\r\nAdditional info:\r\n\r\n* in the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\r\n* because you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.","description_html":"\u003cp\u003eYou have to solve the non-linear time variant differential equation:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e(cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0\r\n\u003c/pre\u003e\u003cp\u003ewith initial condition as input of the function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[y(0);y'(0)]=[a,b]\r\n\u003c/pre\u003e\u003cp\u003eand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ete=zero_crossing(a,b)\r\n\u003c/pre\u003e\u003cp\u003etip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here : \u003ca href = \"http://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\"\u003ehttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAdditional info:\u003c/p\u003e\u003cul\u003e\u003cli\u003ein the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\u003c/li\u003e\u003cli\u003ebecause you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.\u003c/li\u003e\u003c/ul\u003e","function_template":"function te=zero_crossing(a,b)\r\nte=[];\r\nend","test_suite":"%%\r\na = 1; b = 1;\r\nte = 16.3214;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = 10; b = 10;\r\nte = 16.3070;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = 0.1; b = 100;\r\nte = 16.3298;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = -1;b = -0.5;\r\nte = 4.1668;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = -0.01;b = -15;\r\nte = 4.8781;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":2,"created_by":61291,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2016-06-14T02:45:21.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2016-06-14T02:05:14.000Z","updated_at":"2025-12-19T12:18:25.000Z","published_at":"2016-06-14T02:45:21.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou have to solve the non-linear time variant differential equation:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[(cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewith initial condition as input of the function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[y(0);y'(0)]=[a,b]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[te=zero_crossing(a,b)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003etip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here :\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAdditional info:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ein the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebecause you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":926,"title":"Unique: Speed Enhancement for uint(8,16,32)","description":"This Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\r\n\r\n*Input:* A (column vector of uint8/uint16/uint32)\r\n\r\n*Output:* B (column vector A processed by unique \"like\" function)\r\n\r\n*Scoring:* Cumulative time, in msec, of \"unique\" processing of three medium size arrays.\r\n\r\n\r\nExamples:\r\n[5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\r\n\r\n\r\nHint: Help Unique, Legacy, Options\r\n\r\n","description_html":"\u003cp\u003eThis Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A (column vector of uint8/uint16/uint32)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e B (column vector A processed by unique \"like\" function)\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Cumulative time, in msec, of \"unique\" processing of three medium size arrays.\u003c/p\u003e\u003cp\u003eExamples:\r\n[5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\u003c/p\u003e\u003cp\u003eHint: Help Unique, Legacy, Options\u003c/p\u003e","function_template":"function y = unique_fast(x)\r\n  y = unique(x);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nx8=randi(255,1000000,5,'uint8');\r\n\r\nx16=randi(2^16,1000000,4,'uint16');\r\n\r\nx32=randi(2^32,3000000,1,'uint32');\r\n\r\nfor i=1:5 % Warmup Calls to get valid timing\r\n x8w=unique_fast(x8);\r\nend\r\n\r\nta=clock;\r\n%tic\r\n x8u=unique_fast(x8);\r\n%toc\r\n%tic\r\n x16u=unique_fast(x16);\r\n%toc\r\n%tic\r\n x32u=unique_fast(x32);\r\n%toc\r\nt1=etime(clock,ta)*1000;\r\n\r\nassert(isequal(x8u,unique(x8)))\r\nassert(isequal(x16u,unique(x16)))\r\nassert(isequal(x32u,unique(x32)))\r\n\r\nt2=min(2000,t1); % unique scores 2000 msec\r\nfeval(@assignin,'caller','score',floor(t2));\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":25,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-30T03:48:18.000Z","updated_at":"2025-05-12T10:22:39.000Z","published_at":"2012-08-30T04:20:02.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Speed Performance Challenge is to optimize Unique for processing uint8/uint16/uint32 variables.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A (column vector of uint8/uint16/uint32)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e B (column vector A processed by unique \\\"like\\\" function)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Cumulative time, in msec, of \\\"unique\\\" processing of three medium size arrays.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples: [5;4;3;2;2;1] returns [1;2;3;4;5], and Fast\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHint: Help Unique, Legacy, Options\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42891,"title":"Differential equation and events","description":"You have to solve the non-linear time variant differential equation:\r\n\r\n  (cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0\r\n\r\nwith initial condition as input of the function\r\n\r\n  [y(0);y'(0)]=[a,b]\r\n\r\nand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\r\n\r\n  te=zero_crossing(a,b)\r\n\r\n\r\ntip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here :\r\nhttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\r\n\r\nAdditional info:\r\n\r\n* in the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\r\n* because you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.","description_html":"\u003cp\u003eYou have to solve the non-linear time variant differential equation:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e(cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0\r\n\u003c/pre\u003e\u003cp\u003ewith initial condition as input of the function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[y(0);y'(0)]=[a,b]\r\n\u003c/pre\u003e\u003cp\u003eand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ete=zero_crossing(a,b)\r\n\u003c/pre\u003e\u003cp\u003etip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here : \u003ca href = \"http://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\"\u003ehttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAdditional info:\u003c/p\u003e\u003cul\u003e\u003cli\u003ein the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\u003c/li\u003e\u003cli\u003ebecause you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.\u003c/li\u003e\u003c/ul\u003e","function_template":"function te=zero_crossing(a,b)\r\nte=[];\r\nend","test_suite":"%%\r\na = 1; b = 1;\r\nte = 16.3214;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = 10; b = 10;\r\nte = 16.3070;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = 0.1; b = 100;\r\nte = 16.3298;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = -1;b = -0.5;\r\nte = 4.1668;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n\r\n%%\r\na = -0.01;b = -15;\r\nte = 4.8781;\r\nassert(abs(zero_crossing(a,b)-te)\u003c0.01)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":2,"created_by":61291,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2016-06-14T02:45:21.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2016-06-14T02:05:14.000Z","updated_at":"2025-12-19T12:18:25.000Z","published_at":"2016-06-14T02:45:21.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou have to solve the non-linear time variant differential equation:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[(cos(y)+2)*y''+atan(y)*sin(0.01*t)^2+y*sin(0.5*t)=0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewith initial condition as input of the function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[y(0);y'(0)]=[a,b]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand return the time 'te' when 'y' crosses zero from the negatives values to the positive values.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[te=zero_crossing(a,b)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003etip: use the 'Events' option in odeset to detect the crossing, stop integration and get the time 'te'. See how to use it here :\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/help/matlab/math/ode-event-location.html?searchHighlight=ballode\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAdditional info:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ein the test case, the solver ode45 is used, with options 'RelTol'=1e-8 and 'AbsTol'=1e-10.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebecause you don't know in advance the final time of the crossing, you can solve again further in time if no crossing is detected, starting from the point of the final time of previous integration.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"options\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"options\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"options\"","","\"","options","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2b536dc10\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2b536db70\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2b536d2b0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2b536de90\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2b536ddf0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2b536dd50\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2b536dcb0\u003e":"tag:\"options\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2b536dcb0\u003e":"tag:\"options\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"options\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"options\"","","\"","options","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2b536dc10\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2b536db70\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2b536d2b0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2b536de90\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2b536ddf0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2b536dd50\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2b536dcb0\u003e":"tag:\"options\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2b536dcb0\u003e":"tag:\"options\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":926,"difficulty_rating":"easy"},{"id":42891,"difficulty_rating":"medium"}]}}