// Numbas version: exam_results_page_options {"name": "21. Centroids by Integration", "metadata": {"description": "

Homework set.  Use integration to find the centroid of shapes bounded by functions.

", "licence": "Creative Commons Attribution-ShareAlike 4.0 International"}, "duration": 0, "percentPass": 0, "showQuestionGroupNames": false, "shuffleQuestionGroups": false, "showstudentname": true, "question_groups": [{"name": "Group", "pickingStrategy": "all-ordered", "pickQuestions": 1, "questionNames": ["", "", "", ""], "variable_overrides": [[], [], [], []], "questions": [{"name": "Differential Elements", "extensions": ["geogebra", "weh"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["centroids", "centroids by integration", "Mechanics", "mechanics", "statics", "Statics"], "metadata": {"description": "

Given a random spandrel, find the expressions for the differential elements of area and the coordinates of its centroid needed to determine the location of the centroid by integration. 

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('tpndhsyt',[['version',version]])}

", "advice": "

The area of the strip, dA is the width times the height of the strip.

\n

The narrow width of the element is either $dx$ or $dy$ 

\n

The coordinates of the centroid are found by averaging the coordinates of the top and bottom of the strip.

", "rulesets": {}, "variables": {"dA": {"name": "dA", "group": "Ungrouped variables", "definition": "expression(['y*dx',\"(y'-y)*dx\",\"(b-y)*dx\", \"(x-x')*dy\",\"x*dy\",\"(a-x)*dy\"][version-1\n])", "description": "", "templateType": "anything"}, "ybar": {"name": "ybar", "group": "Ungrouped variables", "definition": "expression([\"y/2\",\"(y+y')/2\",\"(y+b)/2\",\"y\",\"y\",\"y\"][version-1])", "description": "", "templateType": "anything"}, "xbar": {"name": "xbar", "group": "Ungrouped variables", "definition": "expression([\"x\",\"x\",\"x\",\"(x+x')/2\",\"x/2\",\"(x+a)/2\"][version-1])", "description": "", "templateType": "anything"}, "version": {"name": "version", "group": "Ungrouped variables", "definition": "random(1..6)", "description": "", "templateType": "anything"}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["version", "dA", "xbar", "ybar"], "variable_groups": [], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the properties of the differential strip in terms of the known coordinates.

\n

$dA$ = [[0]]

\n

$\\bar{x}_{el}$ = [[1]] 

\n

$\\bar{y}_{el}$ =[[2]]  

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "da", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{dA}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "xbar", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{xbar}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "ybar", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{ybar}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "valuegenerators": []}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Centroid of a triangle by integration", "extensions": ["geogebra"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["centroid", "definite integral", "integrtion"], "metadata": {"description": "

Student calculates $\\bar{y}$ for a triangle.  Must use similar triangles get element $dA$.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{applet}

", "advice": "

Use similar triangles to express the width of the strip as a function of $y$:

\n

$\\dfrac{w}{h-y} = \\dfrac{b}{h}$

\n

$w = b\\dfrac{(h-y)}{h}$

\n

Therefore,

\n

$dA = w\\; dy = b\\dfrac{(h-y)}{h} dy$

\n

With this you can evaluate $Q_x$

\n

$\\begin{align} Q_x &= \\int y\\; dA\\\\ &=\\int_0^h y\\;b\\frac{(h-y)}{h}\\; dy\\\\&= \\frac{b}{h}\\int_0^h (hy - y^2)\\; dy\\\\& = \\frac{b}{h}\\left. \\left(\\frac{h y^2}{2} - \\frac{y^3}{3}\\right)\\right |_0^h \\\\ &= bh^2\\left( \\frac{1}{2} - \\frac{1}{3}\\right)\\\\ &= \\frac{bh^2}{6}\\end{align}$

\n

Finaly, find $\\bar{y}$ knowing the area of the triangle is $\\dfrac{bh}{2}$

\n

