联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2024-02-02 09:23

Lab Report #1 - Root finding part 1

Math 9

Due 2/5 (see Canvas for details)

Instructions: Submit your report as a Matlab live script (i.e. a .mlx

file). Plots should be produced and displayed within the .mlx file. Note:

there are no regrades for this assignment. The assignment is out of 10

points.

Introduction: One of the key uses of root-finding is to solve equations

that we can’t solve analytically (i.e. by doing algebra, etc.). Note that any

equation with one unknown can be transformed into a root-finding problem

by subtracting the right-hand side from the left-hand side to get something

like

LHS ? RHS = 0

Here we will look at a well-known example of an equation that can’t be

solved analytically which arises in quantum mechanics: the finite square well

(if you’re curious, click here (Wikipedia). Don’t worry - no knowledge of

quantum mechanics is required or expected! If you’re interested, here is a

simple summary of the physical meaning behind the problem we’ll study.

A particle inside a well is like a ball bouncing around inside a box

with an open top. The ball’s bounces could be small or large, but

if it bounces too high it will escape from the box. We will let v

represent the energy of the particle (like the height of the bounces)

and u0 the energy required to escape the well (like the depth of the

box). As long as v < u0, the particle will be trapped in the well.

The key point of quantum physics is that unlike the bouncing

ball, there will be only a finite number of possible ”energy levels”

- amounts of energy the particle can have. Here, we’ll use our

Matlab knowledge to study this and make a nice diagram of the

energy levels.

1

Tasks

1. (3 points) Energy levels can be divided into even and odd (referring to

whether they’re associated with a state having even or odd symmetry).

For a given u0 describing the depth of the well, even energy levels are

given by the values of v ∈ (0, u0) that are roots of the equation

f(v) = cos v

q

u

2

0 ? v

2 ? v sin v = 0 (1)

Using u0 = 20, produce the plot of f(v) shown below (on the next page)

via the following steps:

(a) Create an array 100 evenly-spaced values of v from 0 to u0.

(b) Compute an array of the values of f(v) for each value in your v

array by implementing Equation 1 (above) in Matlab. Remember

to use element-wise operators (with the dot)!

(c) To make the line easier to see, we will increase the width. Fill

in the blanks: plot( , , ’LineWidth’, 2) to plot v on the

horizontal axis and f(v) on the vertical axis.

(d) Immediately after your plot command, set the axis labels and title

as shown, using the commands xlabel, ylabel, and title. Note:

u0 can by typed like "u 0".

(e) Use the command fontsize( , "points") to set the font size

large enough to be read. (Try something around 14).

2. (1 points) Repeat the above process to produce a similar plot for u0 =

100. You should expect to see that it looks very jagged.

3. (1 point) Think about what part of our code we could change in order

to make the line smoother. By making an appropriate change, create

a new plot for u0 = 100 that looks smooth like the example from Task

1.

4. (1 point) Using your bisect function, compute and display the only root

of f(v) for u0 = 1, with an error under 10?6

. Hint: You need to figure

out what to use as your initial xl and xr. Try making a plot and looking

at it to choose a starting interval that contains the root!

2

Figure 1: For Task 1.

5. (4 points) Following the following steps, produce an array (you can call

it root array) containing all roots for u0 = 20.

(a) Create an array 100 evenly-spaced values of v from 0 to u0.

(b) Compute an array of the values of f(v) for each value in your v

array (just like above).

(c) Next, we want to find pairs of successive v values in our v array such that the sign of f(v) changes between them, to serve

as our xl and xr in the bisection method. Create xl array and

xr array such that the i-th root lies between xl array(i) and

xr array(i). At the bottom of this file there’s a snippet that

shows you how to do this - you can copy it for no loss of points.

However, If you want to practice thinking like a Matlab programmer, try coming up with a way to do this via logical indexing

yourself. You should find 7 of them!

(d) Pre-allocate a 7-element vector called root array filled with zeros.

(e) Using a for loop, loop over a variable i from 1 to 7, and at each

step call the bisect function using your left and right endpoints

from xl array and xr array. To input the function (first input

3

to bisect), use an anonymous function. Recall the syntax: If we

wanted to express just f(v) = p

u

2

0 ? v

2

, it would be

@(v) sqrt(u_0.^2 - v.^2)

so you just have to change the part after the @(v) to the correct

f(v) from above.

(f) Display the resulting value of root array. You should get values

of approximately:

1.4959 4.4862 7.4711 10.4460 13.4028

16.3240 19.1433

4

Help for 5c: Assuming your v and f arrays are called v array and f array,

try using the following code:

inds = find(sign(f_array(1:(end-1))) ~= sign(f_array(2:end)));

xl_array = v_array(inds);

xr_array = v_array(inds+1);

5


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp