Добавил:
свои люди в ТПУ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛБ8

.docx
Скачиваний:
0
Добавлен:
14.01.2026
Размер:
141.82 Кб
Скачать

Инженерная школа природных ресурсов

Направление подготовки Химическая технология

Отделение химической инженерии

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА PYTHON

Отчет по лабораторной работе № 8

Функции и функциональные возможности языка Python

Выполнил студент гр. ХИМ54 А.В. Чижова

(Подпись)

01.01.2026 г.

Отчет принят:

Преподаватель

доцент ОХИ ИШПР, к.т.н. В.А. Чузлов

(Подпись)

_____ _____________ 2026 г.

Томск 2026 г.

Задание 1

Формула нормализованной гауссовой кривой со средним значением μ и стандартным отклонением σ записывается следующим образом:

Необходимо написать "ленивую" функцию для вычисления гауссовых кривых при μ = 0 и σ = 0.5; 1.0; 1.5. Используйте секту из 10 точек в интервале [-5 , 5].

Функция должна содержать следующие параметры:

  • mu: float – параметр μ

  • sigma: float – параметр σ

  • bounds: tuple[float, float] – интервал точек

  • npoints: int – количество точек из интервала bounds для расчёта кривой Гаусса

Программная реализация:

import math

def gaussian(

mu: float,

sigma: float,

bounds: tuple[float, float],

npoints: int,

):

start, end = bounds

step = (end - start) / (npoints - 1)

for point in [start + i * step for i in range(npoints)]:

yield (1/(sigma * math.sqrt(2*math.pi)))*math.exp((-(point - mu) ** 2)/(2 * mu * mu))

bounds = -5, 5

points = 10

mu = 5

sigma1 = 0.5

sigma2 = 1.0

sigma3 = 1.5

gaussian1 = gaussian(mu, sigma1, bounds, points)

gaussian2 = gaussian(mu, sigma2, bounds, points)

gaussian3 = gaussian(mu, sigma3, bounds, points)

print('-------------sigma=0.5---------------')

for point in gaussian1:

print(point)

print('-------------sigma=1.0---------------')

for point in gaussian2:

print(point)

print('-------------sigma=1.5---------------')

for point in gaussian3:

print(point)

Ответ:

-------------sigma=0.5---------------

0.10798193302637613

0.16430377692481163

0.2379563808481531

0.3280201493519873

0.43038492200606215

0.5374857230826479

0.6388960110447045

0.722847659765487

0.7784249383434928

0.7978845608028654

-------------sigma=1.0---------------

0.05399096651318806

0.08215188846240581

0.11897819042407655

0.16401007467599366

0.21519246100303108

0.26874286154132393

0.31944800552235225

0.3614238298827435

0.3892124691717464

0.3989422804014327

-------------sigma=1.5---------------

0.035993977675458706

0.05476792564160388

0.07931879361605104

0.10934004978399578

0.1434616406686874

0.17916190769421597

0.2129653370149015

0.24094921992182905

0.25947497944783093

0.2659615202676218

Задание 2

Закон Бугера–Ламберта–Бера связывает концентрацию c вещества в образце раствора с интенсивностью света, проходящего через этот образец It с заданной толщиной слоя вещества l при известной длине волны λ:

где – интенсивность света на входе в вещество, – коэффициент поглощения при длине волны λ.

После проведения ряда измерений, позволяющих определить часть света, которая прошла сквозь раствор, It/I0, коэффициент поглощения α можно определить при помощи линейной аппроксимации:

Несмотря на то, что эта прямая проходит через начало координат (y = 0 при c = 0), мы будем выполнять подгонку для более общего линейного отношения:

где m = с проверкой k на приближение к нулю.

Коэффициенты линейной аппроксимации можно найти по следующим формулам:

где n – количество экспериментальных точек.

При рассмотрении образца раствора с толщиной слоя 0.8 см при измерениях были получены данные, приведенные в таблице: отношение It/I0 при пяти различных концентрациях:

С, моль/л

It/I0

0.3

0.851

0.5

0.832

0.7

0.753

1.0

0.764

1.3

0.791

Используя линейную аппроксимацию, определите коэффициент α.

Этапы решения

  1. Реализуйте функцию для нахождения коэффициентов линейной аппроксимации экспериментальных данных по концентрации и отношению It/I0.

  2. Определите коэффициент α.

Программная реализация:

import math

from typing import List, Tuple

def linear_regression(c: List[float], y: List[float]) -> Tuple[float, float]:

n = len(c)

sum_c = sum(c)

sum_y = sum(y)

sum_c2 = sum(ci * ci for ci in c)

sum_cy = sum(ci * yi for ci, yi in zip(c, y))

denominator = n * sum_c2 - sum_c * sum_c

k = (sum_y * sum_c2 - sum_c * sum_cy) / denominator

m = (n * sum_cy - sum_c * sum_y) / denominator

return k, m

def calculate_alpha(c_values: List[float], It_I0_values: List[float], l: float) -> float:

y_values = [math.log(value) for value in It_I0_values]

k, m = linear_regression(c_values, y_values)

print(f"Коэффициенты линейной регрессии:")

print(f" m = {m:.6f}")

print(f" k = {k:.6f} (теоретически должен быть близок к 0)")

print(f" Абсолютное значение |k| = {abs(k):.6f}")

alpha = -m / l

return alpha

def main() -> None:

"""Основная функция программы."""

# Экспериментальные данные

c_values = [0.3, 0.5, 0.7, 1.0, 1.3]

It_I0_values = [0.851, 0.832, 0.753, 0.764, 0.791]

# Толщина слоя

l = 0.8 # см

print("Экспериментальные данные:")

print("c [моль/л] I_t/I_0")

print("-" * 25)

for c, ratio in zip(c_values, It_I0_values):

print(f"{c:8.1f} {ratio:10.3f}")

print()

print("Вычисленные значения y = ln(I_t/I_0):")

print("c [моль/л] y = ln(I_t/I_0)")

print("-" * 35)

for c, ratio in zip(c_values, It_I0_values):

y = math.log(ratio)

print(f"{c:8.1f} {y:10.6f}")

print()

# Вычисляем коэффициент поглощения α

alpha = calculate_alpha(c_values, It_I0_values, l)

print("\n" + "=" * 50)

print(f"РЕЗУЛЬТАТ:")

print(f"Коэффициент поглощения α = {alpha:.6f} л/(моль·см)")

print("=" * 50)

if __name__ == "__main__":

main()

Ответ:

Экспериментальные данные:

c [моль/л] I_t/I_0

-------------------------

0.3 0.851

0.5 0.832

0.7 0.753

1.0 0.764

1.3 0.791

Вычисленные значения y = ln(I_t/I_0):

c [моль/л] y = ln(I_t/I_0)

-----------------------------------

0.3 -0.161343

0.5 -0.183923

0.7 -0.283690

1.0 -0.269187

1.3 -0.234457

Коэффициенты линейной регрессии:

m = -0.082520

k = -0.163805 (теоретически должен быть близок к 0)

Абсолютное значение |k| = 0.163805

==================================================

РЕЗУЛЬТАТ:

Коэффициент поглощения α = 0.103150 л/(моль·см)

==================================================

Соседние файлы в предмете Программирование на Python