commit 811fea30b8ae5f21135e9a65f6077d1b4f81aac5 Author: nihonium Date: Wed Sep 20 02:43:25 2023 +0300 Задание 2 - пункт 1 diff --git a/task2/01_maclaurin/.gitignore b/task2/01_maclaurin/.gitignore new file mode 100644 index 0000000..c368d45 --- /dev/null +++ b/task2/01_maclaurin/.gitignore @@ -0,0 +1,2 @@ +.stack-work/ +*~ \ No newline at end of file diff --git a/task2/01_maclaurin/app/Main.hs b/task2/01_maclaurin/app/Main.hs new file mode 100644 index 0000000..f04ceb2 --- /dev/null +++ b/task2/01_maclaurin/app/Main.hs @@ -0,0 +1,37 @@ +module Main where + +import Graphics.EasyPlot + +-- Шаг сетки +delta = 0.001 + +-- Функция +u = sin + +-- Точка +t = 0.5 + +-- Абсолютная погрешность +err = 10 ** (-3) + +main :: IO () +main = do + let res = map (\(x,y) -> (fromIntegral x,y)) $ calc u t + plot X11 $ Data2D [Style Lines] [] res + print res + + +calc u t = calc' 0 [] u t where + calc' n stat u t | err' < err = (n, err') : stat + | otherwise = (n, err') : calc' (n + 1) stat u t + where err' = abs (u t - maclaurin u t n) + +factorial n | n < 2 = 1 + | otherwise = n * factorial (n - 1) + +diff u 0 h x = u x +diff u n h x = (u' (x + h) - u' (x - h)) / (2 * h) where + u' = diff u (n - 1) h + +maclaurin u x 0 = u 0 +maclaurin u x n = (x ** (fromIntegral n)) * (diff u n delta 0) / (fromIntegral $ factorial n) + maclaurin u x (n - 1) diff --git a/task2/01_maclaurin/graph.png b/task2/01_maclaurin/graph.png new file mode 100644 index 0000000..f935cce Binary files /dev/null and b/task2/01_maclaurin/graph.png differ diff --git a/task2/01_maclaurin/package.yaml b/task2/01_maclaurin/package.yaml new file mode 100644 index 0000000..9a7a6bb --- /dev/null +++ b/task2/01_maclaurin/package.yaml @@ -0,0 +1,25 @@ +name: 01maclaurin + +dependencies: +- base >= 4.7 && < 5 +- easyplot + +ghc-options: +- -Wall +- -Wcompat +- -Widentities +- -Wincomplete-record-updates +- -Wincomplete-uni-patterns +- -Wmissing-export-lists +- -Wmissing-home-modules +- -Wpartial-fields +- -Wredundant-constraints + +executables: + 01maclaurin-exe: + main: Main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N diff --git a/task2/01_maclaurin/stack.yaml b/task2/01_maclaurin/stack.yaml new file mode 100644 index 0000000..37349ea --- /dev/null +++ b/task2/01_maclaurin/stack.yaml @@ -0,0 +1,68 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# https://docs.haskellstack.org/en/stable/yaml_configuration/ + +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# resolver: ./custom-snapshot.yaml +# resolver: https://example.com/snapshots/2018-01-01.yaml +resolver: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/12.yaml + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +packages: +- . +# Dependency packages to be pulled from upstream that are not in the resolver. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +extra-deps: +- easyplot-1.0@sha256:3fec6ccf425b370ab668eb342bc4cd92777880653e27a982db7b225fd007cb2b,1936 +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +# extra-deps: [] + +# Override default flag values for local packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=2.7" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/task2/01_maclaurin/stack.yaml.lock b/task2/01_maclaurin/stack.yaml.lock new file mode 100644 index 0000000..01805e5 --- /dev/null +++ b/task2/01_maclaurin/stack.yaml.lock @@ -0,0 +1,20 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: +- completed: + hackage: easyplot-1.0@sha256:3fec6ccf425b370ab668eb342bc4cd92777880653e27a982db7b225fd007cb2b,1936 + pantry-tree: + sha256: a5de94b54a51732bf70a601fca8c905fe074ecf870ea573db36d53a3bbb282f4 + size: 219 + original: + hackage: easyplot-1.0@sha256:3fec6ccf425b370ab668eb342bc4cd92777880653e27a982db7b225fd007cb2b,1936 +snapshots: +- completed: + sha256: 9313df78f49519315342f4c51ffc5da12659d3735f8ac3c54a1fb98ff874474e + size: 640036 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/12.yaml + original: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/12.yaml