Добавил:
qwerty12vghjmfh3456
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:MV_Lab1
.js// Точность вывода на экран
const PRECISION = 6
//2 вариант
const a = 2
const b = -1.3
const c = 0.04
const d = 0.12
// Заданная точность решения
const eps = 0.0001
// Заданная функция f(x,y)=ax+by+e^(cx^2 + dy^2)
function f(x, y) {
return a*x + b*y + Math.exp(c*x**2 + d*y**2)
}
// Производная f по x: a + 2cxe^(cx^2 + dy^2)
function derivativeX(x, y) {
return a + 2*c*x * Math.exp(c*x**2 + d*y**2)
}
// Производная f по y: b + 2dye^(cx^2 + dy^2)
function derivativeY(x, y) {
return b + 2*d*y * Math.exp(c*x**2 + d*y**2)
}
// Градиент по заданной функции
function gradientF(x, y) {
return {
x: derivativeX(x, y),
y: derivativeY(x, y)
}
}
// длина шага
let alpha = 1
// Вычисление следующей точки
function nextPoint(x, y) {
const grad = gradientF(x, y)
return {
x: x - alpha * grad.x,
y: y - alpha * grad.y
}
}
// Длина градиента
function lengthGradient(grad) {
return Math.sqrt(grad.x**2 + grad.y**2)
}
// Точка входа в программу
function main() {
console.log(`a: ${a}`)//вывод моих значений
console.log(`b: ${b}`)
console.log(`c: ${c}`)
console.log(`d: ${d}`)
// Начальная точка
let x = 0
let y = 0
console.log(`Пусть начальная точка: (${x}, ${y})`)
// результирующая таблица
const table = []
let grad = gradientF(x, y)
// Пока длина градиента больше заданной точности
while (lengthGradient(grad) >= eps) {//сранвиваем со значением из условия
const next = nextPoint(x, y)//вычисляем новую точку
const currentValue = f(x,y)//вычисл зн ф-ции
// Если шаг слишком длинный, то укорачиваем шаг
if ( f(next.x, next.y) > currentValue ) {//функция от след точек больше currentValue?
alpha = alpha / 2//уменьшаем шаг
grad = gradientF(x, y)
} else {
// Добавляем в таблицу результатов
table.push({
x: x.toFixed(PRECISION),
y: y.toFixed(PRECISION),
'f(x,y)': currentValue.toFixed(PRECISION),
'dF/dx': grad.x.toFixed(PRECISION),
'dF/dy': grad.y.toFixed(PRECISION),
'alpha': alpha.toFixed(PRECISION)
});
// Запоминаем следующую точку
({x, y} = nextPoint(x, y))
// Вычисляем градиент
grad = gradientF(x, y)
}
}
// Выводим результаты
console.table(table)
console.log(`f min = f(${x}, ${y}) = ${f(x,y)}`)
}
// Запуск программы
main()
Соседние файлы в предмете Методы вычислений