$\\begin{align} \\bar{y} &= \\frac{Q_x}{A}\\\\ &= \\frac{{bh^2}/{6}}{{bh}/{2}}\\\\ &= \\frac{h}{3}\\end{align}$

", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [{"name": "dA", "value": "diff:A", "tex": "\\mathrm{d}A"}, {"name": "dx", "value": "diff:x", "tex": "\\mathrm{d}x"}, {"name": "dy", "value": "diff:y", "tex": "\\mathrm{d}y"}], "variables": {"applet": {"name": "applet", "group": "Ungrouped variables", "definition": "geogebra_applet(\"jyqxv2uf\",[B: vector(random(-1,1,2,4,5),3.5)])", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["applet"], "variable_groups": [], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "Questions ", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Use horizontal strips to prove by integration that for a triangle with base $b$ and height $h$,  $\\bar{y} = h/3$.

\n

1. Derive expressions for $\\bar{y}_{el}$ and $dA$ in terms of $y$.

\n

$\\bar{y}_{el} =$ [[1]] $\\qquad dA=$ [[0]]

\n

2. Determine the limits of the integration.

\n

Lower limit [[2]]  Upper limit [[3]]

\n

3. Evaluate $Q_x $ between your limits.

\n

$Q_x  = \\int \\bar{y}_{el} dA = $ [[4]] 

\n

4.  Evaluate $\\bar{y}$ for the triangle.

\n

$\\bar{y} = \\dfrac{Q_x}{A} = $ [[5]]

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "dA", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "b*(h-y)/h dy", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": true, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": [{"name": "b", "value": ""}, {"name": "h", "value": ""}, {"name": "y", "value": ""}]}, {"type": "patternmatch", "useCustomName": true, "customName": "$\\bar{y}_{el}", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "y", "displayAnswer": "", "matchMode": "exact"}, {"type": "numberentry", "useCustomName": true, "customName": "lower", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minValue": "0", "maxValue": "0", "correctAnswerFraction": false, "allowFractions": false, "mustBeReduced": false, "mustBeReducedPC": 0, "displayAnswer": "", "showFractionHint": true, "notationStyles": ["plain", "en", "si-en"], "correctAnswerStyle": "plain"}, {"type": "patternmatch", "useCustomName": true, "customName": "upper", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "h", "displayAnswer": "", "caseSensitive": true, "partialCredit": 0, "matchMode": "exact"}, {"type": "jme", "useCustomName": true, "customName": "Qx", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "b h^2 /6", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": true, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": [{"name": "b", "value": ""}, {"name": "h", "value": ""}]}, {"type": "jme", "useCustomName": true, "customName": "ybar", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "h/3", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": [{"name": "h", "value": ""}]}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Centroids by integration ", "extensions": ["geogebra"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["area under curve", "centroidal coordinates", "centroids by integration", "first moment of area", "integration", "mechanics", "Mechanics", "Statics", "statics"], "metadata": {"description": "

Find the area, first moment of area, and coordinates of a general spandrel.  The area may be above or below the function.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('bqnqgpfp',[['n',n],['h',random(1,1.5)],['b',random(0.8,1.3)],['Above', above],['Vertical',vertical]])}

\n

Use integration with {if(Vertical=1,'vertical','horizontal')} strips to determine the area of the spandrel bounded by the function $\\color{red}{y = f(x) = h - k \\simplify[all,fractionnumbers]{x^{n}}}$ and $\\var{if(Above=1, 'the lines $y=h$ and $x=b$','the $x$- and $y$-axes')}$, and also find the coordinates of its centroid. Note: b and h are constants.

", "advice": "
\n

Note: The solutions below is for Vertical Strips.  

\n

The procedure for horizontal strips is similar, but with these strip properties and limits:

\n

Strip properties:  $dA = (b-x)\\,dy$, $\\bar{x}_{el} = \\dfrac{x+b}{y}$, $\\bar{y}_{el} = y $ $dA = x \\,dy$, $\\bar{x}_{el} = x/2$, $\\bar{y}_{el} =y$

