2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 19:40 


05/09/16
11519
Niemand
Если у вас в экселе в ячейке A1 будет значение $x$, то формула
Код:
=(2*A1*(1+A1*A1*(0,1049934947+A1*A1*(0,0424060604+A1*A1*(0,0072644182+A1*A1*(0,0005064034+A1*A1*(0,0001789971))))))/(1+A1*A1*(0,7715471019+A1*A1*(0,2909738639+A1*A1*(0,0694555761+A1*A1*(0,0140005442+A1*A1*(0,0008327945+2*A1*A1*0,0001789971)))))))/(КОРЕНЬПИ(1)*EXP(-A1*A1))

Будет считать быстро и даст неплохое приближение $erfi(x)$
:mrgreen:
Насколько неплохое?
Относительная ошибка, в процентах, т.е. $err(x)=\left(1-\dfrac{erfi(x)}{excel(x)}\right)*100%$
Код:
x=1, err=-0,02%
x=2, err=-0,01%
x=3, err=-0,02%
x=4, err=-0,05%
x=5, err=-0,04%
x=6, err=0,08%
x=7, err=0,10%
x=8, err=0,06%
x=9, err=0,02%
x=10, err=-0,01%

А, или я знак перепутал. Ну неважно, везде меншьне одной десятой процента.
Дальше там числа большие, я не проверял :mrgreen:

Собсно сами значения, выдаваемые екселем:
Код:
x   erfi(x)
1   1,650429105
2   18,56482201
3   1629,998461
4   1296966,204
5   8298304995
6   4,11272E+14
7   1,55347E+20
8   4,43242E+26
9   9,50076E+33
10  1,52431E+42

Ну то есть на 4-5 знаков можете рассчитывать.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 19:56 
Аватара пользователя


12/02/23
65
wrest
Я состряпал функцию пользователя для Excel VBA. она считает быстро и дает погрешность 0,000001 (при желании можно еще лучше; ограничивает только переполнение по переменной у):
Код:
Function Erfi(x As Single) As Single        ' Интеграл от 0 до х от функции Exp(x^2)
Dim n As Byte, S As Single, Glied As Single, y As Double
y = x: S = x: n = 0
Do
        n = n + 1
        y = y * x ^ 2
        Glied = y / ((2 * n + 1) * Application.WorksheetFunction.Fact(n))       ' (n!)
        S = S + Glied
Loop Until Abs(Glied) < 0.000001
Erfi = S
End Function

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:03 


05/09/16
11519
Niemand в сообщении #1594851 писал(а):
Я состряпал функцию пользователя для Excel VBA. она считает быстро и дает погрешность 0,000001

Можно канеш и функцию, я просто исходил из э... универсальности и простоты :)

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:28 
Аватара пользователя


12/02/23
65
Проверял. Сопоставление моей программы с интегралом $\int\limits_{0}^{x}\exp(x^2)dx$ (посчитано в ГеоГебре):
X.....Erfi (X).............GeoGebra........Ошибка (относительная)
1.....1,462651732.....1,462651746.......9,84E-09
2......16,45262762....16,45262777.......8,95E-09
3......1444,545123....1444,545123.......1,46E-10
4......1149400,635....1149400,635.......3,00E-13
5......7354153748
6......3,64483E+14
7......1,37674E+20
7,5....1,80686E+23
Отсюда видно также, что ваша формула дает плохие результаты (сравните ваши числа с ГеоГеброй).
К сожалению, ГеоГебра считает только до х=4, дальше числа слишком большие для нее.
Моя программа тоже приводит к переполнению (из-за внутренней переменной у) при х>7,7. М.б. это ограничение можно обойти, если написать программу похитрее, но мне лень: для моей задачи достаточно того, что есть.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:35 


