Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pro] Как задать производную в общем виде 
V
    Опции темы
f999t1
Дата 20.12.2008, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 11.4.2006

Репутация: нет
Всего: нет



как задать в фортране  производную в общем виде
или можно какую-нибудь библиотеку подключить

на самом деле, решаю следующее
есть выражение вида x(j+1)=1-a(x(j))^2

на каждом шаге надо вычислять производную dx(j+1)/dx(j),
но скажым шагом полином увеличивается 

подскажите, примерный алгоритм 

Это сообщение отредактировал(а) f999t1 - 22.12.2008, 17:11
PM MAIL   Вверх
FatalError
Дата 22.12.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 11.4.2006

Репутация: нет
Всего: 1



Вы бы хоть функцию нормально записали, а то возведение в степень там осталось не у дел перед скобкой, да и не ясно, с чего бы это  
Цитата
скажым шагом полином увеличивается 

Тогда, может, кто чего и подскажет.
PM MAIL   Вверх
Lido4ka
Дата 22.12.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



по-моему, библиотеки тут не подключишь, можно попробовать вычислять производную либо аналитически, либо численными методами. Коды вычисления численными методами обычно простые.
PM MAIL   Вверх
f999t1
Дата 23.12.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 11.4.2006

Репутация: нет
Всего: нет



так с производными боле мене понятно
вот текст
Код

program r

    integer i,j,k

    real f ,fb, ri, ri2, xi,xi2,x,r0,xb,rb,e,delta,deltar,fi,fib,fai
      real faib
  
    x=2.0/3.0
    r0=1
      rb=2
      
    e=0.0001
    
      xi=x       
    write(*,*) xi,x   
      
    
    
    !fi2=1-ri*(fi)**2
    ri=r0
      delta=1
    !*****************************************
    do while (delta>e)   ! i=1,70
      
    fi=fa(ri,xi)
    fib=fa(rb,xi)
      write(*,*) fi,fib
    ri2=ri-( (fi-xi)/(fi-fib)  )*(ri-rb)
      
    delta=abs(ri2-ri)
    write(*,*)'delta=',delta,'ri2=',ri2
    ri=ri2
      end do

    
      !**********************************
       

      


    
    
    
    contains
    real function fa(rt,xt)
    real xt,rt

    fa=1-rt*(xt**2)
    end function fa
        

    end




как задать рекурсию?
x(j+1)=1-a( x(j) )^2

т.е в первом ходе вычислил а из уравнения
fa=1-a*(x^2)
во втором ходе надо это сделать из уравнения
fa2=1-a*(fa^2)=1-a+2(a^3)(x^2)-(a^2)(x^4)
и т.д.

PM MAIL   Вверх
popovda
Дата 27.12.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Производные на фортране сложно записать аналитически, не парсер же прикручиватьsmile Воспользуйтесь конечными разностями, как по определению производной:
Код

(f(x + h) - f(x))/h ! Правая конечная разность
(f(x) -  f(x - h))/h ! Левая ----------"-------"-------
0.5*(f(x+h) - f(x-h))/h ! Центральная

Вторая производная 

(f(x+h) -2*f(x) + f(x-h))/h**2


Шаг выбирается в зависимости от типа данных, на Intel x86 это ~10^-3 --- 10^4 для real(4)
h~10-6 --- 10^-8 для real(8)


В общем виде --- да напишите функцию

derivs(f,x) - писать не буду:) Но интерфейс такой

interface
      real(8) function derives(f,x)
                 interface 
                         real(8) function f(x) 
                                    real(8), intent(in)::x;
                         end function f
                 end interface
                 
                 real(8), intent(in)::x
      end function derives
end interface          



А рекурсию (хотя лучше её избегать) делают с помощью объявлений функции типа 
recurcive function f(x) result A........

Это сообщение отредактировал(а) popovda - 27.12.2008, 15:58


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.