\n

Limits:  $x= 0 \\text{ to } h$

\n

You will get the same results for $A, Q_x, Q_y, \\bar{x} \\text{ and } \\bar{y}$, which ever strips you choose.

\n
\n

1. Bounding function: $y = f(x) = h - k \\simplify[all,fractionnumbers]{x^{n}}$

\n

2. Constant $k$ in terms of $b$: at $x=b, y=0 \\therefore h - k \\simplify[all,fractionnumbers]{b^{n}}  = 0 \\therefore k = \\dfrac{h}{\\simplify[all,fractionnumbers]{b^{n}}}$

\n

3. Strip properties:  $dA = y\\,dx$, $\\bar{x}_{el} = x$, $\\bar{y}_{el} = y/2$ $dA = (h-y)\\,dx$, $\\bar{x}_{el} = x$, $\\bar{y}_{el} = (h+y)/2$

\n

4. Limits:  $x= 0 \\text{ to } b$

\n

5. Area under the curve:

\n

$\\begin{align} A &= \\int dA\\\\&= \\int_0^b y\\, dx\\\\&= \\int_0^b  (h - k \\simplify[all,fractionnumbers]{x^{n}})\\, dx\\\\&= \\left[ hx - k \\dfrac{\\simplify[all,fractionnumbers]{x^{n+1}}}{\\simplify[all,fractionnumbers]{{n+1}}}\\right]_0^b\\\\&= \\left[ hb - \\left(\\dfrac{h}{\\simplify[all,fractionnumbers]{b^{n}}}\\right) \\dfrac{\\simplify[all,fractionnumbers]{b^{n+1}}}{\\simplify[all,fractionnumbers]{{n+1}}}\\right]\\\\&=hb-\\dfrac{hb}{\\simplify[all,fractionnumbers]{{n}+1}}\\\\&=\\var[all,fractionnumbers]{{n}/({n}+1)} h b\\end{align}$

\n

$\\begin{align} A &= \\int dA\\\\&= \\int_0^b (h-y)\\, dx\\\\&= \\int_0^b  h - (h - k \\simplify[all,fractionnumbers]{x^{n}})\\, dx\\\\&=\\int_0^bk \\simplify[all,fractionnumbers]{x^{n}}dx\\\\&= \\left[k \\dfrac{\\simplify[all,fractionnumbers]{x^{n+1}}}{\\simplify[all,fractionnumbers]{{n+1}}}\\right]_0^b\\\\&= \\left[ \\left(\\dfrac{h}{\\simplify[all,fractionnumbers]{b^{n}}}\\right) \\dfrac{\\simplify[all,fractionnumbers]{b^{n+1}}}{\\simplify[all,fractionnumbers]{{n+1}}}\\right]\\\\&=\\dfrac{hb}{\\simplify[all,fractionnumbers]{{n}+1}}\\\\&=\\var[all,fractionnumbers]{1/({n}+1)} h b\\end{align}$

\n

6. $Q_x$ and $Q_y$  Perform similar integrations to get: 

\n

$Q_x = \\int \\bar{y}_{el}\\,dA  = \\simplify[all,simplifyfractions,fractionnumbers]{{n}^2 /(2{n}^2+3{n}+1) h^2b}  \\qquad Q_y = \\int \\bar{x}_{el}\\,dA  = \\simplify[all,fractionnumbers,simplifyfractions]{{n}/(2{n}+4)} hb^2$

\n

$Q_x = \\int \\bar{y}_{el}\\,dA  = \\simplify[all,simplifyfractions,fractionnumbers]{(3{n}+1)/(2({n}+1)(2{n}+1))}h^2b \\qquad Q_y = \\int \\bar{x}_{el}\\,dA  = \\simplify[all,fractionnumbers,simplifyfractions]{1/({n}+2)} hb^2$

\n

7. Centroid:

\n