05/09/16
11519
Niemand в сообщении #1594774 писал(а):
Excel - очень гибкий и мощный программируемый калькулятор, не требующий выдающихся способностей в программировании; он позволяет решать любые задачи (особенно если владеть VBA), например, решать алгебраические (в том числе трансцендентные) уравнения, численное дифференцирование и интегрирование, дифуры, векторные и матричные операции, автоматическое построение графиков, регрессионный анализ и т.д.

Ему только не хватает длинной арифметики и за этим надо следить, а так-то да, всё можно написать или дописать.
Ну или, как в данном случае, не хватает универсальности встроенных функций.

-- 22.05.2023, 20:36 --

Niemand в сообщении #1594862 писал(а):
Отсюда видно также, что ваша формула дает плохие результаты (сравните ваши числа с ГеоГеброй).

Ну ессно, я ж привёл ошибку. 4-5 знаков верные, остальные нет.

-- 22.05.2023, 20:40 --

Niemand в сообщении #1594862 писал(а):
Моя программа тоже приводит к переполнению

Ну это дело такое, да. Кстати формула считает до 10, дальше я не смотрел.
Я то сам пользуюсь каклькулятором с длинной арифметикой, он от таких чисел не переполняется :mrgreen:
Например
? print(erfi(10^6))
1.0075177701699419421160662091100491410 E434294481897

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:41 
Аватара пользователя


12/02/23
65
Цитата:
Ну ессно, я ж привёл ошибку. 4-5 знаков верные, остальные нет.
Нет, у вас ошибка уже во второй значащей цифре.
Сравните:
Ваше число......ГеоГебра
1,650429..........1,462651
18,56482..........16,45262
1629,998..........1444,545
и т.д.
А "длинная арифметика" для практических задач излишня.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:45 


05/09/16
11519
Niemand в сообщении #1594866 писал(а):
Сравните:
Ваше число......ГеоГебра

У меня же формула считает $erfi(x)$, а вы интеграл от $e^{x^2}$ считаете.

Они связаны так: $erfi(x)&=\dfrac {2}{\sqrt {\pi }}\int \limits_{0}^{x}e^{t^{2}}dt$

Вот в эти $\dfrac {2}{\sqrt {\pi }}$ раз и различие :wink:
Хотя, впрочем, в Википедиях пишут что некоторые считают $erf(x)$ (ну и следом $erfi(x)$ )без множителя $\dfrac {2}{\sqrt {\pi }}$, вы наверное из них :)

-- 22.05.2023, 20:51 --

Niemand в сообщении #1594866 писал(а):
А "длинная арифметика" для практических задач излишня.

Ну... всяко бывает :)

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 22:53 
Аватара пользователя


12/02/23
65
ОК, извиняюсь за недоразумение.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 00:23 
Аватара пользователя


12/02/23
65
Доработал функцию. Теперь она считает Erfi(x) вплоть до x=26,7. Ограничение из-за величины результата: формат double позволяет числа не больше $1,797\cdot10^{308}$

Код:
Function Erfi(x As Double) As Double        ' Интеграл от 0 до х от функции Exp(x^2)
Dim n As Integer, S As Double, Member As Double, Faktor As Double
n = 0: S = x: Member = x
Do
        Faktor = (2 * n + 1) / (2 * n + 3): Faktor = Faktor * x ^ 2 / (n + 1)
        Member = Member * Faktor
        S = S + Member
        n = n + 1
Loop Until Abs(Member) < 0.000001
Erfi = S
End Function

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 14:16 
Заслуженный участник


03/01/09
1682
москва
С помощью контурного интегрирования получается:$$\int \limits _0^xe^{t^2}dt=\dfrac {2e^{x^2}}x\int \limits _0^{\infty }e^{-t^2}t\sin ^2(xt)dt$$По этой формуле проще оценить относительную погрешность вычисления.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 15:28 


05/09/16
11519
mihiv
В википедии пишут, что оценивают по https://en.wikipedia.org/wiki/Dawson_function
Собсна формула для экселя что я приводил выше, это аппроксимация функции Доусона дробно-рациональной функцией.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: gris, vicvolf


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group