2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Помогите формулку пропаскалить...
Сообщение12.03.2010, 00:12 


20/09/09
27
$N/N_{0}=erfc(x/([math]$sqrt Dt$))=1-erf(x/(2*sqrt Dt))$[/math]

$sqrt{a}$

 Профиль  
                  
 
 Re: Помогите формулку пропаскалить...
Сообщение12.03.2010, 00:29 
Заслуженный участник


04/05/09
4587
ЕМНИП, в Паскале нет функции erf(). Придётся реализовывать самому, например, вот так:
Код:
# from: http://www.cs.princeton.edu/introcs/21function/ErrorFunction.java.html
# Implements the Gauss error function.
#   erf(z) = 2 / sqrt(pi) * integral(exp(-t*t), t = 0..z)
#
# fractional error in math formula less than 1.2 * 10 ^ -7.
# although subject to catastrophic cancellation when z in very close to 0
# from Chebyshev fitting formula for erf(z) from Numerical Recipes, 6.2
def erf(z):
        t = 1.0 / (1.0 + 0.5 * abs(z))
        # use Horner's method
        ans = 1 - t * math.exp( -z*z -  1.26551223 +
                                                t * ( 1.00002368 +
                                                t * ( 0.37409196 +
                                                t * ( 0.09678418 +
                                                t * (-0.18628806 +
                                                t * ( 0.27886807 +
                                                t * (-1.13520398 +
                                                t * ( 1.48851587 +
                                                t * (-0.82215223 +
                                                t * ( 0.17087277))))))))))
        if z >= 0.0:
                return ans
        else:
                return -ans

 Профиль  
                  
 
 Re: Помогите формулку пропаскалить...
Сообщение12.03.2010, 00:35 


20/09/09
27
Да, да, не нашла этой функции
Я писала программу для того, чтобы найти значения функции - программа простая - надо было задать формулу, по которой в цикле посчитались и вывелись бы нужные значения. Однако возникает ошибка: error while linking, почему-то, перел последним end.
Подскажите, пожалуйста, как исправить?
А программу надо было такую:
"Расчет диффузионных профилей" - называется так,

N/N(нулевое)=erfc(x/корень(Dt))=1-erf(x/(2*корень(Dt))
только я в паскале не нашла функцию эрфактум..., поэтому переписала в ПРОСТОМ варианте:
y=(1/(1+a1*x/(2*корень(Dt))+a2*(x/(корень(Dt)))^2+a3*(x/(корень(Dt)))^3+a4*(x/(корень(Dt)))^4)^4)-0,01
где D=10^(-10) - десять в минус десятой степени
t=60 секунд
a1=0,278393
a2=0,230389
a3=0,000972
a4=0,078108
Получилась программа:
Var
x,y,a1,a2,a3,a4,t,h:real;
begin
a1:=0.278393;
a2:=0.230389;
a3:=0.000972;
a4:=0.078108;
x:=0.29;
t:=60;
h:=10000/(2*sqrt(t));
while x<=1.26 do
begin
y:=-0.01+1/sqr(sqr(1+sqr(a1*x*h+a2*(x*h))+sqr(a3*x*h)*a3*x*h+ sqr(sqr(a4*x*h))));
writeln ('x= ' ,x:4:2, ' y= ',y:8:6);
x:=x+0.03;
end;
readln;
end.

Причем, надо еще график тоже в паскале построить, а потом все это в маткаде сделать, но эта ошибка все время появляется, подскажите, как ее исправить...
Нам сказали, что х будет с двумя знаками после запятой, а у - с 6 знаками после запятой...

Мне не удается запустить программу во FREE PASCAL

Но если y всегда -0,01, может быть, подскажете, пожалуйста, как поступить в этом случае???
Может, тип переменных какой-нибудь другой надо...


кроме того, нам дали формулу: N/N(нулевое)=erfc(x/корень(Dt))=1-erf(x/(2*корень(Dt))
где эта самая функция erf(z) от какой-то переменной z определяется так:
erf(z)=1-1/[(1+a1*z+a2*z^2+a3*z^3+a4*z^4)^4]+E(z) где E(z)=0,01 и промежуток х [0,29;1,26]

График - кривая, нам сказали, похожа на ветвь обычной гиперболы, убывающей в 1 четверти...
Подскажите, прошу...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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