$\\bar{x} = \\dfrac{Q_y}{A} = \\dfrac{\\simplify[all,fractionnumbers,simplifyfractions]{{n}/(2{n}+4)} hb^2}{\\var[all,fractionnumbers]{{n}/({n}+1)} h b} = \\simplify[all,collectnumbers]{({n}+1)/(2{n}+4)}b \\qquad \\bar{y} = \\dfrac{Q_x}{A} = \\dfrac{\\simplify[all,fractionnumbers,simplifyfractions]{{n^2}/(({n}+1)(2{n}+1))} h^2b}{\\var[all,fractionnumbers]{{n}/({n}+1)} h b} = \\simplify[all,collectnumbers,simplifyfractions]{{n}/(2{n}+1)}h $

\n

$\\bar{x} = \\dfrac{Q_y}{A} = \\dfrac{\\simplify[all,fractionnumbers,simplifyfractions]{1/({n}+2)} hb^2}{\\var[all,fractionnumbers]{1/({n}+1)} h b} = \\simplify[all,collectnumbers]{({n}+1)/({n}+2)}b \\qquad \\bar{y} = \\dfrac{Q_x}{A} = \\dfrac{\\simplify[all,simplifyfractions,fractionnumbers]{(3{n}+1)/(2({n}+1)(2{n}+1))}h^2b}{\\var[all,fractionnumbers]{1/({n}+1)} h b} = \\simplify[all,collectnumbers,simplifyfractions]{(3{n}+1)/(4{n}+2)}h $

", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"Qy": {"name": "Qy", "group": "answers", "definition": " simplify(substitute([\"n\" :n],\n if(Above=1, \n expression('h b^2/(n+2)'),\n expression('h b^2 n / (2 n + 4 )'))),\"basic,collectNumbers,simplifyFractions\")", "description": "", "templateType": "anything", "can_override": false}, "ybar_el": {"name": "ybar_el", "group": "answers", "definition": "expression(['y','y/2','y','(h+y)/2'][version])", "description": "", "templateType": "anything", "can_override": false}, "xbar": {"name": "xbar", "group": "answers", "definition": " simplify(substitute([\"n\" :n],\n if(Above=1,\n expression('b* (n+1)/(n+2)'),\n expression('b * (n+1)/(2n+4)'))),\"basic,collectNumbers,simplifyFractions,cancelTerms\")", "description": "

expression(\"(\"+ string(Qy) +\")/(\"+ string(area) +\")\")

", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "inputs", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "k": {"name": "k", "group": "inputs", "definition": "expression(if(vertical=1,'h/b^n','b/h^(1/n)'))", "description": "", "templateType": "anything", "can_override": false}, "Qx": {"name": "Qx", "group": "answers", "definition": " simplify(substitute([\"n\" :n],\n if(Above=1,\n expression('(b h^2 /2)(3n+1)/((n+1) (2n+1))'),\n expression('h^2 b n^2/((n+1)(2n+1))'))),\"basic,collectNumbers,simplifyFractions\")", "description": "", "templateType": "anything", "can_override": false}, "Above": {"name": "Above", "group": "inputs", "definition": "random(0,1)", "description": "

area above or below the curve?

", "templateType": "anything", "can_override": false}, "version": {"name": "version", "group": "inputs", "definition": "2 above + vertical\n", "description": "

0 = below horizontal

\n

1 = below vertical

\n

2 = above horizontal

\n

3 = above vertical

\n

horizontal strips not implemented

", "templateType": "anything", "can_override": false}, "Vertical": {"name": "Vertical", "group": "inputs", "definition": "random(0,1)", "description": "

0 = horizontal strips

\n

1 = vertical strips?  Horizontal strips not currently implemented.

\n

\n

 Can't figure out how to pass a boolean to geogebra, so using {0,1} instead. Only exponents < 2 can be horizontal  

", "templateType": "anything", "can_override": false}, "ybar": {"name": "ybar", "group": "answers", "definition": " simplify(substitute([\"n\" :n],if(Above=1,\n expression('h * (3 n +1)/(4 n+2)'),\n expression('h n / (2 n+1)'))),\"basic,collectNumbers,simplifyFractions\")", "description": "

                                                                                                                                                                               

", "templateType": "anything", "can_override": false}, "area": {"name": "area", "group": "answers", "definition": "simplify(substitute([\"n\" :n], if(Above=1,\n expression('b h / (n+1)'),\n expression('b h n /(n +1)'))),\"basic,collectNumbers,simplifyFractions,cancelTerms\")", "description": "

ok

", "templateType": "anything", "can_override": false}, "lower_limit": {"name": "lower_limit", "group": "answers", "definition": "0", "description": "", "templateType": "anything", "can_override": false}, "n": {"name": "n", "group": "inputs", "definition": "random(1/3,1/2,1,3/2,2,3)", "description": "

the exponent of the function (1-kx^n) (0.5 .. 5#0.5)

", "templateType": "anything", "can_override": false}, "upper_limit": {"name": "upper_limit", "group": "answers", "definition": "if(Vertical=1,'b','h')", "description": "", "templateType": "anything", "can_override": false}, "xbar_el": {"name": "xbar_el", "group": "answers", "definition": "expression(['x/2','x','(b+x)/2','x'][version])", "description": "", "templateType": "anything", "can_override": false}, "dA": {"name": "dA", "group": "answers", "definition": "expression(['x dy','y dx','(b-x) dy','(h-y) dx'][version])", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": [], "variable_groups": [{"name": "inputs", "variables": ["n", "version", "Vertical", "Above", "k", "debug"]}, {"name": "answers", "variables": ["dA", "xbar_el", "ybar_el", "upper_limit", "lower_limit", "area", "Qy", "xbar", "ybar", "Qx"]}], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "Bounding function", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

The bounding funtion contains a constant $k$ which can be expressed in terms of $b$ and $h$.  Determine the value of $k$ in terms of b and by substituting in the coordinates of a point which is on the curve into the bounding function.

\n

$k$ = [[0]] {k}

\n

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "k", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "h/b^{n}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": [{"name": "b", "value": ""}, {"name": "h", "value": ""}]}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Strip", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the area of the rectangular differential strip.

\n

$dA$ = [[0]] {da}

\n

Determine expressions for the coordinates of the centroid of the strip.

\n

$\\bar{x}_{el} = $ [[1]] $\\qquad\\bar{y}_{el} = $ [[2]]  xbar= {xbar_el}  ybar = {ybar_el}

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "$dA$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{dA}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "$\\bar{x}$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{xbar_el}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "$\\bar{y}$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{ybar_el}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Limits", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the limits of integration for these strips.

\n

Lower limit is: [[0]] {0} $\\qquad$ Upper limit is: [[1]] {upper_limit}

", "gaps": [{"type": "patternmatch", "useCustomName": true, "customName": "lower", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "0", "displayAnswer": "", "matchMode": "exact"}, {"type": "patternmatch", "useCustomName": true, "customName": "upper", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{upper_limit}", "displayAnswer": "", "matchMode": "exact"}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Area", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

With the information determined above, evaluate this integral to find the area of the spandrel in terms of constants b and h.

\n

$A =  \\int dA  = $ [[0]]   

\n

area = {area}

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "area", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{area}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": true, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "First Moments", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Perform the following integrals to determine the first moments of area with respect to the x- and y-axis.

\n

\n

$Q_x = \\int \\bar{y}_{el} dA =$ [[0]] {Qx} $\\qquad Q_y = \\int \\bar{x}_{el} dA =$ [[1]] {Qy}

\n

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "qx", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{Qx}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "qy", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{Qy}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Centroid", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Use the information you found above to determine the coordinates of the centroid of the shaded spandrel.

\n

$\\bar{x} = \\dfrac{Q_y}{A} = $  [[0]]  {xbar}  $\\qquad\\bar{y} = \\dfrac{Q_x}{A} = $  [[1]]  {ybar}  

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "xbar", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{xbar}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}, {"type": "jme", "useCustomName": true, "customName": "ybar", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{ybar}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": false, "singleLetterVariables": false, "allowUnknownFunctions": true, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Centroid by integration: upper and lower bounds are functions", "extensions": ["geogebra", "quantities"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["centroid", "integration", "Mechanics", "mechanics", "Statics", "statics"], "metadata": {"description": "

Use integration to find the centroid of an area bounded by a parabola, a sloping line, and the y-axis.  

", "licence": "Creative Commons Attribution-ShareAlike 4.0 International"}, "statement": "

{applet()}

\n

Determine the coordinates of the centroid of the shaded area bounded by the $y$-axis, a parabola passing throught the origin and point $A$, and a straight line passing through points $A$ and $B$.

\n

Given:  $A = ( \\var{A[0]}, \\var{A[1]} ), B = (0, \\var{b}) $

", "advice": "

Bounding Functions

\n

Parabola: $f(x) = k x^2$

\n

at $x=\\var{A[0]}, f(x)=\\var{A[1]}$ , so $k = \\dfrac{\\var{A[1]}}{\\var{A[0]}^2}$

\n

so, $f(x) = \\var[fractionNumbers]{A[1]/A[0]^2} x^2$

\n

Line: $g(x) = m x + b$

\n

where $m = \\dfrac{(\\var{A[1]}-\\var{b})}{\\var{x}}$, and $b = \\var{b}$

\n

so, g(x) = $\\var[fractionNumbers]{(A[1]-b) /x} x + \\var{b}$

\n

Strip Properties for Vertical strips

\n

$dA = [g(x) - f(x)]\\; dx =\\left(\\simplify[all]{- {A[1]}/{A[0]}^2} x^2 +\\simplify{({A[1]}-{b}) /{x}} x + \\simplify{{b}} \\right )\\; dx $

\n

$\\bar{x}_{el} = x$

\n

$\\bar{y}_{el} = \\dfrac{g(x) + f(x)}{2} $

\n

Integrals

\n

$A = \\int_0^\\var{x}\\; dA = \\var{siground(area,4)} \\text{ units}^2$

\n

$Q_y = \\int_0^\\var{x} \\bar{x}_{el} \\; dA = \\var{siground(Qy,4)} \\text{ units}^3$

\n

$Q_x = \\int_0^\\var{x} \\bar{y}_{el} \\; dA = \\var{siground(Qx,4)}\\text{ units}^3$

\n

Centroid

\n

 $\\bar{x} = \\dfrac{Q_y}{A} = \\var{siground(xbar,4)}$  units

\n

 $\\bar{y} = \\dfrac{Q_x}{A} = \\var{siground(ybar,4)}$  units

", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"A": {"name": "A", "group": "Ungrouped variables", "definition": "vector(random(1..10),random(3..12))", "description": "", "templateType": "anything", "can_override": false}, "b": {"name": "b", "group": "Ungrouped variables", "definition": "random(0..10)", "description": "

y component of point B

", "templateType": "anything", "can_override": false}, "k": {"name": "k", "group": "Ungrouped variables", "definition": "A[1]/A[0]^2", "description": "", "templateType": "anything", "can_override": false}, "m": {"name": "m", "group": "Ungrouped variables", "definition": "(A[1]-b)/A[0]", "description": "

slope

", "templateType": "anything", "can_override": false}, "area": {"name": "area", "group": "Unnamed group", "definition": "- k x^3/3 + m x^2/2 + b x", "description": "", "templateType": "anything", "can_override": false}, "x": {"name": "x", "group": "Ungrouped variables", "definition": "A[0]", "description": "", "templateType": "anything", "can_override": false}, "Qy": {"name": "Qy", "group": "Unnamed group", "definition": "- k x^4/4 + m x^3/3 + b x^2/2", "description": "", "templateType": "anything", "can_override": false}, "xbar": {"name": "xbar", "group": "Unnamed group", "definition": "Qy/area", "description": "", "templateType": "anything", "can_override": false}, "Qx": {"name": "Qx", "group": "Unnamed group", "definition": "(-k^2 x^5/5 + m^2 x^3/3 + m b x^2 + b^2 x)/2", "description": "", "templateType": "anything", "can_override": false}, "ybar": {"name": "ybar", "group": "Unnamed group", "definition": "Qx/area", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "m <> 0 // don't want the line to be horizontal", "maxRuns": 100}, "ungrouped_variables": ["A", "b", "k", "m", "x"], "variable_groups": [{"name": "Unnamed group", "variables": ["area", "Qy", "xbar", "Qx", "ybar"]}], "functions": {"g": {"parameters": [["x", "number"]], "type": "number", "language": "jme", "definition": " m x + by"}, "applet": {"parameters": [], "type": "ggbapplet", "language": "javascript", "definition": "//{geogebra_applet('cpf7gyej',['A': A, 'by': b, \"C\": [visible: false, label_style: 3]])}\n// Create the worksheet. \n// This function returns an object with a container `element` and a `promise` resolving to a GeoGebra applet.\nvar params = {\n material_id: 'cpf7gyej'\n}\n\nvar result = Numbas.extensions.geogebra.createGeogebraApplet(params);\n\n// Once the applet has loaded, run some commands to manipulate the worksheet.\nresult.promise.then(function(d) {\n var app = d.app;\n question.applet = d;\n \n //initialize the dimensions and forces\n \n function setGGBPoint(g_name, n_name = g_name) {\n // moves point in GGB to location of Numbas Vector Variable\n // g_name = geogebra point, n_name = numbas vector\n \n //var pt = question.scope.evaluate(n_name).value\n var pt = scope.getVariable(n_name).value\n app.setFixed(g_name,false,false);\n app.setCoords(g_name, pt[0], pt[1]);\n app.setFixed(g_name,true,true);\n }\n \n function setGGBNumber(gname, nname=gname) {\n // Sets number in GGB to a Numbas Variable\n var n = question.scope.evaluate(nname).value;\n app.setValue(gname,n);\n }\n \n setGGBPoint(\"A\");\n setGGBNumber(\"by\", \"b\");\n app.setVisible(\"C\",false);// centroid\n\n \n});\n\n// This function returns the result of `createGeogebraApplet` as an object \n// with the JME data type 'ggbapplet', which can be substituted into the question's content.\nreturn new Numbas.jme.types.ggbapplet(result);\n"}}, "preamble": {"js": "question.signals.on('adviceDisplayed',function() {\n try{\n var app = question.applet.app;\n app.setVisible(\"C\", true,false);\n }\n catch(err){} \n \n})\n\n\n\n", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "centroid", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

$\\bar{x} = $ [[0]]  units 

\n

$\\bar{y} = $  [[1]] units

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "xbar", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(xbar,'')", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "ybar", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(ybar,'')", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}]}], "allowPrinting": true, "navigation": {"allowregen": true, "reverse": true, "browse": true, "allowsteps": true, "showfrontpage": false, "showresultspage": "oncompletion", "navigatemode": "sequence", "onleave": {"action": "none", "message": ""}, "preventleave": true, "startpassword": ""}, "timing": {"allowPause": true, "timeout": {"action": "none", "message": ""}, "timedwarning": {"action": "none", "message": ""}}, "feedback": {"showactualmark": true, "showtotalmark": true, "showanswerstate": true, "allowrevealanswer": true, "advicethreshold": 0, "intro": "", "reviewshowscore": true, "reviewshowfeedback": true, "reviewshowexpectedanswer": true, "reviewshowadvice": true, "feedbackmessages": []}, "diagnostic": {"knowledge_graph": {"topics": [], "learning_objectives": []}, "script": "diagnosys", "customScript": ""}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "extensions": ["geogebra", "quantities", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": []}