Files
compute-math/lab2/app.py
2025-05-04 19:22:02 +04:00

89 lines
3.0 KiB
Python

from flask import Flask, render_template, request
import HookJeeves
import os
import json
app = Flask(__name__)
app.config["UPLOAD_FOLDER"] = "uploads/"
os.makedirs(app.config["UPLOAD_FOLDER"], exist_ok=True)
def parse_uploaded_data(file):
data = json.load(file)
return data
def to_str(arr):
return ",".join(list(map(str, arr)))
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
if "datafile" in request.files and request.files["datafile"].filename != "":
file = request.files["datafile"]
data = parse_uploaded_data(file)
else:
try:
data = {
"x0": list(map(float, request.form["x0"].split(","))),
"delta0": list(map(float, request.form["delta0"].split(","))),
"epsilon": float(request.form["epsilon"]),
"alpha": float(request.form["alpha"]),
"target": request.form["target"],
"x1c": list(map(float, request.form["x1c"].split(","))),
"x2c": list(map(float, request.form["x2c"].split(","))),
"x1r": list(map(float, request.form["x1r"].split(","))),
"x2r": list(map(float, request.form["x2r"].split(","))),
}
except (KeyError, ValueError, json.JSONDecodeError):
return render_template(
"index.html",
error="Ошибка в данных формы. Заполните все поля корректно.",
)
# Инициализация функций
c = [data["x1c"][::-1], data["x2c"][::-1]]
x1r = data["x1r"]
x2r = data["x2r"]
target = data["target"]
def f(x):
return sum(
[
sum([c[i][j] * x[i] ** j for j in range(len(c[i]))])
for i in range(len(c))
]
)
def fit(a, b):
return a < b if target == "min" else a > b
def r(x):
return x1r[0] <= x[0] <= x1r[1] and x2r[0] <= x[1] <= x2r[1]
# Запуск метода
x, val, x_err = HookJeeves.hooke_jeeves(
f, data["x0"], data["delta0"], data["epsilon"], data["alpha"], r=r, fit=fit
)
return render_template(
"index.html",
result=True,
log=HookJeeves.result_log,
extreme={"x": x, "val": val, "x_err": x_err, "type": target},
form_data={
"x0": to_str(data["x0"]),
"delta0": to_str(data["delta0"]),
"epsilon": str(data["epsilon"]),
"alpha": str(data["alpha"]),
"target": data["target"],
"x1c": to_str(data["x1c"]),
"x2c": to_str(data["x2c"]),
"x1r": to_str(data["x1r"]),
"x2r": to_str(data["x2r"]),
},
)
return render_template("index.html")