{"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":44261,"title":"Multivariate polynomials - sort monomials","description":"In \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array Problem 44260\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation).  It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of |5*x| is 1 and the total degree of |x^3*y^5*z| is 9.\r\n\r\nWrite a function \r\n\r\n  function [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\n\r\nto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\r\n\r\nExample: Consider the polynomial |p(x,y,z) = 3*x - 2 + y^2 +4*z^2|, which is represented as:\r\n\r\n  exponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]\r\n\r\nThe sorted version is\r\n\r\n  exponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].\r\n\r\nYou can assume that a given combination of exponents is never repeated.","description_html":"\u003cp\u003eIn \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array\"\u003eProblem 44260\u003c/a\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation).  It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of \u003ctt\u003e5*x\u003c/tt\u003e is 1 and the total degree of \u003ctt\u003ex^3*y^5*z\u003c/tt\u003e is 9.\u003c/p\u003e\u003cp\u003eWrite a function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003efunction [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\n\u003c/pre\u003e\u003cp\u003eto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\u003c/p\u003e\u003cp\u003eExample: Consider the polynomial \u003ctt\u003ep(x,y,z) = 3*x - 2 + y^2 +4*z^2\u003c/tt\u003e, which is represented as:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]\r\n\u003c/pre\u003e\u003cp\u003eThe sorted version is\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].\r\n\u003c/pre\u003e\u003cp\u003eYou can assume that a given combination of exponents is never repeated.\u003c/p\u003e","function_template":"function [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\ncoeffs = 0;\r\nexponents = 0;\r\nend","test_suite":"%% Test sortMonomials\r\nfiletext = fileread('sortMonomials.m');\r\nassert(~contains(filetext,'regexp'))\r\n\r\n%%\r\nunsortedCoeffs = [-10 7 -10 -7 6 6 3 1 -7 2]';\r\nunsortedExponents = [5 4 2; 2 5 3; 2 1 5; 1 5 4; 1 4 3; 1 3 3; 1 2 1; 0 4 1; 0 2 1; 0 0 5];\r\n[sortedCoeffs,sortedExponents] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\nsortOrder = [1 2 4 3 5 6 8 10 7 9];\r\nassert(isequal(sortedCoeffs,unsortedCoeffs(sortOrder)))\r\nassert(isequal(sortedExponents,unsortedExponents(sortOrder,:)))\r\n\r\n%%\r\nx = randi(1000); y = randi(1000);\r\n[coeffs,exponents] = sortMonomials(x,y);\r\nassert(isequal([x y],[coeffs exponents]))\r\n\r\n%%\r\nunsortedCoeffs = randi(1000,[4 1]);\r\nough = ['hguot '; 'hguoc '; 'hguolp'; 'hguod '];\r\nunsortedExponents = ough - repmat(randi(100),size(ough));\r\nunsortedExponents = [unsortedExponents -sum(unsortedExponents,2)];\r\n[sortedCoeffs,~] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\n[~,ia] = sort(ough(:,5));\r\nassert(isequal(sortedCoeffs,flipud(unsortedCoeffs(ia))))\r\n\r\n%%\r\nz = [1 3 5+randi(10)];\r\nv1 = perms(z); \r\nv2 = perms(z+[1 0 0]);\r\nv = [v2; v1];\r\nunsortedCoeffs = randi(1000,[size(v,1) 1]);\r\nunsortedExponents = v(randperm(size(v,1)),:);\r\n[sortedCoeffs,sortedExponents] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\nassert(isequal(sortedExponents,v))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":1011,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-07-13T18:24:47.000Z","updated_at":"2017-07-15T05:42:59.000Z","published_at":"2017-07-13T18:25:15.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\u003eIn\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=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44260\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation). It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e5*x\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is 1 and the total degree of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex^3*y^5*z\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is 9.\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\u003eWrite a 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[function [coeffs,exponents] = sortMonomials(coeffs,exponents)]]\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\u003eto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\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\u003eExample: Consider the polynomial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y,z) = 3*x - 2 + y^2 +4*z^2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, which is represented as:\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[exponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]]]\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\u003eThe sorted version is\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[exponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].]]\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\u003eYou can assume that a given combination of exponents is never repeated.\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":44260,"title":"Multivariate polynomials - convert monomial form to array","description":"In \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials Problem 44259\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\r\n\r\n# Defining a polynomial is an indexing headache, with a high probability of errors.  \r\n# Polynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\r\n\r\nHere, we will represent a polynomial as a sum of monomials. For example, the polynomial |p(x,y) = 2*x^5*y + 3*x*y^5| is the sum of two monomials in |x| and |y|. We will represent this by |exponents|, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector |coefficients| for the coefficient of each monomial. For |p(x,y)|, these are\r\n\r\n  exponents = [5 1; 1 5];\r\ncoefficients = [2; 3];\r\n\r\nLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a function\r\n\r\n  function c = coeffArray(exponents,coefficients)\r\n\r\nthat inputs the exponents and coefficients and returns an array as defined in Problem 44259.","description_html":"\u003cp\u003eIn \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials\"\u003eProblem 44259\u003c/a\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\u003c/p\u003e\u003col\u003e\u003cli\u003eDefining a polynomial is an indexing headache, with a high probability of errors.\u003c/li\u003e\u003cli\u003ePolynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eHere, we will represent a polynomial as a sum of monomials. For example, the polynomial \u003ctt\u003ep(x,y) = 2*x^5*y + 3*x*y^5\u003c/tt\u003e is the sum of two monomials in \u003ctt\u003ex\u003c/tt\u003e and \u003ctt\u003ey\u003c/tt\u003e. We will represent this by \u003ctt\u003eexponents\u003c/tt\u003e, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector \u003ctt\u003ecoefficients\u003c/tt\u003e for the coefficient of each monomial. For \u003ctt\u003ep(x,y)\u003c/tt\u003e, these are\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [5 1; 1 5];\r\ncoefficients = [2; 3];\r\n\u003c/pre\u003e\u003cp\u003eLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003efunction c = coeffArray(exponents,coefficients)\r\n\u003c/pre\u003e\u003cp\u003ethat inputs the exponents and coefficients and returns an array as defined in Problem 44259.\u003c/p\u003e","function_template":"function c = coeffArray(exponents,coefficients)\r\nc = 0;\r\nend","test_suite":"%% test coeffArray\r\nfiletext = fileread('coeffArray.m');\r\nassert(~contains(filetext,'regexp'))\r\n\r\n%% No variables\r\nexponents = 0;\r\ncoefficients = randi(1000);\r\ncA = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% Single variable\r\ncoefficients = randi(1000,[10 1]);\r\nexponents = (9:-1:0)';\r\ncA = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% a*x^2+b*y\r\na = randi(1000);\r\nb = randi(1000);\r\nexponents = [2 0; 0 1];\r\ncoefficients = [a; b];\r\ncA = [0 a; 0 0; b 0];\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% a*x^2+b*y^2+c*z^2+d\r\na = randi(1000);\r\nb = randi(1000);\r\nc = randi(1000);\r\nd = randi(1000);\r\nexponents = [2 0 0; 0 2 0; 0 0 2; 0 0 0];\r\ncoefficients = [a; b; c; d];\r\ncA = zeros([3 3 3]);\r\ncA(1,3,3) = a;\r\ncA(3,1,3) = b;\r\ncA(3,3,1) = c;\r\ncA(3,3,3) = d;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% Many variables\r\ncoefficients = randi(1000);\r\nnVars = randi(20)+1;\r\nexponents = ones(1,nVars);\r\ncA = zeros(2*ones(1,nVars));\r\ncA(1) = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":8,"created_by":1011,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":12,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-07-13T16:16:41.000Z","updated_at":"2025-12-22T13:09:01.000Z","published_at":"2017-07-13T16:26:38.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\u003eIn\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=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44259\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\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=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDefining a polynomial is an indexing headache, with a high probability of errors.\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=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePolynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\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\u003eHere, we will represent a polynomial as a sum of monomials. For example, the polynomial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y) = 2*x^5*y + 3*x*y^5\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the sum of two monomials in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ey\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. We will represent this by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eexponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ecoefficients\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for the coefficient of each monomial. For\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, these are\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[exponents = [5 1; 1 5];\\ncoefficients = [2; 3];]]\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\u003eLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a 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[function c = coeffArray(exponents,coefficients)]]\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\u003ethat inputs the exponents and coefficients and returns an array as defined in Problem 44259.\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":44261,"title":"Multivariate polynomials - sort monomials","description":"In \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array Problem 44260\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation).  It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of |5*x| is 1 and the total degree of |x^3*y^5*z| is 9.\r\n\r\nWrite a function \r\n\r\n  function [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\n\r\nto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\r\n\r\nExample: Consider the polynomial |p(x,y,z) = 3*x - 2 + y^2 +4*z^2|, which is represented as:\r\n\r\n  exponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]\r\n\r\nThe sorted version is\r\n\r\n  exponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].\r\n\r\nYou can assume that a given combination of exponents is never repeated.","description_html":"\u003cp\u003eIn \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array\"\u003eProblem 44260\u003c/a\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation).  It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of \u003ctt\u003e5*x\u003c/tt\u003e is 1 and the total degree of \u003ctt\u003ex^3*y^5*z\u003c/tt\u003e is 9.\u003c/p\u003e\u003cp\u003eWrite a function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003efunction [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\n\u003c/pre\u003e\u003cp\u003eto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\u003c/p\u003e\u003cp\u003eExample: Consider the polynomial \u003ctt\u003ep(x,y,z) = 3*x - 2 + y^2 +4*z^2\u003c/tt\u003e, which is represented as:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]\r\n\u003c/pre\u003e\u003cp\u003eThe sorted version is\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].\r\n\u003c/pre\u003e\u003cp\u003eYou can assume that a given combination of exponents is never repeated.\u003c/p\u003e","function_template":"function [coeffs,exponents] = sortMonomials(coeffs,exponents)\r\ncoeffs = 0;\r\nexponents = 0;\r\nend","test_suite":"%% Test sortMonomials\r\nfiletext = fileread('sortMonomials.m');\r\nassert(~contains(filetext,'regexp'))\r\n\r\n%%\r\nunsortedCoeffs = [-10 7 -10 -7 6 6 3 1 -7 2]';\r\nunsortedExponents = [5 4 2; 2 5 3; 2 1 5; 1 5 4; 1 4 3; 1 3 3; 1 2 1; 0 4 1; 0 2 1; 0 0 5];\r\n[sortedCoeffs,sortedExponents] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\nsortOrder = [1 2 4 3 5 6 8 10 7 9];\r\nassert(isequal(sortedCoeffs,unsortedCoeffs(sortOrder)))\r\nassert(isequal(sortedExponents,unsortedExponents(sortOrder,:)))\r\n\r\n%%\r\nx = randi(1000); y = randi(1000);\r\n[coeffs,exponents] = sortMonomials(x,y);\r\nassert(isequal([x y],[coeffs exponents]))\r\n\r\n%%\r\nunsortedCoeffs = randi(1000,[4 1]);\r\nough = ['hguot '; 'hguoc '; 'hguolp'; 'hguod '];\r\nunsortedExponents = ough - repmat(randi(100),size(ough));\r\nunsortedExponents = [unsortedExponents -sum(unsortedExponents,2)];\r\n[sortedCoeffs,~] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\n[~,ia] = sort(ough(:,5));\r\nassert(isequal(sortedCoeffs,flipud(unsortedCoeffs(ia))))\r\n\r\n%%\r\nz = [1 3 5+randi(10)];\r\nv1 = perms(z); \r\nv2 = perms(z+[1 0 0]);\r\nv = [v2; v1];\r\nunsortedCoeffs = randi(1000,[size(v,1) 1]);\r\nunsortedExponents = v(randperm(size(v,1)),:);\r\n[sortedCoeffs,sortedExponents] = sortMonomials(unsortedCoeffs,unsortedExponents);\r\nassert(isequal(sortedExponents,v))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":1011,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-07-13T18:24:47.000Z","updated_at":"2017-07-15T05:42:59.000Z","published_at":"2017-07-13T18:25:15.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\u003eIn\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=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44260-multidimensional-polynomials-convert-monomial-form-to-array\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44260\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, multivariate polynomials were defined as a sum of monomial terms using|exponents|, a matrix of integers, and|coefficients|, a vector (follow the above link for an explanation). It can be useful to order the monomials. But first we need to define the total degree of a monomial as the sum of the exponents. For example, the total degree of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e5*x\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is 1 and the total degree of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex^3*y^5*z\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is 9.\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\u003eWrite a 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[function [coeffs,exponents] = sortMonomials(coeffs,exponents)]]\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\u003eto sort the monomials. Sort them first by descending total degree, and then for a given total degree, by lexicographical order of the exponents (by the first exponent, then the second, and so on, each in descending order). The coefficients should be sorted so they stay with the correct monomial.\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\u003eExample: Consider the polynomial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y,z) = 3*x - 2 + y^2 +4*z^2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, which is represented as:\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[exponents = [1 0 0; 0 0 0; 0 2 0; 0 0 2], coefficients = [3; -2; 1; 4]]]\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\u003eThe sorted version is\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[exponents = [0 2 0; 0 0 2; 1 0 0; 0 0 0], coefficients = [1; 3; 1; 4].]]\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\u003eYou can assume that a given combination of exponents is never repeated.\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":44260,"title":"Multivariate polynomials - convert monomial form to array","description":"In \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials Problem 44259\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\r\n\r\n# Defining a polynomial is an indexing headache, with a high probability of errors.  \r\n# Polynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\r\n\r\nHere, we will represent a polynomial as a sum of monomials. For example, the polynomial |p(x,y) = 2*x^5*y + 3*x*y^5| is the sum of two monomials in |x| and |y|. We will represent this by |exponents|, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector |coefficients| for the coefficient of each monomial. For |p(x,y)|, these are\r\n\r\n  exponents = [5 1; 1 5];\r\ncoefficients = [2; 3];\r\n\r\nLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a function\r\n\r\n  function c = coeffArray(exponents,coefficients)\r\n\r\nthat inputs the exponents and coefficients and returns an array as defined in Problem 44259.","description_html":"\u003cp\u003eIn \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials\"\u003eProblem 44259\u003c/a\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\u003c/p\u003e\u003col\u003e\u003cli\u003eDefining a polynomial is an indexing headache, with a high probability of errors.\u003c/li\u003e\u003cli\u003ePolynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eHere, we will represent a polynomial as a sum of monomials. For example, the polynomial \u003ctt\u003ep(x,y) = 2*x^5*y + 3*x*y^5\u003c/tt\u003e is the sum of two monomials in \u003ctt\u003ex\u003c/tt\u003e and \u003ctt\u003ey\u003c/tt\u003e. We will represent this by \u003ctt\u003eexponents\u003c/tt\u003e, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector \u003ctt\u003ecoefficients\u003c/tt\u003e for the coefficient of each monomial. For \u003ctt\u003ep(x,y)\u003c/tt\u003e, these are\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eexponents = [5 1; 1 5];\r\ncoefficients = [2; 3];\r\n\u003c/pre\u003e\u003cp\u003eLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a function\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003efunction c = coeffArray(exponents,coefficients)\r\n\u003c/pre\u003e\u003cp\u003ethat inputs the exponents and coefficients and returns an array as defined in Problem 44259.\u003c/p\u003e","function_template":"function c = coeffArray(exponents,coefficients)\r\nc = 0;\r\nend","test_suite":"%% test coeffArray\r\nfiletext = fileread('coeffArray.m');\r\nassert(~contains(filetext,'regexp'))\r\n\r\n%% No variables\r\nexponents = 0;\r\ncoefficients = randi(1000);\r\ncA = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% Single variable\r\ncoefficients = randi(1000,[10 1]);\r\nexponents = (9:-1:0)';\r\ncA = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% a*x^2+b*y\r\na = randi(1000);\r\nb = randi(1000);\r\nexponents = [2 0; 0 1];\r\ncoefficients = [a; b];\r\ncA = [0 a; 0 0; b 0];\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% a*x^2+b*y^2+c*z^2+d\r\na = randi(1000);\r\nb = randi(1000);\r\nc = randi(1000);\r\nd = randi(1000);\r\nexponents = [2 0 0; 0 2 0; 0 0 2; 0 0 0];\r\ncoefficients = [a; b; c; d];\r\ncA = zeros([3 3 3]);\r\ncA(1,3,3) = a;\r\ncA(3,1,3) = b;\r\ncA(3,3,1) = c;\r\ncA(3,3,3) = d;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n\r\n%% Many variables\r\ncoefficients = randi(1000);\r\nnVars = randi(20)+1;\r\nexponents = ones(1,nVars);\r\ncA = zeros(2*ones(1,nVars));\r\ncA(1) = coefficients;\r\nassert(isequal(coeffArray(exponents,coefficients),cA))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":8,"created_by":1011,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":12,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-07-13T16:16:41.000Z","updated_at":"2025-12-22T13:09:01.000Z","published_at":"2017-07-13T16:26:38.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\u003eIn\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=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44259-product-of-two-multidimensional-polynomials\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44259\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e I asked you to multiply two multidimensional polynomials that were represented by an array that is a generalization of the way MATLAB handles one-variable polynomials. However, that representation has at least two problems:\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=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDefining a polynomial is an indexing headache, with a high probability of errors.\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=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePolynomials often have a small number of terms, so if they are higher order there will be a lot of wasted storage.\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\u003eHere, we will represent a polynomial as a sum of monomials. For example, the polynomial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y) = 2*x^5*y + 3*x*y^5\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the sum of two monomials in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ey\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. We will represent this by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eexponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, a matrix of integers with each row representing the exponents of one monomial (including zeros); and a column vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ecoefficients\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for the coefficient of each monomial. For\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(x,y)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, these are\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[exponents = [5 1; 1 5];\\ncoefficients = [2; 3];]]\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\u003eLet's hedge our bets, though, and create a function that converts this form to the array form. Your task is to create a 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[function c = coeffArray(exponents,coefficients)]]\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\u003ethat inputs the exponents and coefficients and returns an array as defined in Problem 44259.\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:\"monomial\"","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:\"monomial\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"monomial\"","","\"","monomial","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f534ae92808\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f534ae92768\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f534ae91c28\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f534ae92b28\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f534ae92a88\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f534ae929e8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f534ae92948\u003e":"tag:\"monomial\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f534ae92948\u003e":"tag:\"monomial\""},"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:\"monomial\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"monomial\"","","\"","monomial","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f534ae92808\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f534ae92768\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f534ae91c28\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f534ae92b28\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f534ae92a88\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f534ae929e8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f534ae92948\u003e":"tag:\"monomial\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f534ae92948\u003e":"tag:\"monomial\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":44261,"difficulty_rating":"easy-medium"},{"id":44260,"difficulty_rating":"medium"}]}}