{"id":4329,"date":"2026-06-25T10:30:16","date_gmt":"2026-06-25T14:30:16","guid":{"rendered":"https:\/\/blogs.mathworks.com\/matlab\/?p=4329"},"modified":"2026-06-25T10:30:16","modified_gmt":"2026-06-25T14:30:16","slug":"from-whiteboard-sketch-to-pareto-front-using-symbolic-math-skills-in-the-agentic-ai-playground","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/matlab\/2026\/06\/25\/from-whiteboard-sketch-to-pareto-front-using-symbolic-math-skills-in-the-agentic-ai-playground\/","title":{"rendered":"From Whiteboard Sketch to Pareto Front: Using Symbolic Math Skills in the Agentic AI Playground"},"content":{"rendered":"<div class = rtcContent><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\" style=' font-weight: bold;'>Bio<\/span><span class=\"_richTextNode\">: Today's guest blogger is <\/span><a href = \"https:\/\/www.linkedin.com\/in\/jerickson00\/\"><span class=\"_richTextNode\">Jack Erickson<\/span><\/a><span class=\"_richTextNode\">. Jack is a product manager for Symbolic Math Toolbox and <\/span><a href = \"https:\/\/uk.mathworks.com\/matlabcentral\/fileexchange\/125425-matlab-support-package-for-quantum-computing\"><span class=\"_richTextNode\">Quantum Computing at MathWorks<\/span><\/a><span class=\"_richTextNode\">. He was previously in AI software developer marketing at Intel.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">Engineers communicate in diagrams; from sketches on whiteboards and circuits in textbooks to control loops in notebooks and beyond. What if you could turn a diagram into closed-form analysis and exploration in MATLAB, starting your new projects from first principles?<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The recently-launched <\/span><a href = \"https:\/\/blogs.mathworks.com\/matlab\/2026\/04\/13\/introducing-the-matlab-agentic-toolkit\/\"><span class=\"_richTextNode\">MATLAB Agentic Toolkit<\/span><\/a><span class=\"_richTextNode\"> pairs the power of MATLAB with your AI agents and coding assistants. Many of the foundation models powering these tools also have multi-modal vision-language capabilities, encoding visual concepts as tokens that can be processed together with language tokens to understand an image. Since many engineers and scientists start projects by manually coding equations from a diagram, sketch, research paper, or textbook, we have used GenAI to make it easier to use these as a starting point to leverage the capabilities of <\/span><a href = \"https:\/\/www.mathworks.com\/products\/symbolic.html\"><span class=\"_richTextNode\">Symbolic Math Toolbox<\/span><\/a><span class=\"_richTextNode\">.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">We have published Symbolic Math Toolbox skill\u202fv1.0 in the <\/span><a href = \"https:\/\/github.com\/matlab\/agent-skills-playground\"><span class=\"_richTextNode\">Agent Skills Playground<\/span><\/a><span class=\"_richTextNode\">, which is an experimental repository for prototyping and demonstrating Agent Skills for MATLAB and Simulink work. The repo README explains how to <\/span><a href = \"https:\/\/github.com\/matlab\/agent-skills-playground#install-a-single-skill\"><span class=\"_richTextNode\">install a single skill<\/span><\/a><span class=\"_richTextNode\">.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The matlab-symbolic-math skill covers the basic nuances of defining, assigning, and manipulating symbolic variables and equations. It includes hierarchical skills for specific workflows and tasks, such as deriving transfer functions, converting to state-space equations, using variable-precision arithmetic (<\/span><a href = \"https:\/\/www.mathworks.com\/help\/symbolic\/sym.vpa.html\"><span class=\"_richTextNode\">VPA<\/span><\/a><span class=\"_richTextNode\">), and <\/span><a href = \"https:\/\/www.mathworks.com\/help\/symbolic\/generate-matlab-functions.html\"><span class=\"_richTextNode\">generating MATLAB functions<\/span><\/a><span class=\"_richTextNode\"> for numerical analysis in engineering workflows. You can even use these skills together with natural language prompts to learn how to get started with Symbolic Math Toolbox best practices.<\/span><\/div><h3  style = 'margin: 15px 10px 5px 4px; padding: 0px; line-height: 20.4px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; '><span class=\"_richTextNode\">Symbolic Code Generation with Agentic AI<\/span><\/h3><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">For the task at hand, I drew a simple PI control loop on my whiteboard:<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_1.png\" width = \"995\" height = \"560\" alt = \"\" style = \"vertical-align: baseline; width: 995px; height: 560px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">I apologize if you can\u2019t read my handwriting, I often struggle to read it as well, but most vision-language models can figure it out. Anyway, here is what the blocks encode:<\/span><\/div><ul  style = 'margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-size: 14px; '><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\">PI Controller: C(s) = Kp + Ki\/s<\/span><\/li><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\">DC Motor Plant: G(s) = Km \/ (Js + B)<\/span><\/li><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\">Encoder Feedback: H(s) = Ke<\/span><\/li><\/ul><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">And this is the prompt I fed to OpenAI Codex with the Symbolic Math Toolbox skill installed in my ~\/.agents\/skills directory, running with the MATLAB Agentic Toolkit:<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_2.png\" width = \"1002\" height = \"409\" alt = \"\" style = \"vertical-align: baseline; width: 1002px; height: 409px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">This is a typical application workflow that goes beyond equation manipulation by plugging in known values for fixed parameters and exploring a Pareto front for tunable parameters. Because symbolic equations display nicely in Live Scripts, I asked it to generate a plain-text <\/span><a href = \"http:\/\/https\/www.mathworks.com\/help\/matlab\/matlab_prog\/plain-text-file-format-for-live-scripts.html\"><span class=\"_richTextNode\">Live Code file format (.m)<\/span><\/a><span class=\"_richTextNode\">. The MATLAB Agentic Toolkit contains a <\/span><a href = \"https:\/\/github.com\/matlab\/matlab-agentic-toolkit\/tree\/main\/skills-catalog\/matlab-core\/matlab-create-live-script\"><span class=\"_richTextNode\">skill<\/span><\/a><span class=\"_richTextNode\"> for this because this file format was recently introduced in R2025a and some AI models might not yet be trained to generate it properly. The last message from Codex shows that it used the MATLAB live script and symbolic math skills.<\/span><\/div><h3  style = 'margin: 15px 10px 5px 4px; padding: 0px; line-height: 20.4px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; '><span class=\"_richTextNode\">Results<\/span><\/h3><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The resulting script can vary because of the non-deterministic nature of generative AI. However, as long as you provide sufficient information in the prompt and image input, the provided skills should guide the AI model to produce proper code. The MATLAB Agentic Toolkit connects the GenAI process to MATLAB to test the generated code, ensuring that it runs without errors.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">My run produced a script that interprets the diagram as a PI controller, motor plant, and negative feedback gain, and builds the transfer function:<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 0 10px 0;\"><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 0px none rgb(33, 33, 33); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >syms <\/span><span style=\"color: rgb(167, 9, 245);\">s<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >syms <\/span><span style=\"color: rgb(167, 9, 245);\">Kp Ki Km J B Ke positive<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >Gc = Kp + Ki\/s;<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >Gp = Km\/(J*s + B);<\/span><\/span><\/div><\/div><div class=\"inlineWrapper outputs\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >T = collect(simplify((Gc*Gp)\/(1 + Ke*Gc*Gp)),s)<\/span><\/span><\/div><div  style = 'color: rgb(33, 33, 33); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% \/ auto padding-box border-box; font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px; '><div class=\"symbolicElement\" data-previous-available-width=\"1252\" data-previous-scroll-height=\"64\" data-hashorizontaloverflow=\"false\" style=\"max-height: 261px;\"><div class=\"embeddedOutputsVariableElement\">T&nbsp;=&nbsp;<\/div><span class=\"MathEquation\" style=\"vertical-align: -17px;\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_3.png\" width=\"230\" height=\"38\"><\/span><\/div><\/div><\/div><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">For brevity I will not show all the generated code, but the script then normalized the transfer function into a standard second-order format, extracting key system parameters like <\/span><span style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\">\u03c3<\/span><span class=\"_richTextNode\">(damping factor), <\/span><span texencoding=\"\\omega_n\" style=\"vertical-align:-6px\">$ \\omega_n $<\/span><span class=\"_richTextNode\"> (natural frequency), and <\/span><span style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\">\u03b1<\/span><span class=\"_richTextNode\">. It then used these analytical building blocks to derive exact symbolic equations for rise time and percent overshoot. Finally, it substituted the physical motor constants, providing closed-form equations with only <\/span><span texencoding=\"K_p\" style=\"vertical-align:-6px\">$ K_p $<\/span><span class=\"_richTextNode\"> and <\/span><span texencoding=\"K_i\" style=\"vertical-align:-6px\">$ K_i $<\/span><span class=\"_richTextNode\"> as the independent variables.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">Here is where closed-form analysis shows its value to the engineering workflow. You can deploy these symbolic equations as numeric code for use in MATLAB toolboxes, Simulink, or Simscape. In this example, we want to identify an optimal combination of the <\/span><span texencoding=\"K_p\" style=\"vertical-align:-6px\">$ K_p $<\/span><span class=\"_richTextNode\"> and <\/span><span texencoding=\"K_i\" style=\"vertical-align:-6px\">$ K_i $<\/span><span class=\"_richTextNode\"> gain parameters. To do this, we use <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/symbolic\/sym.matlabfunction.html\"><span class=\"_richTextNode\" style=' font-family: monospace;'>matlabFunction<\/span><\/a><span class=\"_richTextNode\"> to convert symbolic expressions into numeric MATLAB functions while keeping <\/span><span texencoding=\"K_p\" style=\"vertical-align:-6px\">$ K_p $<\/span><span class=\"_richTextNode\"> and <\/span><span texencoding=\"K_i\" style=\"vertical-align:-6px\">$ K_i $<\/span><span class=\"_richTextNode\"> as variables, whose values can be scanned to find the optimal combination. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">While generating this code, Codex showed that it was using one of the Symbolic Math Toolbox skills:<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_4.png\" width = \"784\" height = \"99\" alt = \"\" style = \"vertical-align: baseline; width: 784px; height: 99px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The matlabFunction-patterns.md skill provides the proper way to generate MATLAB functions by correctly specifying the free variables. In this case, Codex used the Troubleshooting section of the skill when calling <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/symbolic\/sym.matlabfunction.html\"><span class=\"_richTextNode\" style=' font-family: monospace;'>matlabFunction<\/span><\/a><span class=\"_richTextNode\">.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_5.png\" width = \"783\" height = \"96\" alt = \"\" style = \"vertical-align: baseline; width: 783px; height: 96px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The resulting code properly generates MATLAB function handles with <\/span><span texencoding=\"K_p\" style=\"vertical-align:-6px\">$ K_p $<\/span><span class=\"_richTextNode\"> and <\/span><span texencoding=\"K_i\" style=\"vertical-align:-6px\">$ K_i $<\/span><span class=\"_richTextNode\"> as free variables:<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 0 10px 0;\"><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 0px none rgb(33, 33, 33); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >riseTimeFcn = matlabFunction(riseTimeExpr,<\/span><span style=\"color: rgb(167, 9, 245);\">'Vars'<\/span><span >,{Kp,Ki});<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >percentOvershootFcn = matlabFunction(percentOvershootExpr,<\/span><span style=\"color: rgb(167, 9, 245);\">'Vars'<\/span><span >,{Kp,Ki});<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >zetaFcn = matlabFunction(zetaVal,<\/span><span style=\"color: rgb(167, 9, 245);\">'Vars'<\/span><span >,{Kp,Ki});<\/span><\/span><\/div><\/div><\/div><div  style = 'margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">We could use the resulting functions in a nonlinear solver like <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/optim\/ug\/fmincon.html?s_tid=srchtitle_support_results_1_fmincon\"><span class=\"_richTextNode\" style=' font-family: monospace;'>fmincon<\/span><\/a><span class=\"_richTextNode\"> in Optimization Toolbox. But since this is a simple problem, Codex used the functions to sweep the parameter values to generate a Pareto front. The following section of code shows how it generated logarithmic grids and kept only underdamped and finite gain pairs.<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 0 10px 0;\"><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 0px none rgb(33, 33, 33); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >KpVals = linspace(0,1000,251);<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >KiVals = logspace(3.5,6,251);<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >[KpGrid,KiGrid] = meshgrid(KpVals,KiVals);<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >zetaGrid = zetaFcn(KpGrid,KiGrid);<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >validGrid = isfinite(zetaGrid) &amp; zetaGrid &gt; 0 &amp; zetaGrid &lt; 1;<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >riseTimeGrid = nan(size(KpGrid));<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >percentOvershootGrid = nan(size(KpGrid));<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >riseTimeGrid(validGrid) = real(riseTimeFcn(KpGrid(validGrid),KiGrid(validGrid)));<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >percentOvershootGrid(validGrid) = max(0,real(percentOvershootFcn(KpGrid(validGrid),KiGrid(validGrid))));<\/span><\/span><\/div><\/div><\/div><div  style = 'margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">Again, I will skip over the details of the code, but it extracts only the non-dominated points where you can't improve rise time without worsening overshoot, sorting from fastest to slowest rise time.<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 0 10px 0;\"><div class=\"inlineWrapper outputs\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 4px 4px 0px 0px; padding: 6px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >head(paretoTable)<\/span><\/span><\/div><div  style = 'color: rgb(33, 33, 33); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% \/ auto padding-box border-box; font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px; '><div class=\"inlineElement eoOutputWrapper disableDefaultGestureHandling embeddedOutputsTextElement\" uid=\"71EEB81D\" prevent-scroll=\"true\" data-testid=\"output_1\" tabindex=\"-1\" style=\"width: 1289.33px; white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\"><div class=\"textElement eoOutputContent\" tabindex=\"-1\" data-previous-available-width=\"1252\" data-previous-scroll-height=\"164\" data-hashorizontaloverflow=\"false\" role=\"article\" aria-roledescription=\"Use Browse Mode to explore \" aria-description=\"text output \" style=\"max-height: 261px; white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">     <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">Kp<\/strong>         <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">Ki<\/strong>        <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">RiseTime_s<\/strong>    <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">Overshoot_percent<\/strong>\r\n    <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">____<\/strong>    <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">__________<\/strong>    <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">__________<\/strong>    <strong style=\"white-space: pre; font-style: normal; color: rgb(33, 33, 33); font-size: 12px;\">_________________<\/strong>\r\n\r\n    1000         1e+06     0.015787          73.293      \r\n    1000    9.7724e+05     0.015972          73.032      \r\n    1000    9.5499e+05     0.016159          72.768      \r\n    1000    9.3325e+05     0.016348          72.502      \r\n    1000    9.1201e+05     0.016539          72.235      \r\n    1000    8.9125e+05     0.016733          71.965      \r\n    1000    8.7096e+05     0.016929          71.693      \r\n    1000    8.5114e+05     0.017127          71.419      <\/div><\/div><\/div><\/div><\/div><h2  style = 'margin: 3px 10px 5px 4px; padding: 0px; line-height: 25px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span class=\"_richTextNode\">Visualization<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">I asked Codex to visualize the Pareto front.<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 0 10px 0;\"><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 0px none rgb(33, 33, 33); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >scatter(riseTimeVec,percentOvershootVec,12,[0.65 0.65 0.65],<\/span><span style=\"color: rgb(167, 9, 245);\">\"filled\"<\/span><span >,<\/span><span style=\"color: rgb(167, 9, 245);\">\"MarkerFaceAlpha\"<\/span><span >,0.25)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >hold <\/span><span style=\"color: rgb(167, 9, 245);\">on<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >plot(paretoTable.RiseTime_s,paretoTable.Overshoot_percent,<\/span><span style=\"color: rgb(167, 9, 245);\">\"r.-\"<\/span><span >,<\/span><span style=\"color: rgb(167, 9, 245);\">\"LineWidth\"<\/span><span >,1.5,<\/span><span style=\"color: rgb(167, 9, 245);\">\"MarkerSize\"<\/span><span >,10)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >hold <\/span><span style=\"color: rgb(167, 9, 245);\">off<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >grid <\/span><span style=\"color: rgb(167, 9, 245);\">on<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >xlabel(<\/span><span style=\"color: rgb(167, 9, 245);\">\"Rise time (s)\"<\/span><span >)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >ylabel(<\/span><span style=\"color: rgb(167, 9, 245);\">\"Percent overshoot (%)\"<\/span><span >)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >title(<\/span><span style=\"color: rgb(167, 9, 245);\">\"Pareto front for PI gains\"<\/span><span >)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >legend(<\/span><span style=\"color: rgb(167, 9, 245);\">\"Sweep samples\"<\/span><span >,<\/span><span style=\"color: rgb(167, 9, 245);\">\"Pareto front\"<\/span><span >,<\/span><span style=\"color: rgb(167, 9, 245);\">\"Location\"<\/span><span >,<\/span><span style=\"color: rgb(167, 9, 245);\">\"northeast\"<\/span><span >)<\/span><\/span><\/div><\/div><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 0px none rgb(33, 33, 33); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >xlim([0.00 1.056])<\/span><\/span><\/div><\/div><div class=\"inlineWrapper outputs\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 0px none rgb(33, 33, 33); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace, Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >ylim([0.00 1.35])<\/span><\/span><\/div><div  style = 'color: rgb(33, 33, 33); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% \/ auto padding-box border-box; font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px; '><div class=\"inlineElement eoOutputWrapper disableDefaultGestureHandling embeddedOutputsFigure\" uid=\"DEB78F97\" prevent-scroll=\"true\" data-testid=\"output_2\" tabindex=\"-1\" style=\"width: 1289.33px;\"><div class=\"outputLayer selectedOutputDecorationLayer doNotExport\" aria-hidden=\"true\"><\/div><div class=\"outputLayer scrollableOutputDecorationLayer doNotExport\" aria-hidden=\"true\"><\/div><div class=\"outputLayer navigationFocusLayer doNotExport\" aria-hidden=\"false\" role=\"application\" tabindex=\"-1\"><\/div><div class=\"outputLayer activeOutputDecorationLayer doNotExport\" aria-hidden=\"false\" role=\"application\"><\/div><div class=\"figureElement eoOutputContent\" role=\"article\" aria-roledescription=\"Use Browse Mode to explore \" aria-description=\"figure output \"><img decoding=\"async\" class=\"figureImage figureContainingNode\" src=\"http:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_6.png\" style=\"width: 560px;\"><\/div><\/div><\/div><\/div><\/div><div  style = 'margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">I manually added the xlim\/ylim commands to zoom in to show some of the individual samples. The red dots represent the Pareto front. We're trying to minimize both rise time and overshoot, and here we have a set of options.<\/span><\/div><h3  style = 'margin: 3px 10px 5px 4px; padding: 0px; line-height: 20.4px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; '><span class=\"_richTextNode\" style=' font-weight: bold;'>Next Steps: From Idealized Equations to Realistic Physical Models<\/span><\/h3><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The symbolic sweep reduces a large gain search space to a small Pareto set. After filtering the grid down to valid underdamped candidates, only about 20 gain pairs remain Pareto-optimal. You can then evaluate those candidates in a higher-fidelity Simscape model that includes effects such as current limiting, stiction, PWM quantization, sensor noise, and thermal behavior.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">Try it yourself if you have access to Simulink and Simscape - prompt your agentic AI to generate code to plug these candidates into a Simscape model and programmatically simulate them in parallel.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The bottom line is that this fast narrowing step using closed-form analysis avoids relying on manual trial-and-error tuning or brute-force sweeps of detailed nonlinear models.<\/span><\/div><h3  style = 'margin: 15px 10px 5px 4px; padding: 0px; line-height: 20.4px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: 700; text-align: left; '><span class=\"_richTextNode\">Get Started<\/span><\/h3><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">This was a simple example for illustration purposes. In practice, I have used this approach on a variety of applications and I've learned a few things along the way.<\/span><\/div><ul  style = 'margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-size: 14px; '><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\" style=' font-weight: bold;'>Provide as much information as you can about your problem and task.<\/span><span class=\"_richTextNode\"> This can be any combination of textual and visual input. Always confirm the information the model extracts from visual input, but I have been impressed by recent advances in vision-language capabilities.<\/span><\/li><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\" style=' font-weight: bold;'>Clearly specify what you want to generate.<\/span><span class=\"_richTextNode\"> Like any programming paradigm, it doesn't read your mind. GenAI will fill underspecified areas with plausible but often unhelpful outputs that can waste your time.<\/span><\/li><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><span class=\"_richTextNode\" style=' font-weight: bold;'>Provide supporting skills.<\/span><span class=\"_richTextNode\"> Providing skills \u2013 particularly for <\/span><a href = \"https:\/\/github.com\/matlab\/agent-skills-playground\/tree\/main\/skills\/matlab-symbolic-math\"><span class=\"_richTextNode\">Symbolic Math Toolbox<\/span><\/a><span class=\"_richTextNode\"> and <\/span><a href = \"https:\/\/github.com\/matlab\/matlab-agentic-toolkit\/tree\/main\/skills-catalog\/matlab-core\/matlab-create-live-script\"><span class=\"_richTextNode\">live script<\/span><\/a><span class=\"_richTextNode\"> generation\u2013 significantly improves output quality. Until such skills are incorporated into the AI model training data, these skills supplement the AI model for specialized tasks such as workflows with closed-form analysis. If you identify a gap, try prompting your GenAI tool to generate new reusable skills.<\/span><\/li><\/ul><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">This workflow helps you bring your projects into Symbolic Math Toolbox, where you can efficiently derive, manipulate, and explore the mathematical foundations of your work. If you are new to the toolbox, the <\/span><a href = \"https:\/\/matlabacademy.mathworks.com\/en\/details\/introduction-to-symbolic-math-with-matlab\/symbolic\"><span class=\"_richTextNode\">self-paced training course<\/span><\/a><span class=\"_richTextNode\"> is a good starting point to build proficiency. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span class=\"_richTextNode\">The Symbolic Math Toolbox skills in the <\/span><a href = \"https:\/\/github.com\/matlab\/agent-skills-playground\"><span class=\"_richTextNode\">Agent Skills Playground<\/span><\/a><span class=\"_richTextNode\"> are experimental. We are eager to improve them based on your experiences and feedback, so please comment below or post a <\/span><a href = \"https:\/\/github.com\/matlab\/agent-skills-playground\/issues\"><span class=\"_richTextNode\">repo issue<\/span><\/a><span class=\"_richTextNode\">.<\/span><\/div>\r\n<\/div><script type=\"text\/javascript\">var css = '._richTextNode {white-space: break-spaces;} \/* Copyright 2014-2025 The MathWorks, Inc. *\/\/* Styling that is common to warnings and errors is in diagnosticOutput.css *\/.embeddedOutputsErrorElement {    min-height: 18px;    max-height: 550px;} .embeddedOutputsErrorElement .diagnosticMessage-errorType {    overflow: auto;} .embeddedOutputsErrorElement.inlineElement {} .embeddedOutputsErrorElement.rightPaneElement {} \/* Copyright 2014-2025 The MathWorks, Inc. *\/\/* Styling that is common to warnings and errors is in diagnosticOutput.css *\/.embeddedOutputsWarningElement {    min-height: 18px;    max-height: 550px;} .embeddedOutputsWarningElement .diagnosticMessage-warningType {    overflow: auto;} .embeddedOutputsWarningElement.inlineElement {} .embeddedOutputsWarningElement.rightPaneElement {} \/* Copyright 2015-2025 The MathWorks, Inc. *\/\/* In this file, styles are not scoped to rtcContainer since they could be in the Dojo Tooltip *\/.diagnosticMessage-wrapper {    \/* Since this selector may be used outside RTC Container without RTC semantic variables, a    default value is used. An example here is the App Designers alert tooltip. *\/    font-family: var(--rtc-output-font-family, Menlo, Monaco, Consolas, \"Courier New\", monospace);    font-size: var(--rtc-output-font-size, 12px);} .diagnosticMessage-wrapper.diagnosticMessage-warningType {    \/*This fallback value will be used for appdesigner warnings*\/    color: var(--rtc-warning-output-color, var(--mw-color-matlabWarning));} .diagnosticMessage-wrapper.diagnosticMessage-warningType a {    \/*This fallback value will be used for appdesigner warnings*\/    color: var(--rtc-warning-output-color, var(--mw-color-matlabWarning));    text-decoration: underline;} .rtcThemeDefaultOverride .diagnosticMessage-wrapper.diagnosticMessage-warningType,.rtcThemeDefaultOverride .diagnosticMessage-wrapper.diagnosticMessage-warningType a {    color: var(--mw-color-matlabWarning) !important;} .diagnosticMessage-wrapper.diagnosticMessage-errorType {    \/*This fallback value will be used in appdesigner error tooltip text*\/    color: var(--rtc-error-output-color, var(--mw-color-matlabErrors));} .diagnosticMessage-wrapper.diagnosticMessage-errorType a {    \/*This fallback value will be used in appdesigner error tooltip text*\/    color: var(--rtc-error-output-color, var(--mw-color-matlabErrors));    text-decoration: underline;} .rtcThemeDefaultOverride .diagnosticMessage-wrapper.diagnosticMessage-errorType,.rtcThemeDefaultOverride .diagnosticMessage-wrapper.diagnosticMessage-errorType a {    color: var(--mw-color-matlabErrors) !important;} .diagnosticMessage-wrapper .diagnosticMessage-messagePart,.diagnosticMessage-wrapper .diagnosticMessage-causePart {    white-space: pre-wrap;} .diagnosticMessage-wrapper .diagnosticMessage-stackPart {    white-space: pre;} \/* Copyright 2014-2025 The MathWorks, Inc. *\/.embeddedOutputsTextElement,.embeddedOutputsVariableStringElement {    white-space: pre;    word-wrap:  initial;    min-height: 18px;    max-height: 550px;} .embeddedOutputsTextElement .textElement,.embeddedOutputsVariableStringElement .textElement {    overflow: auto;} .textElement,.rtcDataTipElement .textElement {    padding-top: 2px;} .embeddedOutputsTextElement.inlineElement,.embeddedOutputsVariableStringElement.inlineElement {} .inlineElement .textElement {} .embeddedOutputsTextElement.rightPaneElement,.embeddedOutputsVariableStringElement.rightPaneElement {    min-height: 16px;} .rightPaneElement .textElement {    padding-top: 2px;    padding-left: 9px;}'; var head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); head.appendChild(style); style.type = 'text\/css'; if (style.styleSheet){ style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); }<\/script>","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/matlab\/files\/2026\/06\/SMT_Skills_1.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><p>Bio: Today's guest blogger is Jack Erickson. Jack is a product manager for Symbolic Math Toolbox and Quantum Computing at MathWorks. He was previously in AI software developer marketing at... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/matlab\/2026\/06\/25\/from-whiteboard-sketch-to-pareto-front-using-symbolic-math-skills-in-the-agentic-ai-playground\/\">read more >><\/a><\/p>","protected":false},"author":176,"featured_media":4331,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[144,78,128,30,135],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/4329"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/users\/176"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/comments?post=4329"}],"version-history":[{"count":2,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/4329\/revisions"}],"predecessor-version":[{"id":4338,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/4329\/revisions\/4338"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/media\/4331"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/media?parent=4329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/categories?post=4329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/tags?post=4329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}