Difference between revisions of "Python/Homework 0"

From PrattWiki
Jump to navigation Jump to search
(Created page with "== Background == This page comes from an assignment Dr. G would give out to classes that have EGR 103 as a pre-requisite to give an idea of what kinds of computational abilit...")
 
(Redirected page to Homework 0)
(Tag: New redirect)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Background ==
+
#REDIRECT [[Homework 0]]
This page comes from an assignment Dr. G would give out to classes that have EGR 103 as a pre-requisite to give an idea of what kinds of computational abilities might come into play over the course of the semester.  The assignment was not graded, but students were expected to complete it and ask questions about any topics they were unsure of.  Given that, it might as well live on Pundit! Both MATLAB and Python solutions are available, though starting in Fall of 2021 the last of the MATLAB EGR 103 students will have generally graduated and so most people will be using Python.  If you did not take EGR 103 or CS 101 (i.e. you have never seen Python), there will be some Pundit pages that should help out.
 
 
 
== Problems ==
 
=== Linear fit ===
 
Many systems you will be learning about have some kind of linear relationship between an applied field and a measured response.  This problem explores that for a circuit and the relationship between the voltage across an element and the current through it.  There is a link below to data sets for ten experimental runs where a particular voltage was applied to an element and the current through it was measured.  Write code that automates the process of
 
* Loading data from a file,
 
* Determining the line of best fit for the current as a function of the voltage, and
 
* Storing the slope and intercept of the fit into arrays called <code>slope</code> and <code>intercept</code>, respectively.
 
 
 
Once all data files are processed, print a table with results of all 10 runs to the screen using scientific notation for all the numbers and making sure the numbers line up under each other.  Note that the slopes will generally be positive but the intercepts may be negative. 
 
 
 
<div class="mw-collapsible mw-collapsed" style="width:100%">
 
==== References====
 
<div class="mw-collapsible-content">
 
* [[Python:Iterative Structures]] - loops in Python
 
* [[Python:Flexible Programming]] - a couple ways to look for files in a folder and load them
 
* [[Python:Fitting]] - how to do curve fits in Python; for this problem, you only need [[Python:Fitting#Polynomial_Fitting]]  
 
* [https://peps.python.org/pep-3101/#format-strings https://peps.python.org/pep-3101/#format-strings] and [https://peps.python.org/pep-3101/#standard-format-specifiers https://peps.python.org/pep-3101/#standard-format-specifiers] for formatting strings
 
</div>
 
 
 
<div class="mw-collapsible mw-collapsed" style="width:100%">
 
==== Answers ====
 
<div class="mw-collapsible-content">
 
Your code should end up displaying the following:
 
<syntaxhighlight lang=text>
 
    Slope  Intercept
 
5.787e+00  1.440e-01
 
4.640e+00  3.912e-02
 
5.934e+00  1.174e-01
 
5.234e+00  9.758e-02
 
4.898e+00  1.168e-01
 
5.923e+00  1.745e-01
 
4.179e+00 -9.780e-02
 
5.296e+00  8.575e-02
 
5.206e+00  1.369e-01
 
5.205e+00  4.678e-02
 
</syntaxhighlight>
 
</div>
 
 
 
<div class="mw-collapsible mw-collapsed" style="width:100%">
 
==== Solutions ====
 
<div class="mw-collapsible-content">
 
===== Python =====
 
<html>
 
<iframe src="https://trinket.io/embed/python3/e86d4c5d86?start=result" width="100%" height="370" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>
 
</html>
 
===== MATLAB =====
 
<syntaxhighlight lang=matlab>
 
%% Initialize workspace
 
clear; format short e
 
 
 
%% First line of table
 
fprintf('%10s %10s\n', 'Slope', 'Intercept')
 
 
 
%% Initialize variables
 
N = 10;
 
slope = zeros(N, 1);
 
intercept = zeros(N, 1);
 
 
 
%% Loop to find, store, and print slope and intercept
 
for k=1:10
 
    eval(sprintf('data = load(''file%02.0f.dat'');', k));
 
    v = data(:, 1);
 
    i = data(:, 2);
 
    p = polyfit(v, i, 1);
 
    slope(k) = p(1);
 
    intercept(k) = p(2);
 
    fprintf('%10.3e %10.3e\n', slope(k), intercept(k))
 
end
 
</syntaxhighlight>
 
</div>
 

Latest revision as of 22:07, 15 January 2023

Redirect to: