MTH202 Worksheet 4¶

In [1]:
import numpy as np

Problem 1¶

You are organizing a French cuisine party. You need to cook one starter, one main dish, and one dessert. You are uncertain of what to make among the following lists:

Starter

  • Vegetarian salad
  • Mushroom soup
  • Grilled scallop

Main dish

  • Beef steak
  • German sausages
  • Roasted duck
  • Grilled sea bass

Dessert

  • Strawberry sorbet
  • Custart tart

Use for loops to list all possible course combinations.

In [2]:
Starters = ["Vegetarian salad", "Mushroom soup", "Grilled scallop"]
Mains = ["Beef steak", "German sausages", "Roasted duck", "Grilled sea bass"]
Desserts = ["Strawberry sorbet", "Custart tart"]

for starter in Starters:
    for main in Mains:
        for dessert in Desserts:
            print(f"(Starter: {starter}, Main dish: {main}, Dessert: {dessert})")
(Starter: Vegetarian salad, Main dish: Beef steak, Dessert: Strawberry sorbet)
(Starter: Vegetarian salad, Main dish: Beef steak, Dessert: Custart tart)
(Starter: Vegetarian salad, Main dish: German sausages, Dessert: Strawberry sorbet)
(Starter: Vegetarian salad, Main dish: German sausages, Dessert: Custart tart)
(Starter: Vegetarian salad, Main dish: Roasted duck, Dessert: Strawberry sorbet)
(Starter: Vegetarian salad, Main dish: Roasted duck, Dessert: Custart tart)
(Starter: Vegetarian salad, Main dish: Grilled sea bass, Dessert: Strawberry sorbet)
(Starter: Vegetarian salad, Main dish: Grilled sea bass, Dessert: Custart tart)
(Starter: Mushroom soup, Main dish: Beef steak, Dessert: Strawberry sorbet)
(Starter: Mushroom soup, Main dish: Beef steak, Dessert: Custart tart)
(Starter: Mushroom soup, Main dish: German sausages, Dessert: Strawberry sorbet)
(Starter: Mushroom soup, Main dish: German sausages, Dessert: Custart tart)
(Starter: Mushroom soup, Main dish: Roasted duck, Dessert: Strawberry sorbet)
(Starter: Mushroom soup, Main dish: Roasted duck, Dessert: Custart tart)
(Starter: Mushroom soup, Main dish: Grilled sea bass, Dessert: Strawberry sorbet)
(Starter: Mushroom soup, Main dish: Grilled sea bass, Dessert: Custart tart)
(Starter: Grilled scallop, Main dish: Beef steak, Dessert: Strawberry sorbet)
(Starter: Grilled scallop, Main dish: Beef steak, Dessert: Custart tart)
(Starter: Grilled scallop, Main dish: German sausages, Dessert: Strawberry sorbet)
(Starter: Grilled scallop, Main dish: German sausages, Dessert: Custart tart)
(Starter: Grilled scallop, Main dish: Roasted duck, Dessert: Strawberry sorbet)
(Starter: Grilled scallop, Main dish: Roasted duck, Dessert: Custart tart)
(Starter: Grilled scallop, Main dish: Grilled sea bass, Dessert: Strawberry sorbet)
(Starter: Grilled scallop, Main dish: Grilled sea bass, Dessert: Custart tart)

Problem 2¶

Use while loop to find the smallest positive integer $x$ in which $\dfrac{x^{2} + x\sin(x)}{2 + x} \geq 100$.

(Note: Use np.sin(x) for $sin(x)$)

In [3]:
x = 0

while (x**2 + x*np.sin(x))/(2+x) < 100:
    x += 1
    
print(f"x = {x}, (x^2 + x sin(x))/(2+x) = {(x**2 + x*np.sin(x))/(2+x)}")
x = 102, (x^2 + x sin(x))/(2+x) = 101.01415704537074

Problem 3¶

Suppose that $A = [a_{ij}]$ is an $m \times n$ matrix and $B = [b_{ij}]$ is an $n \times r$ matrix. The product $AB = [c_{ij}]$ is an $m \times r$ matrix whose entry $c_{ij}$ is defined by $$ c_{ij} = a_{i1}b_{1j} + a_{i2}b_{2j} + \dots + a_{in}b_{nj}. $$

Write, using for loops, computing all entries of $AB$.

(Note: Check the correctness with A @ B.)

In [4]:
A = np.array([
    [1, 0, 0, -1, 3, 5],
    [2, 1, 5, 2, 0, -2],
    [3, 5, 0, 4, -3, 1]])

B = np.array([
    [1, 11],
    [2, -2],
    [5, 0],
    [0, -1],
    [1, 0],
    [0, 6]])

Method 1¶

In [5]:
assert A.shape[1] == B.shape[0]  # Check if AB can be defined.
m = A.shape[1]
C_rows, C_cols = (A.shape[0], B.shape[1])
C = np.zeros((C_rows, C_cols))

for i in range(C_rows):
    for j in range(C_cols):
        for k in range(m):
            C[i,j] += A[i,k]*B[k,j]
            
print(f"AB =\n{C}")
AB =
[[ 4. 42.]
 [29.  6.]
 [10. 25.]]

Method 2¶

In [6]:
assert A.shape[1] == B.shape[0]  # Check if AB can be defined.
m = A.shape[1]
C_rows, C_cols = (A.shape[0], B.shape[1])
C = np.zeros((C_rows, C_cols))

for i in range(C_rows):
    for j in range(C_cols):
        C[i,j] = np.dot(A[i,:], B[:,j])
            
print(f"AB =\n{C}")
AB =
[[ 4. 42.]
 [29.  6.]
 [10. 25.]]